module FrOData::Query::InBatches

Constants

DEFAULT_BATCH_SIZE

Public Instance Methods

in_batches(of: DEFAULT_BATCH_SIZE, &block) click to toggle source

Process results in batches.

When a block is given, yields `FrOData::Query::Result` objects of specified batch size to the block.

service['Products'].query.in_batches(of: 10) do |batch|
  batch.count # batch size (10 except for last batch)
  batch.is_a? FrOData::Query::Result # true
end

Returns an Enumerator to process results individually.

service['Products'].query.in_batches.each do |entity|
  entity.is_a? FrOData::Entity # true
end

@param of: [int] batch size @return [Enumerator]

# File lib/frodata/query/in_batches.rb, line 24
def in_batches(of: DEFAULT_BATCH_SIZE, &block)
  per_page = of

  if block_given?
    each_batch(of, &block)
  else
    Enumerator.new do |result|
      each_batch(of) do |batch|
        batch.each { |entity| result << entity }
      end
    end
  end
end

Private Instance Methods

each_batch(per_page) { |batch| ... } click to toggle source
# File lib/frodata/query/in_batches.rb, line 40
def each_batch(per_page, &block)
  page = 0

  loop do
    batch = get_paginated_entities(per_page, page)
    break if batch.empty?

    yield batch

    page += 1
  end
end
get_paginated_entities(per_page, page) click to toggle source
# File lib/frodata/query/in_batches.rb, line 53
def get_paginated_entities(per_page, page)
  skip(per_page * page).limit(per_page).execute
end