aboutsummaryrefslogtreecommitdiffstats
path: root/activejob/lib/active_job/core.rb
diff options
context:
space:
mode:
authorIsaac Seymour <isaac@gocardless.com>2014-12-30 18:26:39 +0000
committerIsaac Seymour <isaac@gocardless.com>2014-12-30 23:33:09 +0000
commit65542e27979fce1f6b0893a00e4d51849616de34 (patch)
treecd88216d18bf997156c290a56790b23540ff60c1 /activejob/lib/active_job/core.rb
parent2326e0ee9f47cd7e5beea4c5fabb674bbf30fd3d (diff)
downloadrails-65542e27979fce1f6b0893a00e4d51849616de34.tar.gz
rails-65542e27979fce1f6b0893a00e4d51849616de34.tar.bz2
rails-65542e27979fce1f6b0893a00e4d51849616de34.zip
ActiveJob: delegate full deserialization to class
Diffstat (limited to 'activejob/lib/active_job/core.rb')
-rw-r--r--activejob/lib/active_job/core.rb32
1 files changed, 28 insertions, 4 deletions
diff --git a/activejob/lib/active_job/core.rb b/activejob/lib/active_job/core.rb
index a0e55a0028..450c56bfdc 100644
--- a/activejob/lib/active_job/core.rb
+++ b/activejob/lib/active_job/core.rb
@@ -22,10 +22,8 @@ module ActiveJob
module ClassMethods
# Creates a new job instance from a hash created with +serialize+
def deserialize(job_data)
- job = job_data['job_class'].constantize.new
- job.job_id = job_data['job_id']
- job.queue_name = job_data['queue_name']
- job.serialized_arguments = job_data['arguments']
+ job = job_data['job_class'].constantize.new
+ job.deserialize(job_data)
job
end
@@ -69,6 +67,32 @@ module ActiveJob
}
end
+ # Attaches the stored job data to the current instance. Receives a hash
+ # returned from +serialize+
+ #
+ # ==== Examples
+ #
+ # class DeliverWebhookJob < ActiveJob::Base
+ # def serialize
+ # super.merge('attempt_number' => (@attempt_number || 0) + 1)
+ # end
+ #
+ # def deserialize(job_data)
+ # super(job_data)
+ # @attempt_number = job_data['attempt_number']
+ # end
+ #
+ # rescue_from(TimeoutError) do |ex|
+ # raise ex if @attempt_number > 5
+ # retry_job(wait: 10)
+ # end
+ # end
+ def deserialize(job_data)
+ self.job_id = job_data['job_id']
+ self.queue_name = job_data['queue_name']
+ self.serialized_arguments = job_data['arguments']
+ end
+
private
def deserialize_arguments_if_needed
if defined?(@serialized_arguments) && @serialized_arguments.present?