aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_job
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2014-05-19 12:06:09 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2014-05-19 12:06:09 +0200
commit211ce71400449c7e65cbef8ba9546418a20b3c8f (patch)
tree46715d030772f963621efa600e4a9cf2ee1faf93 /lib/active_job
parent65bf5f101e1105411afe030887fbe203d08dadbd (diff)
downloadrails-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.rb6
-rw-r--r--lib/active_job/enqueuing.rb9
-rw-r--r--lib/active_job/job_wrappers/delayed_job_wrapper.rb9
-rw-r--r--lib/active_job/job_wrappers/resque_wrapper.rb4
-rw-r--r--lib/active_job/job_wrappers/sidekiq_wrapper.rb4
-rw-r--r--lib/active_job/job_wrappers/sucker_punch_wrapper.rb2
-rw-r--r--lib/active_job/parameters.rb15
-rw-r--r--lib/active_job/queue_adapters/delayed_job_adapter.rb3
-rw-r--r--lib/active_job/queue_adapters/inline_adapter.rb2
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