Class: MatViews::Jobs::Adapter

Inherits:
Object
  • Object
show all
Defined in:
lib/mat_views/jobs/adapter.rb

Overview

Adapter class for handling job enqueuing across different backends.

This class abstracts the job enqueueing process so MatViews can work with multiple background processing frameworks without changing core code.

Supported adapters (configured via MatViews.configuration.job_adapter):

  • :active_job → ActiveJob

  • :sidekiq → Sidekiq::Client

  • :resque → Resque

Examples:

Enqueue via ActiveJob

MatViews.configuration.job_adapter = :active_job
MatViews::Jobs::Adapter.enqueue(MyJob, queue: :low, args: [1, "foo"])

Enqueue via Sidekiq

MatViews.configuration.job_adapter = :sidekiq
MatViews::Jobs::Adapter.enqueue(MyWorker, queue: :critical, args: [42])

Enqueue via Resque

MatViews.configuration.job_adapter = :resque
MatViews::Jobs::Adapter.enqueue(MyWorker, queue: :default, args: %w[a b c])

Raises:

  • (ArgumentError)

    if the configured adapter is not recognized

Class Method Summary collapse

Class Method Details

.enqueue(job_class, queue:, args: []) ⇒ Object

Enqueue a job across supported backends.

Parameters:

  • job_class (Class)

    The job or worker class to enqueue.

    • For :active_job, this should be a subclass of ActiveJob::Base.

    • For :sidekiq, this should be a Sidekiq worker class.

    • For :resque, this should be a Resque worker class.

  • queue (String, Symbol)

    Target queue name.

  • args (Array) (defaults to: [])

    Arguments to pass into the job/worker.

Returns:

  • (Object)

    Framework-dependent:

    • For ActiveJob → enqueued ActiveJob::Base instance

    • For Sidekiq → job ID hash

    • For Resque → true if enqueue succeeded

Raises:

  • (ArgumentError)

    if the configured adapter is not recognized.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/mat_views/jobs/adapter.rb', line 60

def self.enqueue(job_class, queue:, args: [])
  queue_str = queue.to_s
  job_adapter = MatViews.configuration.job_adapter

  case job_adapter
  when :active_job
    job_class.set(queue: queue_str).perform_later(*args)
  when :sidekiq
    Sidekiq::Client.push(
      'class' => job_class.name,
      'queue' => queue_str,
      'args' => args
    )
  when :resque
    Resque.enqueue_to(queue_str, job_class, *args)
  else
    raise ArgumentError, "Unknown job adapter: #{job_adapter.inspect}"
  end
end