diff options
author | Jeremy Kemper <jeremykemper@gmail.com> | 2015-03-11 16:29:44 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremykemper@gmail.com> | 2015-03-11 16:29:44 -0700 |
commit | 7884c8f88e6bf64fe228141720183297ec2fce02 (patch) | |
tree | f94c5b905ffb9ba475c3e6b6713838b9f1750f3b /activejob/lib/active_job/queue_adapter.rb | |
parent | d31c941413ed484762ec819de8f35d413d84a9d6 (diff) | |
parent | fb26645c1ed9d3b74ec421839c9732706f74f5c0 (diff) | |
download | rails-7884c8f88e6bf64fe228141720183297ec2fce02.tar.gz rails-7884c8f88e6bf64fe228141720183297ec2fce02.tar.bz2 rails-7884c8f88e6bf64fe228141720183297ec2fce02.zip |
Merge pull request #19295 from square/aj-instances
`ActiveJob::QueueAdapters::*` are no longer singletons
Diffstat (limited to 'activejob/lib/active_job/queue_adapter.rb')
-rw-r--r-- | activejob/lib/active_job/queue_adapter.rb | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/activejob/lib/active_job/queue_adapter.rb b/activejob/lib/active_job/queue_adapter.rb index aa3ebdbc7b..23b5f7de75 100644 --- a/activejob/lib/active_job/queue_adapter.rb +++ b/activejob/lib/active_job/queue_adapter.rb @@ -14,20 +14,40 @@ module ActiveJob # Specify the backend queue provider. The default queue adapter # is the :inline queue. See QueueAdapters for more # information. - def queue_adapter=(name_or_adapter) - @@queue_adapter = \ - case name_or_adapter - when Symbol, String - load_adapter(name_or_adapter) + def queue_adapter=(name_or_adapter_or_class) + case name_or_adapter_or_class + when Symbol, String + self.queue_adapter = load_adapter(name_or_adapter_or_class) + else + @@queue_adapter = if queue_adapter?(name_or_adapter_or_class) + name_or_adapter_or_class + elsif queue_adapter_class?(name_or_adapter_or_class) + ActiveSupport::Deprecation.warn "Passing an adapter class is deprecated " \ + "and will be removed in Rails 5.1. Please pass an adapter name " \ + "(.queue_adapter = :#{name_or_adapter_or_class.name.demodulize.remove('Adapter').underscore}) " \ + "or an instance (.queue_adapter = #{name_or_adapter_or_class.name}.new) instead." + name_or_adapter_or_class.new else - name_or_adapter if name_or_adapter.respond_to?(:enqueue) + raise ArgumentError end + end end private - def load_adapter(name) - "ActiveJob::QueueAdapters::#{name.to_s.camelize}Adapter".constantize - end + + QUEUE_ADAPTER_METHODS = [:enqueue, :enqueue_at].freeze + + def queue_adapter?(object) + QUEUE_ADAPTER_METHODS.all? { |meth| object.respond_to?(meth) } + end + + def queue_adapter_class?(object) + object.is_a?(Class) && QUEUE_ADAPTER_METHODS.all? { |meth| object.public_method_defined?(meth) } + end + + def load_adapter(name) + "ActiveJob::QueueAdapters::#{name.to_s.camelize}Adapter".constantize.new + end end end end |