Method: Que::Job.bulk_enqueue

Defined in:
lib/que/job.rb

.bulk_enqueue(job_options: {}, notify: false) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/que/job.rb', line 140

def bulk_enqueue(job_options: {}, notify: false)
  raise Que::Error, "Can't nest .bulk_enqueue" unless Thread.current[:que_jobs_to_bulk_insert].nil?
  Thread.current[:que_jobs_to_bulk_insert] = { jobs_attrs: [], job_options: job_options }
  yield
  jobs_attrs = Thread.current[:que_jobs_to_bulk_insert][:jobs_attrs]
  job_options = Thread.current[:que_jobs_to_bulk_insert][:job_options]
  return [] if jobs_attrs.empty?
  raise Que::Error, "When using .bulk_enqueue, all jobs enqueued must be of the same job class" unless jobs_attrs.map { |attrs| attrs[:job_class] }.uniq.one?
  args_and_kwargs_array = jobs_attrs.map { |attrs| attrs.slice(:args, :kwargs) }
  klass = job_options[:job_class] ? Que::Job : Que.constantize(jobs_attrs.first[:job_class])
  klass._bulk_enqueue_insert(args_and_kwargs_array, job_options: job_options, notify: notify)
ensure
  Thread.current[:que_jobs_to_bulk_insert] = nil
end