aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/active_job/base.rb23
-rw-r--r--lib/active_job/errors.rb12
-rw-r--r--lib/active_job/job_wrappers/resque_wrapper.rb2
-rw-r--r--test/adapters/inline.rb1
-rw-r--r--test/adapters/resque.rb2
-rw-r--r--test/adapters/sidekiq.rb2
-rw-r--r--test/adapters/sucker_punch.rb2
-rw-r--r--test/cases/adapter_test.rb31
8 files changed, 67 insertions, 8 deletions
diff --git a/lib/active_job/base.rb b/lib/active_job/base.rb
index 6cce770466..f39dba6f5f 100644
--- a/lib/active_job/base.rb
+++ b/lib/active_job/base.rb
@@ -1,9 +1,9 @@
+require 'active_job/errors'
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'
+require 'active_support/core_ext/string/inflections'
module ActiveJob
+
class Base
cattr_accessor(:queue_adapter) { ActiveJob::QueueAdapters::InlineAdapter }
cattr_accessor(:queue_base_name) { "active_jobs" }
@@ -13,10 +13,25 @@ module ActiveJob
def enqueue(*args)
queue_adapter.queue self, *args
end
-
+
def queue_as(part_name)
self.queue_name = "#{queue_base_name}_#{part_name}"
end
+
+ def adapter=(adapter_name)
+ adapter_name = adapter_name.to_s
+ unless %w(inline resque sidekiq sucker_punch).include?(adapter_name)
+ fail ActiveJob::NotImplementedError
+ end
+
+ begin
+ require_relative "queue_adapters/#{adapter_name}_adapter"
+ ActiveJob::Base.queue_adapter = "ActiveJob::QueueAdapters::#{adapter_name.camelize}Adapter".constantize
+ rescue
+ fail ActiveJob::Error.new("#{adapter_name} is missing")
+ end
+ end
end
+
end
end \ No newline at end of file
diff --git a/lib/active_job/errors.rb b/lib/active_job/errors.rb
new file mode 100644
index 0000000000..4fc3be6878
--- /dev/null
+++ b/lib/active_job/errors.rb
@@ -0,0 +1,12 @@
+module ActiveJob
+
+ class NotImplementedError < ::NotImplementedError #:nodoc:
+ end
+
+ class Error < ::StandardError #:nodoc:
+ def initialize(message = nil)
+ super(message)
+ end
+ end
+
+end \ No newline at end of file
diff --git a/lib/active_job/job_wrappers/resque_wrapper.rb b/lib/active_job/job_wrappers/resque_wrapper.rb
index 0db9cf144f..cbeee4fb1b 100644
--- a/lib/active_job/job_wrappers/resque_wrapper.rb
+++ b/lib/active_job/job_wrappers/resque_wrapper.rb
@@ -2,7 +2,7 @@ require 'resque'
require 'active_support/core_ext/enumerable'
require 'active_support/core_ext/array/access'
-require 'active_support/core_ext/string/inflections'
+
module ActiveJob
diff --git a/test/adapters/inline.rb b/test/adapters/inline.rb
index e69de29bb2..131dd029b3 100644
--- a/test/adapters/inline.rb
+++ b/test/adapters/inline.rb
@@ -0,0 +1 @@
+ActiveJob::Base.adapter = :inline \ No newline at end of file
diff --git a/test/adapters/resque.rb b/test/adapters/resque.rb
index 7431d2d742..6e11f864c2 100644
--- a/test/adapters/resque.rb
+++ b/test/adapters/resque.rb
@@ -1,2 +1,2 @@
-ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::ResqueAdapter
+ActiveJob::Base.adapter = :resque
Resque.inline = true
diff --git a/test/adapters/sidekiq.rb b/test/adapters/sidekiq.rb
index 74ce808d55..55153d0bc6 100644
--- a/test/adapters/sidekiq.rb
+++ b/test/adapters/sidekiq.rb
@@ -1,2 +1,2 @@
require 'sidekiq/testing/inline'
-ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::SidekiqAdapter
+ActiveJob::Base.adapter = :sidekiq
diff --git a/test/adapters/sucker_punch.rb b/test/adapters/sucker_punch.rb
index a373552262..8ce9a902b6 100644
--- a/test/adapters/sucker_punch.rb
+++ b/test/adapters/sucker_punch.rb
@@ -1,2 +1,2 @@
require 'sucker_punch/testing/inline'
-ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::SuckerPunchAdapter
+ActiveJob::Base.adapter = :sucker_punch
diff --git a/test/cases/adapter_test.rb b/test/cases/adapter_test.rb
new file mode 100644
index 0000000000..eac92fb27d
--- /dev/null
+++ b/test/cases/adapter_test.rb
@@ -0,0 +1,31 @@
+require 'helper'
+
+class AdapterTest < ActiveSupport::TestCase
+ def setup
+ @old_adapter = ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load inline adapter' do
+ ActiveJob::Base.adapter = :inline
+ assert_equal ActiveJob::QueueAdapters::InlineAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load resque adapter' do
+ ActiveJob::Base.adapter = :resque
+ assert_equal ActiveJob::QueueAdapters::ResqueAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load sidekiq adapter' do
+ ActiveJob::Base.adapter = :sidekiq
+ assert_equal ActiveJob::QueueAdapters::SidekiqAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ test 'should load sucker punch adapter' do
+ ActiveJob::Base.adapter = :sucker_punch
+ assert_equal ActiveJob::QueueAdapters::SuckerPunchAdapter, ActiveJob::Base.queue_adapter
+ end
+
+ def teardown
+ ActiveJob::Base.queue_adapter = @old_adapter
+ end
+end