aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile3
-rw-r--r--Gemfile.lock6
-rw-r--r--Rakefile4
-rw-r--r--lib/active_job/queue_adapters/backburner_adapter.rb21
-rw-r--r--test/adapters/backburner.rb3
-rw-r--r--test/cases/adapter_test.rb5
-rw-r--r--test/support/backburner/inline.rb8
7 files changed, 47 insertions, 3 deletions
diff --git a/Gemfile b/Gemfile
index a9803f9284..582214dd65 100644
--- a/Gemfile
+++ b/Gemfile
@@ -9,4 +9,5 @@ gem 'sucker_punch'
gem 'delayed_job'
gem 'queue_classic'
gem 'sneakers', '0.1.1.pre'
-gem 'que' \ No newline at end of file
+gem 'que'
+gem 'backburner'
diff --git a/Gemfile.lock b/Gemfile.lock
index ff4e994b44..74758c73fe 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -21,12 +21,17 @@ GEM
thread_safe (~> 0.1)
tzinfo (~> 1.1)
amq-protocol (1.9.2)
+ backburner (0.4.5)
+ beaneater (~> 0.3.1)
+ dante (~> 0.1.5)
+ beaneater (0.3.2)
builder (3.2.2)
bunny (1.1.9)
amq-protocol (>= 1.9.2)
celluloid (0.15.2)
timers (~> 1.1.0)
connection_pool (2.0.0)
+ dante (0.1.5)
delayed_job (4.0.1)
activesupport (>= 3.0, < 4.2)
i18n (0.6.9)
@@ -86,6 +91,7 @@ PLATFORMS
DEPENDENCIES
activejob!
+ backburner
delayed_job
que
queue_classic
diff --git a/Rakefile b/Rakefile
index 933c049a68..8ab372e08c 100644
--- a/Rakefile
+++ b/Rakefile
@@ -20,11 +20,11 @@ task :default => :test
desc 'Run all adapter tests'
task :test do
- tasks = %w(test_inline test_delayed_job test_que test_queue_classic test_resque test_sidekiq test_sneakers test_sucker_punch)
+ tasks = %w(test_inline test_delayed_job test_que test_queue_classic test_resque test_sidekiq test_sneakers test_sucker_punch test_backburner)
run_without_aborting(*tasks)
end
-%w(inline delayed_job que queue_classic resque sidekiq sneakers sucker_punch).each do |adapter|
+%w(inline delayed_job que queue_classic resque sidekiq sneakers sucker_punch backburner).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/queue_adapters/backburner_adapter.rb b/lib/active_job/queue_adapters/backburner_adapter.rb
new file mode 100644
index 0000000000..0ac745c7f2
--- /dev/null
+++ b/lib/active_job/queue_adapters/backburner_adapter.rb
@@ -0,0 +1,21 @@
+require 'backburner'
+
+module ActiveJob
+ module QueueAdapters
+ class BackburnerAdapter
+ class << self
+ def queue(job, *args)
+ Backburner::Worker.enqueue JobWrapper, [ job.name, *args ], queue: job.queue_name
+ end
+ end
+
+ class JobWrapper
+ class << self
+ def perform(job_name, *args)
+ job_name.constantize.new.perform *Parameters.deserialize(args)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/test/adapters/backburner.rb b/test/adapters/backburner.rb
new file mode 100644
index 0000000000..65d05f850b
--- /dev/null
+++ b/test/adapters/backburner.rb
@@ -0,0 +1,3 @@
+require 'support/backburner/inline'
+
+ActiveJob::Base.queue_adapter = :backburner \ No newline at end of file
diff --git a/test/cases/adapter_test.rb b/test/cases/adapter_test.rb
index 1a08fa2617..703058dacb 100644
--- a/test/cases/adapter_test.rb
+++ b/test/cases/adapter_test.rb
@@ -43,4 +43,9 @@ class AdapterTest < ActiveSupport::TestCase
ActiveJob::Base.queue_adapter = :sneakers
assert_equal ActiveJob::QueueAdapters::SneakersAdapter, ActiveJob::Base.queue_adapter
end
+
+ test 'should load Backburner adapter' do
+ ActiveJob::Base.queue_adapter = :backburner
+ assert_equal ActiveJob::QueueAdapters::BackburnerAdapter, ActiveJob::Base.queue_adapter
+ end
end
diff --git a/test/support/backburner/inline.rb b/test/support/backburner/inline.rb
new file mode 100644
index 0000000000..f761b53e27
--- /dev/null
+++ b/test/support/backburner/inline.rb
@@ -0,0 +1,8 @@
+require 'backburner'
+
+Backburner::Worker.class_eval do
+ class << self; alias_method :original_enqueue, :enqueue; end
+ def self.enqueue(job_class, args=[], opts={})
+ job_class.perform(*args)
+ end
+end \ No newline at end of file