Sha256: 591dc3b108578556f73e53021e53ecf47ca52849fc1b576c382cb24dcd571874

Contents?: true

Size: 1.87 KB

Versions: 15

Compression:

Stored size: 1.87 KB

Contents

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 empty_value?(value)
        end
      end

      # @api private
      def prev_tokens(response)
        @tokens.each.with_object({}) do |(_, target), tokens|
          value = JMESPath.search(target, response.context.params)
          tokens[target.to_sym] = value unless empty_value?(value)
        end
      end

      # @param [Seahorse::Client::Response] response
      # @return [Boolean]
      def truncated?(response)
        if @more_results
          JMESPath.search(@more_results, response.data)
        else
          next_tokens = self.next_tokens(response)
          prev_tokens = self.prev_tokens(response)
          !(next_tokens.empty? || next_tokens == prev_tokens)
        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

      def empty_value?(value)
        value.nil? || value == '' || value == [] || value == {}
      end

    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.48 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.47 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.46 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.45 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.44 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.43 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.42 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.41 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.40 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.39 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.38 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.37 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.36 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.35 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.34 lib/aws-sdk-core/paging/pager.rb