Module: Ace::B36ts::Molecules::ConfigResolver

Defined in:
lib/ace/b36ts/molecules/config_resolver.rb

Overview

Resolves configuration for ace-b36ts using the ace-config cascade.

Configuration sources (in order of precedence):

  1. Runtime options (passed directly to methods)

  2. Project config (.ace/b36ts/config.yml)

  3. User config (~/.ace/b36ts/config.yml)

  4. Gem defaults (.ace-defaults/b36ts/config.yml)

Examples:

Get resolved configuration

config = ConfigResolver.resolve
config[:year_zero]  # => 2000
config[:alphabet]   # => "0123456789abcdefghijklmnopqrstuvwxyz"

Override with runtime options

config = ConfigResolver.resolve(year_zero: 2025)
config[:year_zero]  # => 2025

Constant Summary collapse

FALLBACK_DEFAULTS =

Fallback defaults (used only if .ace-defaults files cannot be loaded)

{
  year_zero: 2000,
  alphabet: "0123456789abcdefghijklmnopqrstuvwxyz",
  default_format: :"2sec"
}.freeze

Class Method Summary collapse

Class Method Details

.alphabet(override = nil) ⇒ String

Get the alphabet value from configuration

Parameters:

  • override (String, nil) (defaults to: nil)

    Optional runtime override

Returns:

  • (String)

    The alphabet value



75
76
77
# File 'lib/ace/b36ts/molecules/config_resolver.rb', line 75

def alphabet(override = nil)
  override || resolve[:alphabet]
end

.default_format(override = nil) ⇒ Symbol

Get the default_format value from configuration

Parameters:

  • override (Symbol, String, nil) (defaults to: nil)

    Optional runtime override

Returns:

  • (Symbol)

    The default_format value (always a symbol)



83
84
85
86
# File 'lib/ace/b36ts/molecules/config_resolver.rb', line 83

def default_format(override = nil)
  value = override || resolve[:default_format]
  value.is_a?(String) ? value.to_sym : value
end

.reset!Object

Reset cached configuration (useful for testing)



89
90
91
# File 'lib/ace/b36ts/molecules/config_resolver.rb', line 89

def reset!
  @config = nil
end

.resolve(overrides = {}) ⇒ Hash

Resolve configuration with optional overrides

Uses Ace::Support::Config::Models::Config.wrap for proper merging per ADR-022.

Parameters:

  • overrides (Hash) (defaults to: {})

    Runtime configuration overrides

Returns:

  • (Hash)

    Merged configuration

Raises:

  • (ArgumentError)

    If configuration values are invalid



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ace/b36ts/molecules/config_resolver.rb', line 41

def resolve(overrides = {})
  base_config = load_config

  # Apply runtime overrides (symbolize keys, skip nil values)
  symbolized_overrides = {}
  overrides.each do |key, value|
    symbolized_overrides[key.to_sym] = value unless value.nil?
  end

  # Merge base config with runtime overrides
  config = Ace::Support::Config::Models::Config.wrap(
    base_config,
    symbolized_overrides,
    source: "ace-b36ts"
  )

  # Validate the merged configuration
  validate_config!(config)

  config
end

.year_zero(override = nil) ⇒ Integer

Get the year_zero value from configuration

Parameters:

  • override (Integer, nil) (defaults to: nil)

    Optional runtime override

Returns:

  • (Integer)

    The year_zero value



67
68
69
# File 'lib/ace/b36ts/molecules/config_resolver.rb', line 67

def year_zero(override = nil)
  override || resolve[:year_zero]
end