module Miasma::Contrib::AwsApiCore::RequestUtils

Utility methods for API requests

Public Instance Methods

all_result_pages(next_token, *result_key, &block) click to toggle source

Fetch all results when tokens are being used for paging results

@param next_token [String] @param result_key [Array<String, Symbol>] path to result @yield block to perform request @yieldparam options [Hash] request parameters (token information) @return [Array]

# File lib/miasma/contrib/aws.rb, line 29
def all_result_pages(next_token, *result_key, &block)
  list = []
  options = next_token ? Smash.new("NextToken" => next_token) : Smash.new
  result = block.call(options)
  content = result.get(*result_key.dup)
  if content.is_a?(Array)
    list += content
  else
    list << content
  end
  set = result.get(*result_key.slice(0, 3))
  if set.is_a?(Hash) && set["NextToken"]
    [content].flatten.compact.each do |item|
      if item.is_a?(Hash)
        item["NextToken"] = set["NextToken"]
      end
    end
    list += all_result_pages(set["NextToken"], *result_key, &block)
  end
  list.compact
end