lib/job-iteration/enumerator_builder.rb in job-iteration-1.1.3 vs lib/job-iteration/enumerator_builder.rb in job-iteration-1.1.4
- old
+ new
@@ -1,8 +1,9 @@
# frozen_string_literal: true
require_relative "./active_record_enumerator"
require_relative "./csv_enumerator"
+require_relative "./throttle_enumerator"
require "forwardable"
module JobIteration
class EnumeratorBuilder
extend Forwardable
@@ -59,20 +60,10 @@
end
wrap(self, enumerable.each_with_index.drop(drop).to_enum { enumerable.size })
end
- # Builds Enumerator from a lock queue instance that belongs to a job.
- # The helper is only to be used from jobs that use LockQueue module.
- def build_lock_queue_enumerator(lock_queue, at_most_once:)
- unless lock_queue.is_a?(BackgroundQueue::LockQueue::RedisQueue) ||
- lock_queue.is_a?(BackgroundQueue::LockQueue::RolloutRedisQueue)
- raise ArgumentError, "an argument to #build_lock_queue_enumerator must be a LockQueue"
- end
- wrap(self, BackgroundQueue::LockQueueEnumerator.new(lock_queue, at_most_once: at_most_once).to_enum)
- end
-
# Builds Enumerator from Active Record Relation. Each Enumerator tick moves the cursor one row forward.
#
# +columns:+ argument is used to build the actual query for iteration. +columns+: defaults to primary key:
#
# 1) SELECT * FROM users ORDER BY id LIMIT 100
@@ -117,14 +108,24 @@
**args
).batches
wrap(self, enum)
end
+ def build_throttle_enumerator(enum, throttle_on:, backoff:)
+ JobIteration::ThrottleEnumerator.new(
+ enum,
+ @job,
+ throttle_on: throttle_on,
+ backoff: backoff
+ ).to_enum
+ end
+
alias_method :once, :build_once_enumerator
alias_method :times, :build_times_enumerator
alias_method :array, :build_array_enumerator
alias_method :active_record_on_records, :build_active_record_enumerator_on_records
alias_method :active_record_on_batches, :build_active_record_enumerator_on_batches
+ alias_method :throttle, :build_throttle_enumerator
private
def build_active_record_enumerator(scope, cursor:, **args)
unless scope.is_a?(ActiveRecord::Relation)