Sha256: cae5a89d19796b4de3d14e2d34805e91896c71e4554dfd8052ce4d1c58af40ec

Contents?: true

Size: 1.86 KB

Versions: 4

Compression:

Stored size: 1.86 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 == {}
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.33 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.32 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.31 lib/aws-sdk-core/paging/pager.rb
aws-sdk-core-2.0.30 lib/aws-sdk-core/paging/pager.rb