Class: Google::Apis::Core::PagedResults
- Inherits:
-
Object
- Object
- Google::Apis::Core::PagedResults
- Includes:
- Enumerable
- Defined in:
- lib/google/apis/core/base_service.rb
Overview
Helper class for enumerating over a result set requiring multiple fetches
Instance Attribute Summary collapse
-
#last_result ⇒ Object
readonly
Returns the value of attribute last_result.
Instance Method Summary collapse
-
#each ⇒ Object
Iterates over result set, fetching additional pages as needed.
-
#initialize(service, max: nil, items: :items, cache: true, response_page_token: :next_page_token, &block) ⇒ PagedResults
constructor
A new instance of PagedResults.
Constructor Details
#initialize(service, max: nil, items: :items, cache: true, response_page_token: :next_page_token, &block) ⇒ PagedResults
Returns a new instance of PagedResults.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/google/apis/core/base_service.rb', line 43 def initialize(service, max: nil, items: :items, cache: true, response_page_token: :next_page_token, &block) @service = service @block = block @max = max @items_field = items @response_page_token_field = response_page_token if cache @result_cache = Hash.new do |h, k| h[k] = @block.call(k, @service) end @fetch_proc = Proc.new { |token| @result_cache[token] } else @fetch_proc = Proc.new { |token| @block.call(token, @service) } end end |
Instance Attribute Details
#last_result ⇒ Object (readonly)
Returns the value of attribute last_result.
33 34 35 |
# File 'lib/google/apis/core/base_service.rb', line 33 def last_result @last_result end |
Instance Method Details
#each ⇒ Object
Iterates over result set, fetching additional pages as needed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/google/apis/core/base_service.rb', line 60 def each page_token = nil item_count = 0 loop do @last_result = @fetch_proc.call(page_token) items = @last_result.send(@items_field) if items.kind_of?(Array) for item in items item_count = item_count + 1 break if @max && item_count > @max yield item end elsif items.kind_of?(Hash) items.each do |key, val| item_count = item_count + 1 break if @max && item_count > @max yield key, val end elsif items # yield singular non-nil items (for genomics API) yield items end break if @max && item_count >= @max next_page_token = @last_result.send(@response_page_token_field) break if next_page_token.nil? || next_page_token == page_token page_token = next_page_token end end |