aboutsummaryrefslogtreecommitdiffstats
path: root/activejob/lib
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2014-12-30 15:39:29 -0800
committerDavid Heinemeier Hansson <david@loudthinking.com>2014-12-30 15:39:29 -0800
commita4d5e835608d951cf6c306ccc9aed06896e07c15 (patch)
treed9ba11de39c0a8024317c289b3959a7e8a577608 /activejob/lib
parent4080dd2f244e7c4d140f8724c2075102ea9db36e (diff)
parent65542e27979fce1f6b0893a00e4d51849616de34 (diff)
downloadrails-a4d5e835608d951cf6c306ccc9aed06896e07c15.tar.gz
rails-a4d5e835608d951cf6c306ccc9aed06896e07c15.tar.bz2
rails-a4d5e835608d951cf6c306ccc9aed06896e07c15.zip
Merge pull request #18260 from isaacseymour/active-job-delegate-deserialize
ActiveJob: delegate deserialization to the job class
Diffstat (limited to 'activejob/lib')
-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?