aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_job/base.rb
blob: f39dba6f5fb7cc4127595a2d0f3b7aa805edf060 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
require 'active_job/errors'
require 'active_job/queue_adapters/inline_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" }
    cattr_accessor(:queue_name)      { queue_base_name }

    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