diff --git a/CHANGELOG.md b/CHANGELOG.md index 848e033..23490e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* Fix DelayedJob callback * Limit exception message to 1 millions chars * Fix issue #28 when for Rodauth authentication diff --git a/lib/rorvswild/plugin/delayed_job.rb b/lib/rorvswild/plugin/delayed_job.rb index dac32e0..0b69eed 100644 --- a/lib/rorvswild/plugin/delayed_job.rb +++ b/lib/rorvswild/plugin/delayed_job.rb @@ -3,14 +3,16 @@ module Plugin module DelayedJob def self.setup return if @installed - return unless defined?(Delayed::Worker) - Delayed::Worker.lifecycle.around(:invoke_job, &method(:around_perform)) + return unless defined?(Delayed::Plugin) + Delayed::Worker.plugins << Class.new(Delayed::Plugin) do + callbacks do |lifecycle| + lifecycle.around(:invoke_job) do |job, *args, &block| + RorVsWild.agent.measure_job(job.name, parameters: job.payload_object) { block.call(job) } + end + end + end @installed = true end - - def self.around_perform(job, &block) - RorVsWild.agent.measure_job(job.name, parameters: job.payload_object) { block.call(job) } - end end end end diff --git a/test/plugin/delayed_job_test.rb b/test/plugin/delayed_job_test.rb index 501c815..3d2edc6 100644 --- a/test/plugin/delayed_job_test.rb +++ b/test/plugin/delayed_job_test.rb @@ -15,27 +15,24 @@ def perform end end - Delayed::Worker.delay_jobs = false - class SampleBackend include Delayed::Backend::Base - attr_accessor :handler - - def initialize(options) - @payload_object = options[:payload_object] - end end def test_callback agent.expects(:queue_job) - SampleBackend.enqueue(SampleJob.new(true)) + backend = SampleBackend.new + backend.payload_object = SampleJob.new(true) + backend.invoke_job assert_equal("RorVsWild::Plugin::DelayedJobTest::SampleJob", agent.current_data[:name]) end def test_callback_on_exception agent.expects(:queue_job) - SampleBackend.enqueue(job = SampleJob.new(false)) + backend = SampleBackend.new + backend.payload_object = job = SampleJob.new(false) + backend.invoke_job rescue ensure assert_equal(job, agent.current_data[:error][:parameters])