Sha256: ed16bb8dac26f56e745be6b8ee5a07382f74412c126f3ae63c2d71ad749ba93f

Contents?: true

Size: 805 Bytes

Versions: 18

Compression:

Stored size: 805 Bytes

Contents

module BetterRecord
  module Batches
    def split_batches(options = {}, &block)
      options.assert_valid_keys(:start, :batch_size, :preserve_order)
      if block_given? && arel.orders.present? && options[:preserve_order]
        relation = self
        offset = options[:start] || 0
        batch_size = options[:batch_size] || 1000

        total = relation.count(:*)
        records = relation.limit(batch_size).offset(offset).to_a
        while records.any?
          records_size = records.size

          block.call records

          break if records_size < batch_size
          offset += batch_size
          records = relation.limit(batch_size).offset(offset).to_a
        end
        nil
      else
        find_in_batches(options.except(:preserve_order), &block)
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
better_record-0.8.0 lib/better_record/batches.rb
better_record-0.7.5 lib/better_record/batches.rb
better_record-0.7.4 lib/better_record/batches.rb
better_record-0.7.3 lib/better_record/batches.rb
better_record-0.7.2 lib/better_record/batches.rb
better_record-0.7.1 lib/better_record/batches.rb
better_record-0.7.0 lib/better_record/batches.rb
better_record-0.6.1 lib/better_record/batches.rb
better_record-0.6.0 lib/better_record/batches.rb
better_record-0.5.5 lib/better_record/batches.rb
better_record-0.5.4 lib/better_record/batches.rb
better_record-0.5.1 lib/better_record/batches.rb
better_record-0.5.0 lib/better_record/batches.rb
better_record-0.4.0 lib/better_record/batches.rb
better_record-0.3.0 lib/better_record/batches.rb
better_record-0.2.0 lib/better_record/batches.rb
better_record-0.1.1 lib/better_record/batches.rb
better_record-0.1.0 lib/better_record/batches.rb