From e631da1b60b0da9f0843ad11fba564d84e17e745 Mon Sep 17 00:00:00 2001 From: David Begin Date: Mon, 23 May 2016 10:58:31 -0700 Subject: [PATCH 1/3] Dont call as_json on Delayed::Backend::Sequel::Job instead call #to_hash, and turn all the keys to strings, to keep the rest of the implementation untouched --- lib/rollbar/plugins/delayed_job/job_data.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/rollbar/plugins/delayed_job/job_data.rb b/lib/rollbar/plugins/delayed_job/job_data.rb index c853bd28..1209cc14 100644 --- a/lib/rollbar/plugins/delayed_job/job_data.rb +++ b/lib/rollbar/plugins/delayed_job/job_data.rb @@ -6,7 +6,12 @@ def initialize(job) end def to_hash - job_data = job.as_json + job_data = if job.respond_to?(:as_json) + job.as_json + else + Hash[job.to_hash.map { |k, v| [k.to_s, v] }] + end + handler_parent = job_data['job'] ? job_data['job'] : job_data handler_parent['handler'] = handler_data From d6717670a103d75f383793454a10d67e09f904e7 Mon Sep 17 00:00:00 2001 From: Jon de Andres Date: Wed, 31 Aug 2016 17:29:06 +0200 Subject: [PATCH 2/3] Fix specs for JobData - Add correct namespace to JobData class - Rename job_data.rb spec to job_data_spec.rb - Detect when the job.payload_object respond to :object or not Closes #473 --- lib/rollbar/plugins/delayed_job/job_data.rb | 64 +++++++++++-------- spec/delayed/backend/test.rb | 1 + .../{job_data.rb => job_data_spec.rb} | 2 +- 3 files changed, 41 insertions(+), 26 deletions(-) rename spec/rollbar/plugins/delayed_job/{job_data.rb => job_data_spec.rb} (93%) diff --git a/lib/rollbar/plugins/delayed_job/job_data.rb b/lib/rollbar/plugins/delayed_job/job_data.rb index 1209cc14..6e1eabd2 100644 --- a/lib/rollbar/plugins/delayed_job/job_data.rb +++ b/lib/rollbar/plugins/delayed_job/job_data.rb @@ -1,34 +1,48 @@ -class JobData - attr_reader :job +module Rollbar + module Delayed + class JobData + attr_reader :job - def initialize(job) - @job = job - end + def initialize(job) + @job = job + end - def to_hash - job_data = if job.respond_to?(:as_json) - job.as_json - else - Hash[job.to_hash.map { |k, v| [k.to_s, v] }] - end + def to_hash + job_data = extract_job_data - handler_parent = job_data['job'] ? job_data['job'] : job_data - handler_parent['handler'] = handler_data + handler_parent = job_data['job'] ? job_data['job'] : job_data + handler_parent['handler'] = handler_data - job_data - end + job_data + end + + private + + def extract_job_data + if job.respond_to?(:as_json) + job.as_json + else + Hash[job.to_hash.map { |k, v| [k.to_s, v] }] + end + end + + def handler_data + payload_object = job.payload_object - private + return payload_object unless payload_object.respond_to?(:object) - def handler_data - object = job.payload_object.object + object_data(payload_object.object) + end - { - :method_name => job.payload_object.method_name, - :args => job.payload_object.args, - :object => object.is_a?(Class) ? object.name : object.to_s - } - rescue - {} + def object_data(object) + { + :method_name => job.payload_object.method_name, + :args => job.payload_object.args, + :object => object.is_a?(Class) ? object.name : object.to_s + } + rescue + {} + end + end end end diff --git a/spec/delayed/backend/test.rb b/spec/delayed/backend/test.rb index d024ddb5..af359722 100644 --- a/spec/delayed/backend/test.rb +++ b/spec/delayed/backend/test.rb @@ -1,4 +1,5 @@ require 'ostruct' +require 'delayed_job' require 'delayed/backend/base' # This code is taken from delayed_job/spec/delayed/backend/test.rb. diff --git a/spec/rollbar/plugins/delayed_job/job_data.rb b/spec/rollbar/plugins/delayed_job/job_data_spec.rb similarity index 93% rename from spec/rollbar/plugins/delayed_job/job_data.rb rename to spec/rollbar/plugins/delayed_job/job_data_spec.rb index 58b31d1c..2df0e000 100644 --- a/spec/rollbar/plugins/delayed_job/job_data.rb +++ b/spec/rollbar/plugins/delayed_job/job_data_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -require 'rollbar/delayed_job' +require 'rollbar/plugins/delayed_job/job_data' require 'delayed/backend/test' describe Rollbar::Delayed::JobData do From 17ece2350acccac069c8efbabfba4c0bbc44fcad Mon Sep 17 00:00:00 2001 From: Jon de Andres Date: Thu, 1 Sep 2016 18:50:18 +0200 Subject: [PATCH 3/3] Fix tests for ruby 1.8.7 --- spec/rollbar/plugins/delayed_job/job_data_spec.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spec/rollbar/plugins/delayed_job/job_data_spec.rb b/spec/rollbar/plugins/delayed_job/job_data_spec.rb index 2df0e000..12eef356 100644 --- a/spec/rollbar/plugins/delayed_job/job_data_spec.rb +++ b/spec/rollbar/plugins/delayed_job/job_data_spec.rb @@ -1,8 +1,21 @@ require 'spec_helper' - require 'rollbar/plugins/delayed_job/job_data' require 'delayed/backend/test' +# In delayed_job/lib/delayed/syck_ext.rb YAML.load_dj +# is broken cause it's defined as an instance method +# instead of module/class method. This is breaking +# the tests for ruby 1.8.7 +if YAML.parser.class.name =~ /syck|yecht/i + module YAML + def self.load_dj(yaml) + # See https://github.com/dtao/safe_yaml + # When the method is there, we need to load our YAML like this... + respond_to?(:unsafe_load) ? load(yaml, :safe => false) : load(yaml) + end + end +end + describe Rollbar::Delayed::JobData do describe '#to_hash' do let(:handler) { { 'foo' => 'bar' } }