Sha256: 1a2384db983f4b6a294a068c64547ae512000ae95024ad893396c198b2f282be

Contents?: true

Size: 1.39 KB

Versions: 5

Compression:

Stored size: 1.39 KB

Contents

require 'jmespath'

module Aws
  module Paging
    class Pager

      def initialize(rules)
        if rules['more_results']
          @more_results = underscore(rules['more_results'])
        end
        if rules['limit_key']
          @limit_key = underscore(rules['limit_key']).to_sym
        end
        map_tokens(rules)
      end

      # @return [Symbol, nil]
      attr_reader :limit_key

      # @param [Seahorse::Client::Response] response
      # @return [Hash]
      def next_tokens(response)
        @tokens.each.with_object({}) do |(source, target), next_tokens|
          value = JMESPath.search(source, response.data)
          next_tokens[target.to_sym] = value unless value.nil?
        end
      end

      # @param [Seahorse::Client::Response] response
      # @return [Boolean]
      def truncated?(response)
        if @more_results
          JMESPath.search(@more_results, response.data)
        else
          !next_tokens(response).empty?
        end
      end

      private

      def map_tokens(rules)
        input = Array(rules['input_token'])
        output = Array(rules['output_token'])
        @tokens = {}
        input.each.with_index do |key, n|
          @tokens[underscore(output[n])] = underscore(key)
        end
      end

      def underscore(str)
        str.
          gsub(' or ', '||').
          gsub(/\w+/) { |part| Seahorse::Util.underscore(part) }
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.10 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.9 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.8 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.7 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.6 lib/aws-sdk-core/paging/pager.rb