Class: Kaal::SchedulerFileLoader::JobNormalizer
- Inherits:
-
Object
- Object
- Kaal::SchedulerFileLoader::JobNormalizer
- Includes:
- Kaal::Support::HashTools
- Defined in:
- lib/kaal/scheduler_file/job_normalizer.rb,
sig/kaal/scheduler_file/job_normalizer.rbs
Overview
Normalizes scheduler job payloads into application-ready hashes.
Instance Method Summary collapse
- #call(job_payload) ⇒ ::Hash[:key | :cron | :job_class_name | Kaal::rbs_any, Kaal::rbs_any]
- #extract_job_options(payload, key:) ⇒ { queue: Kaal::rbs_any, args: Kaal::rbs_any, kwargs: Kaal::rbs_any, enabled: Kaal::rbs_any, metadata: Kaal::rbs_any }
-
#initialize(hash_transform:, placeholder_support:, cron_validator:) ⇒ JobNormalizer
constructor
A new instance of JobNormalizer.
- #required_string(payload, field:, error_prefix:) ⇒ Kaal::rbs_any
- #validate_cron(key:, cron:) ⇒ nil, Kaal::rbs_any
- #validate_job_option_types(key:, args:, kwargs:, queue:) ⇒ nil, Kaal::rbs_any
Methods included from Kaal::Support::HashTools
constantize, deep_dup, deep_merge, duplicable?, stringify_keys, symbolize_keys
Constructor Details
#initialize(hash_transform:, placeholder_support:, cron_validator:) ⇒ JobNormalizer
Returns a new instance of JobNormalizer.
15 16 17 18 19 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 15 def initialize(hash_transform:, placeholder_support:, cron_validator:) @hash_transform = hash_transform @placeholder_support = placeholder_support @cron_validator = cron_validator end |
Instance Method Details
#call(job_payload) ⇒ ::Hash[:key | :cron | :job_class_name | Kaal::rbs_any, Kaal::rbs_any]
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 21 def call(job_payload) payload = @hash_transform.stringify_keys(job_payload) key = payload.fetch('key', '').to_s.strip raise SchedulerConfigError, 'Job key cannot be blank' if key.empty? cron = required_string(payload, field: 'cron', error_prefix: "Job cron cannot be blank for key '#{key}'") job_class_name = required_string(payload, field: 'job_class', error_prefix: "Job class cannot be blank for key '#{key}'") validate_cron(key:, cron:) = (payload, key:) { key: key, cron: cron, job_class_name: job_class_name, ** } end |
#extract_job_options(payload, key:) ⇒ { queue: Kaal::rbs_any, args: Kaal::rbs_any, kwargs: Kaal::rbs_any, enabled: Kaal::rbs_any, metadata: Kaal::rbs_any }
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 54 def (payload, key:) , args, kwargs, queue, enabled_value = payload.values_at('metadata', 'args', 'kwargs', 'queue', 'enabled') args ||= [] kwargs ||= {} enabled = true if payload.key?('enabled') raise SchedulerConfigError, "enabled must be a boolean for key '#{key}'" unless enabled_value.is_a?(TrueClass) || enabled_value.is_a?(FalseClass) enabled = enabled_value end raise SchedulerConfigError, "metadata must be a mapping for key '#{key}'" if && !.is_a?(Hash) validate_job_option_types(key:, args:, kwargs:, queue:) @placeholder_support.validate_placeholders(args, key:) @placeholder_support.validate_placeholders(kwargs, key:) { queue: queue, args: deep_dup(args), kwargs: deep_dup(kwargs), enabled: enabled, metadata: ? deep_dup() : {} } end |
#required_string(payload, field:, error_prefix:) ⇒ Kaal::rbs_any
41 42 43 44 45 46 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 41 def required_string(payload, field:, error_prefix:) value = payload.fetch(field, '').to_s.strip raise SchedulerConfigError, error_prefix if value.empty? value end |
#validate_cron(key:, cron:) ⇒ nil, Kaal::rbs_any
48 49 50 51 52 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 48 def validate_cron(key:, cron:) return if @cron_validator.call(cron) raise SchedulerConfigError, "Invalid cron expression '#{cron}' for key '#{key}'" end |
#validate_job_option_types(key:, args:, kwargs:, queue:) ⇒ nil, Kaal::rbs_any
80 81 82 83 84 85 86 87 |
# File 'lib/kaal/scheduler_file/job_normalizer.rb', line 80 def validate_job_option_types(key:, args:, kwargs:, queue:) raise SchedulerConfigError, "args must be an array for key '#{key}'" unless args.is_a?(Array) raise SchedulerConfigError, "kwargs must be a mapping for key '#{key}'" unless kwargs.is_a?(Hash) raise SchedulerConfigError, "queue must be a string for key '#{key}'" if queue && !queue.is_a?(String) return if kwargs.keys.all? { |kwargs_key| kwargs_key.is_a?(String) || kwargs_key.is_a?(Symbol) } raise SchedulerConfigError, "kwargs keys must be strings or symbols for key '#{key}'" end |