Class: Kaal::Config::FileLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/kaal/config/file_loader.rb

Overview

Loads Kaal runtime configuration from config/kaal.yml and KAAL_* env vars.

Defined Under Namespace

Classes: EnvValue

Constant Summary collapse

ENV_KEY_MAP =
{
  'KAAL_BACKEND' => :backend,
  'KAAL_NAMESPACE' => :namespace,
  'KAAL_TICK_INTERVAL' => :tick_interval,
  'KAAL_WINDOW_LOOKBACK' => :window_lookback,
  'KAAL_WINDOW_LOOKAHEAD' => :window_lookahead,
  'KAAL_LEASE_TTL' => :lease_ttl,
  'KAAL_SCHEDULER_CONFIG_PATH' => :scheduler_config_path,
  'KAAL_ENABLE_LOG_DISPATCH_REGISTRY' => :enable_log_dispatch_registry,
  'KAAL_ENABLE_DISPATCH_RECOVERY' => :enable_dispatch_recovery,
  'KAAL_RECOVERY_WINDOW' => :recovery_window,
  'KAAL_RECOVERY_STARTUP_JITTER' => :recovery_startup_jitter,
  'KAAL_TIME_ZONE' => :time_zone,
  'KAAL_SCHEDULER_CONFLICT_POLICY' => :scheduler_conflict_policy,
  'KAAL_SCHEDULER_MISSING_FILE_POLICY' => :scheduler_missing_file_policy,
  'KAAL_DELAYED_JOB_ALLOWED_CLASS_PREFIXES' => :delayed_job_allowed_class_prefixes
}.freeze
CONFIG_KEY_TO_ENV_KEY =
ENV_KEY_MAP.invert.freeze
CONFIGURATION_ASSIGNERS =
{
  namespace: ->(config, value) { config.namespace = value },
  tick_interval: ->(config, value) { config.tick_interval = value },
  window_lookback: ->(config, value) { config.window_lookback = value },
  window_lookahead: ->(config, value) { config.window_lookahead = value },
  lease_ttl: ->(config, value) { config.lease_ttl = value },
  scheduler_config_path: ->(config, value) { config.scheduler_config_path = value },
  enable_log_dispatch_registry: ->(config, value) { config.enable_log_dispatch_registry = value },
  enable_dispatch_recovery: ->(config, value) { config.enable_dispatch_recovery = value },
  recovery_window: ->(config, value) { config.recovery_window = value },
  recovery_startup_jitter: ->(config, value) { config.recovery_startup_jitter = value },
  time_zone: ->(config, value) { config.time_zone = value },
  scheduler_conflict_policy: ->(config, value) { config.scheduler_conflict_policy = value },
  scheduler_missing_file_policy: ->(config, value) { config.scheduler_missing_file_policy = value },
  delayed_job_allowed_class_prefixes: ->(config, value) { config.delayed_job_allowed_class_prefixes = value },
  logger: ->(config, value) { config.logger = value }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(configuration:, runtime_context:, env: ENV) ⇒ FileLoader

Returns a new instance of FileLoader.



88
89
90
91
92
93
# File 'lib/kaal/config/file_loader.rb', line 88

def initialize(configuration:, runtime_context:, env: ENV)
  @configuration = configuration
  @runtime_context = runtime_context
  @env = env
  @config_key_to_env_key = CONFIG_KEY_TO_ENV_KEY
end

Instance Method Details

#load(path: 'config/kaal.yml') ⇒ Object



95
96
97
98
99
100
101
102
103
# File 'lib/kaal/config/file_loader.rb', line 95

def load(path: 'config/kaal.yml')
  absolute_path = @runtime_context.resolve_path(path)
  payload = File.exist?(absolute_path) ? parse_yaml(absolute_path) : {}
  merged = merge_environment_config(payload)
  merged = apply_env_overrides(merged)
  apply_configuration(merged)
  @configuration.validate!
  @configuration
end