Sha256: 31abbccb93c398e1b432e1376f858d09b12a2f0009c259966b4d2eb4001e7325
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true module Sidekiq module Job module Iterable # @api private class ActiveRecordEnumerator def initialize(relation, cursor: nil, **options) @relation = relation @cursor = cursor @options = options end def records Enumerator.new(-> { @relation.count }) do |yielder| @relation.find_each(**@options, start: @cursor) do |record| yielder.yield(record, record.id) end end end def batches Enumerator.new(-> { @relation.count }) do |yielder| @relation.find_in_batches(**@options, start: @cursor) do |batch| yielder.yield(batch, batch.last.id) end end end def relations Enumerator.new(-> { relations_size }) do |yielder| # Convenience to use :batch_size for all the # ActiveRecord batching methods. options = @options.dup options[:of] ||= options.delete(:batch_size) @relation.in_batches(**options, start: @cursor) do |relation| last_record = relation.last yielder.yield(relation, last_record.id) end end end private def relations_size batch_size = @options[:batch_size] || 1000 (@relation.count + batch_size - 1) / batch_size # ceiling division end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sidekiq-7.3.1 | lib/sidekiq/job/iterable/active_record_enumerator.rb |
sidekiq-7.3.0 | lib/sidekiq/job/iterable/active_record_enumerator.rb |