diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2014-05-19 12:06:09 +0200 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2014-05-19 12:06:09 +0200 |
commit | 211ce71400449c7e65cbef8ba9546418a20b3c8f (patch) | |
tree | 46715d030772f963621efa600e4a9cf2ee1faf93 /lib/active_job | |
parent | 65bf5f101e1105411afe030887fbe203d08dadbd (diff) | |
download | rails-211ce71400449c7e65cbef8ba9546418a20b3c8f.tar.gz rails-211ce71400449c7e65cbef8ba9546418a20b3c8f.tar.bz2 rails-211ce71400449c7e65cbef8ba9546418a20b3c8f.zip |
Add GlobalID support for serialization
Diffstat (limited to 'lib/active_job')
-rw-r--r-- | lib/active_job/base.rb | 6 | ||||
-rw-r--r-- | lib/active_job/enqueuing.rb | 9 | ||||
-rw-r--r-- | lib/active_job/job_wrappers/delayed_job_wrapper.rb | 9 | ||||
-rw-r--r-- | lib/active_job/job_wrappers/resque_wrapper.rb | 4 | ||||
-rw-r--r-- | lib/active_job/job_wrappers/sidekiq_wrapper.rb | 4 | ||||
-rw-r--r-- | lib/active_job/job_wrappers/sucker_punch_wrapper.rb | 2 | ||||
-rw-r--r-- | lib/active_job/parameters.rb | 15 | ||||
-rw-r--r-- | lib/active_job/queue_adapters/delayed_job_adapter.rb | 3 | ||||
-rw-r--r-- | lib/active_job/queue_adapters/inline_adapter.rb | 2 |
9 files changed, 43 insertions, 11 deletions
diff --git a/lib/active_job/base.rb b/lib/active_job/base.rb index fe3d1677dd..77b929d4af 100644 --- a/lib/active_job/base.rb +++ b/lib/active_job/base.rb @@ -1,13 +1,11 @@ require 'active_job/queue_adapter' require 'active_job/queue_name' +require 'active_job/enqueuing' module ActiveJob class Base extend QueueAdapter extend QueueName - - def self.enqueue(*args) - queue_adapter.queue self, *args - end + extend Enqueuing end end
\ No newline at end of file diff --git a/lib/active_job/enqueuing.rb b/lib/active_job/enqueuing.rb new file mode 100644 index 0000000000..94a9dbf8ab --- /dev/null +++ b/lib/active_job/enqueuing.rb @@ -0,0 +1,9 @@ +require 'active_job/parameters' + +module ActiveJob + module Enqueuing + def enqueue(*args) + queue_adapter.queue self, *Parameters.serialize(args) + end + end +end
\ No newline at end of file diff --git a/lib/active_job/job_wrappers/delayed_job_wrapper.rb b/lib/active_job/job_wrappers/delayed_job_wrapper.rb new file mode 100644 index 0000000000..0868d7b570 --- /dev/null +++ b/lib/active_job/job_wrappers/delayed_job_wrapper.rb @@ -0,0 +1,9 @@ +module ActiveJob + module JobWrappers + class DelayedJobWrapper + def perform(job, *args) + job.perform(*ActiveJob::Parameters.deserialize(args)) + end + end + end +end diff --git a/lib/active_job/job_wrappers/resque_wrapper.rb b/lib/active_job/job_wrappers/resque_wrapper.rb index cbeee4fb1b..68d9b252ba 100644 --- a/lib/active_job/job_wrappers/resque_wrapper.rb +++ b/lib/active_job/job_wrappers/resque_wrapper.rb @@ -3,8 +3,6 @@ require 'resque' require 'active_support/core_ext/enumerable' require 'active_support/core_ext/array/access' - - module ActiveJob module JobWrappers class ResqueWrapper @@ -14,7 +12,7 @@ module ActiveJob end def perform(job_name, *args) - job_name.constantize.perform(*args) + job_name.constantize.perform(*ActiveJob::Parameters.deserialize(args)) end end diff --git a/lib/active_job/job_wrappers/sidekiq_wrapper.rb b/lib/active_job/job_wrappers/sidekiq_wrapper.rb index fb728ae0fd..e1332b0210 100644 --- a/lib/active_job/job_wrappers/sidekiq_wrapper.rb +++ b/lib/active_job/job_wrappers/sidekiq_wrapper.rb @@ -1,10 +1,12 @@ +require 'active_job/parameters' + module ActiveJob module JobWrappers class SidekiqWrapper include Sidekiq::Worker def perform(job_name, *args) - job_name.constantize.perform(*args) + job_name.constantize.perform(*ActiveJob::Parameters.deserialize(args)) end end end diff --git a/lib/active_job/job_wrappers/sucker_punch_wrapper.rb b/lib/active_job/job_wrappers/sucker_punch_wrapper.rb index 80648792ca..7e9960b44f 100644 --- a/lib/active_job/job_wrappers/sucker_punch_wrapper.rb +++ b/lib/active_job/job_wrappers/sucker_punch_wrapper.rb @@ -4,7 +4,7 @@ module ActiveJob include SuckerPunch::Job def perform(job_name, *args) - job_name.perform(*args) + job_name.perform(*ActiveJob::Parameters.deserialize(args)) end end end diff --git a/lib/active_job/parameters.rb b/lib/active_job/parameters.rb new file mode 100644 index 0000000000..a4841abd1e --- /dev/null +++ b/lib/active_job/parameters.rb @@ -0,0 +1,15 @@ +require 'active_model/global_locator' +require 'active_support/core_ext/object/try' + +module ActiveJob + class Parameters + def self.serialize(params) + params.collect { |param| param.try(:global_id) || param } + end + + def self.deserialize(params) + params.collect { |param| ActiveModel::GlobalLocator.locate(param) || param } + end + end +end +
\ No newline at end of file diff --git a/lib/active_job/queue_adapters/delayed_job_adapter.rb b/lib/active_job/queue_adapters/delayed_job_adapter.rb index 33229dece4..4730d97a9a 100644 --- a/lib/active_job/queue_adapters/delayed_job_adapter.rb +++ b/lib/active_job/queue_adapters/delayed_job_adapter.rb @@ -1,11 +1,12 @@ require 'delayed_job' +require 'active_job/job_wrappers/delayed_job_wrapper' module ActiveJob module QueueAdapters class DelayedJobAdapter class << self def queue(job, *args) - job.delay(queue: job.queue_name).perform(*args) + JobWrappers::DelayedJobWrapper.new.delay(queue: job.queue_name).perform(job, *args) end end end diff --git a/lib/active_job/queue_adapters/inline_adapter.rb b/lib/active_job/queue_adapters/inline_adapter.rb index ac28670a29..0a1526dce7 100644 --- a/lib/active_job/queue_adapters/inline_adapter.rb +++ b/lib/active_job/queue_adapters/inline_adapter.rb @@ -3,7 +3,7 @@ module ActiveJob class InlineAdapter class << self def queue(job, *args) - job.perform(*args) + job.perform(*ActiveJob::Parameters.deserialize(args)) end end end |