def each_batch options = {}, &block
each_opts = options.dup
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
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