Skip to content

Commit 42e5eb9

Browse files
authored
fix: switch aj adapter to pipe through enqueue_all (#111)
Adjusts the ActiveJob adapter to pipe all enqueues through enqueue_all. Result of convo here: #103 (comment) Note for release: This is a mildly breaking change. Previous to delayed 3.0.0, a `provider_job_id` was _always_ attached when enqueuing jobs. In delayed 3.0.0, `provider_job_id` will only be attached depending on your database configuration(specifically `ActiveRecord::Base.connection.supports_insert_returning?` must be true)
1 parent 5023edb commit 42e5eb9

2 files changed

Lines changed: 10 additions & 16 deletions

File tree

lib/delayed/active_job_adapter.rb

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,14 @@ def enqueue_all(jobs)
3131
private
3232

3333
def _enqueue(job)
34-
assert_job_safe_to_enqueue!(job)
35-
job_options = build_job_options(job)
36-
delayed_job = Delayed::Job.enqueue_job(job_options)
37-
perform_post_enqueue_assignments([job], [delayed_job])
38-
job
34+
job.tap { |j| enqueue_all([j]) }
3935
end
4036

4137
def assert_jobs_safe_to_enqueue!(jobs)
42-
jobs.each { |job| assert_job_safe_to_enqueue!(job) }
43-
end
44-
45-
def assert_job_safe_to_enqueue!(job)
46-
if enqueue_after_transaction_commit_enabled?(job)
47-
raise UnsafeEnqueueError, "The ':delayed' ActiveJob adapter is not compatible with enqueue_after_transaction_commit"
38+
jobs.each do |job|
39+
if enqueue_after_transaction_commit_enabled?(job)
40+
raise UnsafeEnqueueError, "The ':delayed' ActiveJob adapter is not compatible with enqueue_after_transaction_commit"
41+
end
4842
end
4943
end
5044

spec/delayed/active_job_adapter_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def serialize(*)
8989
end
9090

9191
it 'bubbles out an error if Delayed::Job.enqueue_job raises (single-job path)' do
92-
allow(Delayed::Job).to receive(:enqueue_job).and_raise('uh oh, enqueue failed!')
92+
allow(Delayed::Job).to receive(:enqueue_all).and_raise('uh oh, enqueue failed!')
9393

9494
expect { JobClass.perform_later }.to raise_error(RuntimeError, 'uh oh, enqueue failed!')
9595
end
@@ -590,14 +590,14 @@ def perform; end
590590
end
591591
end
592592

593-
describe 'single-job perform_later routes through Delayed::Job.enqueue_job' do
594-
it 'invokes Delayed::Job.enqueue_job (not Delayed::Job.enqueue or Delayed::Job.enqueue_all)' do
593+
describe 'single-job perform_later routes through Delayed::Job.enqueue_all' do
594+
it 'invokes Delayed::Job.enqueue_all (not Delayed::Job.enqueue or Delayed::Job.enqueue_job)' do
595595
expect(Delayed::Job).not_to receive(:enqueue) # rubocop:disable RSpec/MessageSpies
596-
expect(Delayed::Job).not_to receive(:enqueue_all) # rubocop:disable RSpec/MessageSpies
596+
expect(Delayed::Job).not_to receive(:enqueue_job) # rubocop:disable RSpec/MessageSpies
597597

598598
JobClass.perform_later
599599

600-
expect(Delayed::Job).to have_received(:enqueue_job).once
600+
expect(Delayed::Job).to have_received(:enqueue_all).once
601601
end
602602

603603
it 'delegates exactly one Delayed::Job' do

0 commit comments

Comments
 (0)