Module: Kaal::JobDispatcher

Defined in:
lib/kaal/job_dispatcher.rb

Overview

Shared job-class resolution and dispatch rules used by recurring and delayed jobs.

Class Method Summary collapse

Class Method Details

.active_job_dispatch?(job_class, queue) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/kaal/job_dispatcher.rb', line 48

def active_job_dispatch?(job_class, queue)
  (queue && job_class.respond_to?(:set)) || job_class.respond_to?(:perform_later)
end

.dispatch(job_class:, queue:, args:, key: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/kaal/job_dispatcher.rb', line 27

def dispatch(job_class:, queue:, args:, key: nil)
  job_class_name = job_class.name
  scheduler_context = key ? " for scheduler job '#{key}'" : ''

  if queue && !job_class.respond_to?(:set)
    raise SchedulerConfigError,
          "job_class '#{job_class_name}' must respond to .set to use queue #{queue.inspect}#{scheduler_context}"
  end

  if queue
    job_class.set(queue: queue).perform_later(*args)
  elsif job_class.respond_to?(:perform_later)
    job_class.perform_later(*args)
  elsif job_class.respond_to?(:perform)
    job_class.perform(*args)
  else
    raise SchedulerConfigError,
          "job_class '#{job_class_name}' must respond to .perform, .perform_later, or .set(...).perform_later#{scheduler_context}"
  end
end

.normalize_job_class_name(job_class) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/kaal/job_dispatcher.rb', line 52

def normalize_job_class_name(job_class)
  case job_class
  when Module
    job_class.name.to_s.strip
  else
    job_class.to_s.strip
  end
end

.normalized_job_class_name(job_class_name:, key:, apply_delayed_job_allow_list: true) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/kaal/job_dispatcher.rb', line 17

def normalized_job_class_name(job_class_name:, key:, apply_delayed_job_allow_list: true)
  normalized_job_class_name = normalize_job_class_name(job_class_name)
  raise SchedulerConfigError, "Job class cannot be blank for key '#{key}'" if normalized_job_class_name.empty?

  return normalized_job_class_name unless apply_delayed_job_allow_list

  validate_allowed_job_class_name!(job_class_name: normalized_job_class_name, key:)
  normalized_job_class_name
end

.resolve_job_class(job_class_name:, key:, queue: nil, apply_delayed_job_allow_list: true) ⇒ Object



12
13
14
15
# File 'lib/kaal/job_dispatcher.rb', line 12

def resolve_job_class(job_class_name:, key:, queue: nil, apply_delayed_job_allow_list: true)
  job_class = normalize_job_class(job_class_name, key, apply_delayed_job_allow_list:)
  validate_dispatch_interface(job_class, key, queue)
end