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 |