Class: Lilac::CLI::ConfigLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/lilac/cli/config_loader.rb

Overview

Reads lilac.config.rb from a project root. The file uses the Lilac::CLI.configure DSL:

Lilac::CLI.configure do |c|
c.components_dir = "src/components"
c.dev_port    = 3000
end

Unset fields stay nil so callers (Config.load) can fall through to their hardcoded defaults. The DSL is only callable during a ConfigLoader.load invocation; calling it outside that context raises, which catches typos like Lilac.configure { ... } in arbitrary scripts.

Defined Under Namespace

Classes: LoadError, Settings

Constant Summary collapse

DEFAULT_FILENAME =
"lilac.config.rb"

Class Method Summary collapse

Class Method Details

.current_settingsObject



82
83
84
# File 'lib/lilac/cli/config_loader.rb', line 82

def self.current_settings
  Thread.current[:lilac_cli_settings]
end

.load(root, filename: DEFAULT_FILENAME) ⇒ Object

Loads <root>/lilac.config.rb if present and returns a Settings struct (with nils for unset fields). Returns nil when the file doesn't exist — callers treat that as "use defaults".



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/lilac/cli/config_loader.rb', line 57

def self.load(root, filename: DEFAULT_FILENAME)
  path = File.join(root, filename)
  return nil unless File.file?(path)

  settings = Settings.new
  with_settings(settings) do
    begin
      Kernel.load(path)
    rescue StandardError, ScriptError => e
      raise LoadError, "Error loading #{filename}: #{e.message}"
    end
  end
  settings
end

.with_settings(settings) ⇒ Object

Singleton stash so Lilac::CLI.configure can find the active Settings without each config file passing it explicitly.



74
75
76
77
78
79
80
# File 'lib/lilac/cli/config_loader.rb', line 74

def self.with_settings(settings)
  previous = Thread.current[:lilac_cli_settings]
  Thread.current[:lilac_cli_settings] = settings
  yield
ensure
  Thread.current[:lilac_cli_settings] = previous
end