class Restforce::Collection
Public Class Methods
Given a hash and client, will create an Enumerator that will lazily request Salesforce for the next page of results.
# File lib/restforce/collection.rb, line 9 def initialize(hash, client) @client = client @raw_page = hash end
Public Instance Methods
# File lib/restforce/collection.rb, line 42 def count(*args) # By default, `Enumerable`'s `#count` uses `#each`, which means going through all # of the pages of results, one by one. Instead, we can use `#size` which we have # already overridden to work in a smarter, more efficient way. This only works for # the simple version of `#count` with no arguments. When called with an argument or # a block, you need to know what the items in the collection actually are, so we # call `super` and end up iterating through each item in the collection. return size unless block_given? || !args.empty? super end
Return array of the elements on the current page
# File lib/restforce/collection.rb, line 60 def current_page first(@raw_page['records'].size) end
Yield each value on each page.
# File lib/restforce/collection.rb, line 15 def each(&block) @raw_page['records'].each { |record| yield Restforce::Mash.build(record, @client) } np = next_page while np np.current_page.each(&block) np = np.next_page end end
Returns true if the size of the Collection
is zero.
# File lib/restforce/collection.rb, line 55 def empty? size.zero? end
Returns true if there is a pointer to the next page.
# File lib/restforce/collection.rb, line 70 def has_next_page? !@raw_page['nextRecordsUrl'].nil? end
Returns the next page as a Restforce::Collection
if it’s available, nil otherwise.
# File lib/restforce/collection.rb, line 75 def next_page @client.get(@raw_page['nextRecordsUrl']).body if has_next_page? end
Return the size of each page in the collection
# File lib/restforce/collection.rb, line 26 def page_size @raw_page['records'].size end
Return the current and all of the following pages.
# File lib/restforce/collection.rb, line 65 def pages [self] + (has_next_page? ? next_page.pages : []) end
Return the number of items in the Collection
without making any additional requests and going through all of the pages of results, one by one. Instead, we can rely on the total count of results which Salesforce returns.
Most of the Salesforce API returns this in the ‘totalSize` attribute. For some reason, the [List View Results](developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_listviewresults.htm) endpoint (and maybe others?!) uses the `size` attribute.
# File lib/restforce/collection.rb, line 37 def size @raw_page['totalSize'] || @raw_page['size'] end