diff --git a/Gemfile b/Gemfile index aad6cc54416cee7e64d15cec3109463298d2f154..c0c7f2da83d18050b758b07d3c1ca73c8ff2aeea 100644 --- a/Gemfile +++ b/Gemfile @@ -3,4 +3,4 @@ source 'https://rubygems.org' gemspec gem 'resque' - +gem 'sidekiq' diff --git a/Rakefile b/Rakefile index 2c94fbcacea7d2fdb1164f40ae1137f70d75dfce..82522f4a89f82b2e203df8cfac48e234aa1c49ef 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) run_without_aborting(*tasks) end -%w( inline resque ).each do |adapter| +%w( inline resque sidekiq ).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 341ea6158bdbc96f2c946e5bb829410ad378590b..d1fff27a3ac5e441cbd70ed78443f221f8a4ee47 100644 --- a/lib/active_job/base.rb +++ b/lib/active_job/base.rb @@ -1,5 +1,6 @@ require 'active_job/queue_adapters/inline_adapter' require 'active_job/queue_adapters/resque_adapter' +require 'active_job/queue_adapters/sidekiq_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 0000000000000000000000000000000000000000..fb728ae0fd7b8d6e0cbcfb718d3d2047a5624fa1 --- /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/queue_adapters/sidekiq_adapter.rb b/lib/active_job/queue_adapters/sidekiq_adapter.rb new file mode 100644 index 0000000000000000000000000000000000000000..70c4377a23692e0997c1e958eaf429a1bc1b5021 --- /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/test/adapters/sidekiq.rb b/test/adapters/sidekiq.rb new file mode 100644 index 0000000000000000000000000000000000000000..74ce808d55e37327062094c1dd68adef24c54c49 --- /dev/null +++ b/test/adapters/sidekiq.rb @@ -0,0 +1,2 @@ +require 'sidekiq/testing/inline' +ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::SidekiqAdapter