aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock12
-rw-r--r--README.md18
-rw-r--r--Rakefile4
-rw-r--r--lib/active_job/queue_adapters/que_adapter.rb19
-rw-r--r--test/adapters/que.rb2
-rw-r--r--test/cases/adapter_test.rb26
7 files changed, 59 insertions, 23 deletions
diff --git a/Gemfile b/Gemfile
index e40962dc92..a9803f9284 100644
--- a/Gemfile
+++ b/Gemfile
@@ -9,3 +9,4 @@ gem 'sucker_punch'
gem 'delayed_job'
gem 'queue_classic'
gem 'sneakers', '0.1.1.pre'
+gem 'que' \ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index 5f5745b53b..ff4e994b44 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -33,21 +33,22 @@ GEM
json (1.8.1)
minitest (5.3.4)
mono_logger (1.1.0)
- multi_json (1.9.3)
+ multi_json (1.10.1)
pg (0.17.1)
+ que (0.7.3)
queue_classic (2.2.3)
pg (~> 0.17.0)
rack (1.5.2)
- rack-protection (1.5.2)
+ rack-protection (1.5.3)
rack
rake (10.3.2)
redis (3.0.7)
redis-namespace (1.4.1)
redis (~> 3.0.4)
- resque (1.24.1)
+ resque (1.25.2)
mono_logger (~> 1.0)
multi_json (~> 1.0)
- redis-namespace (~> 1.2)
+ redis-namespace (~> 1.3)
sinatra (>= 0.9.2)
vegas (~> 0.1.2)
serverengine (1.5.7)
@@ -59,7 +60,7 @@ GEM
redis (>= 3.0.6)
redis-namespace (>= 1.3.1)
sigdump (0.2.2)
- sinatra (1.4.4)
+ sinatra (1.4.5)
rack (~> 1.4)
rack-protection (~> 1.4)
tilt (~> 1.3, >= 1.3.4)
@@ -86,6 +87,7 @@ PLATFORMS
DEPENDENCIES
activejob!
delayed_job
+ que
queue_classic
rake
resque
diff --git a/README.md b/README.md
index ca6e2c1e4b..e8e12e859c 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ of the request-response cycle, so the user doesn't have to wait on it.
The main point is to ensure that all Rails apps will have a job infrastructure
in place, even if it's in the form of an "immediate runner". We can then have
framework features and other gems build on top of that, without having to worry
-about API differences between Delayed Job and Resque. Picking your queuing
+about API differences between Delayed Job and Resque. Picking your queuing
backend becomes more of an operational concern, then. And you'll be able to
switch between them without having to rewrite your jobs.
@@ -24,7 +24,8 @@ Set the queue adapter for Active Job:
``` ruby
ActiveJob::Base.queue_adapter = :inline # default queue adapter
-# Adapters currently supported: :resque, :sidekiq, :sucker_punch, :delayed_job, :queue_classic, :sneakers
+# Adapters currently supported: :delayed_job, :que, :queue_classic, :resque,
+# :sidekiq, :sneakers, :sucker_punch
```
Declare a job like so:
@@ -79,12 +80,13 @@ by default has been mixed into Active Record classes.
We currently have adapters for:
-* Resque 1.x
-* Sidekiq
-* Sucker Punch
-* Delayed Job
-* QueueClassic
-* Sneakers
+* [Delayed Job](https://github.com/collectiveidea/delayed_job)
+* [Que](https://github.com/chanks/que)
+* [QueueClassic](https://github.com/ryandotsmith/queue_classic)
+* [Resque 1.x](https://github.com/resque/resque)
+* [Sidekiq](https://github.com/mperham/sidekiq)
+* [Sneakers](https://github.com/jondot/sneakers)
+* [Sucker Punch](https://github.com/brandonhilkert/sucker_punch)
## Under development as a gem, targeted for Rails inclusion
diff --git a/Rakefile b/Rakefile
index e0d8e8e0d8..933c049a68 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_resque test_sidekiq test_sucker_punch test_delayed_job test_queue_classic test_sneakers)
+ tasks = %w(test_inline test_delayed_job test_que test_queue_classic test_resque test_sidekiq test_sneakers test_sucker_punch)
run_without_aborting(*tasks)
end
-%w(inline resque sidekiq sucker_punch delayed_job queue_classic sneakers).each do |adapter|
+%w(inline delayed_job que queue_classic resque sidekiq sneakers 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/queue_adapters/que_adapter.rb b/lib/active_job/queue_adapters/que_adapter.rb
new file mode 100644
index 0000000000..6750882b91
--- /dev/null
+++ b/lib/active_job/queue_adapters/que_adapter.rb
@@ -0,0 +1,19 @@
+require 'que'
+
+module ActiveJob
+ module QueueAdapters
+ class QueAdapter
+ class << self
+ def queue(job, *args)
+ JobWrapper.enqueue job, *args, queue: job.queue_name
+ end
+ end
+
+ class JobWrapper < Que::Job
+ def run(job, *args)
+ job.new.perform *Parameters.deserialize(args)
+ end
+ end
+ end
+ end
+end
diff --git a/test/adapters/que.rb b/test/adapters/que.rb
new file mode 100644
index 0000000000..640061bf54
--- /dev/null
+++ b/test/adapters/que.rb
@@ -0,0 +1,2 @@
+ActiveJob::Base.queue_adapter = :que
+Que.mode = :sync
diff --git a/test/cases/adapter_test.rb b/test/cases/adapter_test.rb
index 05efdc33e9..e922750ab4 100644
--- a/test/cases/adapter_test.rb
+++ b/test/cases/adapter_test.rb
@@ -10,26 +10,36 @@ class AdapterTest < ActiveSupport::TestCase
assert_equal ActiveJob::QueueAdapters::InlineAdapter, ActiveJob::Base.queue_adapter
end
- test 'should load resque adapter' do
+ test 'should load Delayed Job adapter' do
+ ActiveJob::Base.queue_adapter = :delayed_job
+ assert_equal ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load Que adapter' do
+ ActiveJob::Base.queue_adapter = :que
+ assert_equal ActiveJob::QueueAdapters::QueAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load Queue Classic adapter' do
+ ActiveJob::Base.queue_adapter = :queue_classic
+ assert_equal ActiveJob::QueueAdapters::QueueClassicAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load Resque adapter' do
ActiveJob::Base.queue_adapter = :resque
assert_equal ActiveJob::QueueAdapters::ResqueAdapter, ActiveJob::Base.queue_adapter
end
- test 'should load sidekiq adapter' do
+ test 'should load Sidekiq adapter' do
ActiveJob::Base.queue_adapter = :sidekiq
assert_equal ActiveJob::QueueAdapters::SidekiqAdapter, ActiveJob::Base.queue_adapter
end
- test 'should load sucker punch adapter' do
+ test 'should load Sucker Punch adapter' do
ActiveJob::Base.queue_adapter = :sucker_punch
assert_equal ActiveJob::QueueAdapters::SuckerPunchAdapter, ActiveJob::Base.queue_adapter
end
- test 'should load delayed_job adapter' do
- ActiveJob::Base.queue_adapter = :delayed_job
- assert_equal ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter
- end
-
def teardown
ActiveJob::Base.queue_adapter = @old_adapter
end