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
- .active_job_dispatch?(job_class, queue) ⇒ Boolean
- .dispatch(job_class:, queue:, args:, key: nil) ⇒ Object
- .normalize_job_class_name(job_class) ⇒ Object
- .normalized_job_class_name(job_class_name:, key:, apply_delayed_job_allow_list: true) ⇒ Object
- .resolve_job_class(job_class_name:, key:, queue: nil, apply_delayed_job_allow_list: true) ⇒ Object
Class Method Details
.active_job_dispatch?(job_class, queue) ⇒ 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 |