class Restforce::Collection

Public Class Methods

new(hash, client) click to toggle source

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

count(*args) click to toggle source
Calls superclass method
# 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
current_page() click to toggle source

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
each() { |build| ... } click to toggle source

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
empty?() click to toggle source

Returns true if the size of the Collection is zero.

# File lib/restforce/collection.rb, line 55
def empty?
  size.zero?
end
has_next_page?() click to toggle source

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
length()
Alias for: size
next_page() click to toggle source

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
page_size() click to toggle source

Return the size of each page in the collection

# File lib/restforce/collection.rb, line 26
def page_size
  @raw_page['records'].size
end
pages() click to toggle source

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
size() click to toggle source

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
Also aliased as: length