aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@basecamp.com>2014-05-18 21:23:43 +0200
committerDavid Heinemeier Hansson <david@basecamp.com>2014-05-18 21:23:43 +0200
commit12705fa56894ca47de375d90e1003eb187eb7087 (patch)
tree09a5d0ef639239f8cdf5f31785645668188cb360
parentce124a19e57967cfd3a8d739346277f6c016c78f (diff)
parent68543de83612049e3254f7243b575039f102cd49 (diff)
downloadrails-12705fa56894ca47de375d90e1003eb187eb7087.tar.gz
rails-12705fa56894ca47de375d90e1003eb187eb7087.tar.bz2
rails-12705fa56894ca47de375d90e1003eb187eb7087.zip
Merge pull request #5 from seuros/master
Add Sidekiq adapter/wrapper fixes #3
-rw-r--r--Gemfile3
-rw-r--r--Rakefile4
-rw-r--r--lib/active_job/base.rb2
-rw-r--r--lib/active_job/job_wrappers/sidekiq_wrapper.rb11
-rw-r--r--lib/active_job/job_wrappers/sucker_punch_wrapper.rb11
-rw-r--r--lib/active_job/queue_adapters/sidekiq_adapter.rb14
-rw-r--r--lib/active_job/queue_adapters/sucker_punch_adapter.rb14
-rw-r--r--lib/active_job/version.rb2
-rw-r--r--test/adapters/sidekiq.rb2
-rw-r--r--test/adapters/sucker_punch.rb2
10 files changed, 61 insertions, 4 deletions
diff --git a/Gemfile b/Gemfile
index aad6cc5441..e9b5ee9c8b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,4 +3,5 @@ source 'https://rubygems.org'
gemspec
gem 'resque'
-
+gem 'sidekiq'
+gem 'sucker_punch' \ No newline at end of file
diff --git a/Rakefile b/Rakefile
index 2c94fbcace..7f38657160 100644
--- a/Rakefile
+++ b/Rakefile
@@ -22,12 +22,12 @@ task :default => :test
desc 'Run all adapter tests'
task :test do
- tasks = %w(test_inline test_resque)
+ tasks = %w(test_inline test_resque test_sidekiq test_sucker_punch)
run_without_aborting(*tasks)
end
-%w( inline resque ).each do |adapter|
+%w( inline resque sidekiq sucker_punch).each do |adapter|
Rake::TestTask.new("test_#{adapter}") do |t|
t.libs << 'test'
t.test_files = FileList['test/cases/**/*_test.rb']
diff --git a/lib/active_job/base.rb b/lib/active_job/base.rb
index 341ea6158b..6cce770466 100644
--- a/lib/active_job/base.rb
+++ b/lib/active_job/base.rb
@@ -1,5 +1,7 @@
require 'active_job/queue_adapters/inline_adapter'
require 'active_job/queue_adapters/resque_adapter'
+require 'active_job/queue_adapters/sidekiq_adapter'
+require 'active_job/queue_adapters/sucker_punch_adapter'
module ActiveJob
class Base
diff --git a/lib/active_job/job_wrappers/sidekiq_wrapper.rb b/lib/active_job/job_wrappers/sidekiq_wrapper.rb
new file mode 100644
index 0000000000..fb728ae0fd
--- /dev/null
+++ b/lib/active_job/job_wrappers/sidekiq_wrapper.rb
@@ -0,0 +1,11 @@
+module ActiveJob
+ module JobWrappers
+ class SidekiqWrapper
+ include Sidekiq::Worker
+
+ def perform(job_name, *args)
+ job_name.constantize.perform(*args)
+ end
+ 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
new file mode 100644
index 0000000000..80648792ca
--- /dev/null
+++ b/lib/active_job/job_wrappers/sucker_punch_wrapper.rb
@@ -0,0 +1,11 @@
+module ActiveJob
+ module JobWrappers
+ class SuckerPunchWrapper
+ include SuckerPunch::Job
+
+ def perform(job_name, *args)
+ job_name.perform(*args)
+ end
+ end
+ end
+end
diff --git a/lib/active_job/queue_adapters/sidekiq_adapter.rb b/lib/active_job/queue_adapters/sidekiq_adapter.rb
new file mode 100644
index 0000000000..70c4377a23
--- /dev/null
+++ b/lib/active_job/queue_adapters/sidekiq_adapter.rb
@@ -0,0 +1,14 @@
+require 'sidekiq'
+require 'active_job/job_wrappers/sidekiq_wrapper'
+
+module ActiveJob
+ module QueueAdapters
+ class SidekiqAdapter
+ class << self
+ def queue(job, *args)
+ JobWrappers::SidekiqWrapper.perform_async(job, *args)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/active_job/queue_adapters/sucker_punch_adapter.rb b/lib/active_job/queue_adapters/sucker_punch_adapter.rb
new file mode 100644
index 0000000000..8191e5a1df
--- /dev/null
+++ b/lib/active_job/queue_adapters/sucker_punch_adapter.rb
@@ -0,0 +1,14 @@
+require 'sucker_punch'
+require 'active_job/job_wrappers/sucker_punch_wrapper'
+
+module ActiveJob
+ module QueueAdapters
+ class SuckerPunchAdapter
+ class << self
+ def queue(job, *args)
+ JobWrappers::SuckerPunchWrapper.new.async.perform(job, *args)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/active_job/version.rb b/lib/active_job/version.rb
index 0add9779d9..7e646fa3c4 100644
--- a/lib/active_job/version.rb
+++ b/lib/active_job/version.rb
@@ -1,7 +1,7 @@
require_relative 'gem_version'
module ActiveJob
- # Returns the version of the currently loaded ActiveRecord as a <tt>Gem::Version</tt>
+ # Returns the version of the currently loaded ActiveJob as a <tt>Gem::Version</tt>
def self.version
gem_version
end
diff --git a/test/adapters/sidekiq.rb b/test/adapters/sidekiq.rb
new file mode 100644
index 0000000000..74ce808d55
--- /dev/null
+++ b/test/adapters/sidekiq.rb
@@ -0,0 +1,2 @@
+require 'sidekiq/testing/inline'
+ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::SidekiqAdapter
diff --git a/test/adapters/sucker_punch.rb b/test/adapters/sucker_punch.rb
new file mode 100644
index 0000000000..a373552262
--- /dev/null
+++ b/test/adapters/sucker_punch.rb
@@ -0,0 +1,2 @@
+require 'sucker_punch/testing/inline'
+ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::SuckerPunchAdapter