From 91461dc7a9f0aa879cfff503ea2fdb9a71e0277e Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Sun, 18 May 2014 20:59:12 +0000 Subject: [PATCH] Lazy-load adapters, fixes #6 --- lib/active_job/base.rb | 23 +++++++++++--- lib/active_job/errors.rb | 12 +++++++ lib/active_job/job_wrappers/resque_wrapper.rb | 2 +- test/adapters/inline.rb | 1 + test/adapters/resque.rb | 2 +- test/adapters/sidekiq.rb | 2 +- test/adapters/sucker_punch.rb | 2 +- test/cases/adapter_test.rb | 31 +++++++++++++++++++ 8 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 lib/active_job/errors.rb create mode 100644 test/cases/adapter_test.rb 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 @@ class << self 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 '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