module AWS::Core::Collection::Limitable

AWS::Core::Collection::Limitable is used by collections that may truncate responses but that also accept a upper limit of results to return in a single request.

See {AWS::Core::Collection} for documentation on the available methods.

Public Instance Methods

each_batch(options = {}) { |batch| ... } click to toggle source
# File lib/aws/core/collection/limitable.rb, line 30
def each_batch options = {}, &block

  each_opts  = options.dup

  ## limit and batch size should accept string values like '10'

  limit = each_opts.delete(:limit) || _limit
  limit = limit.to_i if limit

  batch_size = each_opts.delete(:batch_size)
  batch_size = batch_size.to_i if batch_size

  next_token = each_opts.delete(:next_token)

  total = 0  # count of items yeilded across all batches

  begin

    max = nil
    if limit or batch_size
      max = []
      max << (limit - total) if limit
      max << batch_size if batch_size
      max = max.min
    end

    batch = []
    next_token = _each_item(next_token, max, each_opts.dup) do |item|

      total += 1
      batch << item

    end

    yield(batch)

  end until next_token.nil? or (limit and limit == total)

  next_token

end

Protected Instance Methods

_each_item(next_token, limit, options = {}) click to toggle source
# File lib/aws/core/collection/limitable.rb, line 73
def _each_item next_token, limit, options = {}, &block
  raise NotImplementedError
end
_limit() click to toggle source

This method should be overriden in collection classes when there is another method to provide a “limit” besides as an option to the enumerable methods.

SimpleDB::ItemCollection (for example) allows setting the limit in a method chain, e.g.

collection.limit(10).each {|item| ... }

These collection classes can simply override #_limit and return their prefered limit. This is only called in the abscense of the :limit option.

@private

# File lib/aws/core/collection/limitable.rb, line 92
def _limit
  nil
end