class YAMLSettings
Constants
- VERSION
Public Class Methods
new(*filenames, key)
click to toggle source
Settings are merged in two stages. First, all filenames
are recursively merged in reverse order. Settings in succeeding filenames
overwrite all duplicate settings in preceding filenames
. Second, settings specified by key
are then recursively merged with the default settings.
filenames
-
one or more YAML data files
key
-
selects the top-level stanza from
filenames
to be merged with the default stanza
Calls superclass method
# File lib/yaml_settings.rb, line 25 def initialize(*filenames, key) all_settings = filenames.collect {|f| YAML.load_file(f) } settings = all_settings.reduce {|i, j| deep_merge(i, j) } @settings = deep_merge(settings.fetch('default'), settings.fetch(key.to_s)) @settings.extend(AttrReader) propagate_attr_reader(@settings) super(@settings) end
Public Instance Methods
inspect()
click to toggle source
# File lib/yaml_settings.rb, line 35 def inspect() @settings.inspect end
Also aliased as: to_s
Private Instance Methods
deep_merge(h1, h2)
click to toggle source
# File lib/yaml_settings.rb, line 44 def deep_merge(h1, h2) h1.merge!(h2) do |key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? deep_merge(v1, v2) : v2 end end
method_missing(setting, *args, &blk)
click to toggle source
Calls superclass method
# File lib/yaml_settings.rb, line 40 def method_missing(setting, *args, &blk) super rescue @settings.send(setting) end
propagate_attr_reader(settings)
click to toggle source
# File lib/yaml_settings.rb, line 50 def propagate_attr_reader(settings) settings.each_value do |setting_value| if setting_value.is_a? Hash setting_value.extend(AttrReader) propagate_attr_reader(setting_value) end end end