Sha256: 74927eb783fdb879c9a0310f9ae37eba2a885b31ca1cc8b2926f52ab1e7d0fae

Contents?: true

Size: 1000 Bytes

Versions: 13

Compression:

Stored size: 1000 Bytes

Contents

# encoding: utf-8
# frozen_string_literal: true

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

    def split_batches_values(**options)
      split_batches options do |b|
        b.each do |v|
          yield v
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
better_record-0.25.2 lib/better_record/batches.rb
better_record-0.25.1 lib/better_record/batches.rb
better_record-0.25.0 lib/better_record/batches.rb
better_record-0.24.4 lib/better_record/batches.rb
better_record-0.24.3 lib/better_record/batches.rb
better_record-0.23.7 lib/better_record/batches.rb
better_record-0.23.6 lib/better_record/batches.rb
better_record-0.23.5 lib/better_record/batches.rb
better_record-0.23.4 lib/better_record/batches.rb
better_record-0.23.3 lib/better_record/batches.rb
better_record-0.22.9 lib/better_record/batches.rb
better_record-0.22.8 lib/better_record/batches.rb
better_record-0.22.7 lib/better_record/batches.rb