Class: Lumin::Config::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/lumin/config/loader.rb

Instance Method Summary collapse

Constructor Details

#initializeLoader

Returns a new instance of Loader.



8
9
10
# File 'lib/lumin/config/loader.rb', line 8

def initialize
  @loading = []
end

Instance Method Details

#load_file(path) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/lumin/config/loader.rb', line 12

def load_file(path)
  expanded = File.expand_path(path)
  if @loading.include?(expanded)
    raise ConfigError, "configuration inheritance cycle: #{expanded}"
  end

  @loading << expanded
  raw = YAML.safe_load_file(expanded, permitted_classes: [], permitted_symbols: [], aliases: false) || {}
  raise ConfigError, "configuration root must be a mapping" unless raw.is_a?(Hash)

  raw = Config.stringify_keys(raw)
  inherited = Array(raw.delete("inherit_from")).reduce({}) do |merged, reference|
    Config.deep_merge(merged, load_file(resolve(reference, File.dirname(expanded))))
  end
  Config.deep_merge(inherited, raw)
rescue Psych::Exception => error
  raise ConfigError, "cannot load #{expanded}: #{error.message}"
ensure
  @loading.delete(expanded) if expanded
end