Class: Config::Options
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- Config::Options
- Includes:
- Validation::Validate, Enumerable
- Defined in:
- lib/config/options.rb
Constant Summary collapse
- SETTINGS_RESERVED_NAMES =
Some keywords that don’t play nicely with OpenStruct
%w{select collect test}
Instance Method Summary collapse
-
#[](param) ⇒ Object
An alternative mechanism for property access.
- #[]=(param, value) ⇒ Object
- #add_source!(source, namespace = nil) ⇒ Object
- #each(*args, &block) ⇒ Object
- #empty? ⇒ Boolean
- #keys ⇒ Object
- #merge!(hash) ⇒ Object
- #prepend_source!(source) ⇒ Object
-
#reload! ⇒ Object
(also: #load!)
look through all our sources and rebuild the configuration.
- #reload_env! ⇒ Object (also: #load_env!)
- #reload_from_files(*files) ⇒ Object
- #to_hash ⇒ Object
- #to_json(*args) ⇒ Object
Methods included from Validation::Validate
Instance Method Details
#[](param) ⇒ Object
An alternative mechanism for property access. This let’s you do foo along with foo.bar.
138 139 140 141 |
# File 'lib/config/options.rb', line 138 def [](param) return super if SETTINGS_RESERVED_NAMES.include?(param) send("#{param}") end |
#[]=(param, value) ⇒ Object
143 144 145 |
# File 'lib/config/options.rb', line 143 def []=(param, value) send("#{param}=", value) end |
#add_source!(source, namespace = nil) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/config/options.rb', line 17 def add_source!(source, namespace=nil) # handle yaml file paths source = (Sources::YAMLSource.new(source, namespace)) if source.is_a?(String) source = (Sources::HashSource.new(source, namespace)) if source.is_a?(Hash) @config_sources ||= [] @config_sources << source end |
#each(*args, &block) ⇒ Object
114 115 116 |
# File 'lib/config/options.rb', line 114 def each(*args, &block) marshal_dump.each(*args, &block) end |
#empty? ⇒ Boolean
13 14 15 |
# File 'lib/config/options.rb', line 13 def empty? marshal_dump.empty? end |
#keys ⇒ Object
9 10 11 |
# File 'lib/config/options.rb', line 9 def keys marshal_dump.keys end |
#merge!(hash) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/config/options.rb', line 123 def merge!(hash) current = to_hash DeepMerge.deep_merge!(hash.dup, current, preserve_unmergeables: false, overwrite_arrays: Config.overwrite_arrays) marshal_load(__convert(current).marshal_dump) self end |
#prepend_source!(source) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/config/options.rb', line 26 def prepend_source!(source) source = (Sources::YAMLSource.new(source)) if source.is_a?(String) source = (Sources::HashSource.new(source)) if source.is_a?(Hash) @config_sources ||= [] @config_sources.unshift(source) end |
#reload! ⇒ Object Also known as: load!
look through all our sources and rebuild the configuration
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/config/options.rb', line 68 def reload! conf = {} @config_sources.each do |source| source_conf = source.load if conf.empty? conf = source_conf else DeepMerge.deep_merge!(source_conf, conf, preserve_unmergeables: false, knockout_prefix: Config.knockout_prefix, overwrite_arrays: Config.overwrite_arrays) end end # swap out the contents of the OStruct with a hash (need to recursively convert) marshal_load(__convert(conf).marshal_dump) reload_env! if Config.use_env validate! if RUBY_VERSION >= '2.1' self end |
#reload_env! ⇒ Object Also known as: load_env!
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/config/options.rb', line 34 def reload_env! return self if ENV.nil? || ENV.empty? hash = Hash.new ENV.each do |variable, value| keys = variable.to_s.split(Config.env_separator) next if keys.shift != (Config.env_prefix || Config.const_name) keys.map! { |key| case Config.env_converter when :downcase then key.downcase.to_sym when nil then key.to_sym else raise "Invalid ENV variables name converter: #{Config.env_converter}" end } leaf = keys[0...-1].inject(hash) { |h, key| h[key] ||= {} } leaf[keys.last] = Config.env_parse_values ? __value(value) : value end merge!(hash) end |
#reload_from_files(*files) ⇒ Object
95 96 97 98 |
# File 'lib/config/options.rb', line 95 def reload_from_files(*files) Config.load_and_set_settings(files) reload! end |
#to_hash ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/config/options.rb', line 100 def to_hash result = {} marshal_dump.each do |k, v| if v.instance_of? Config::Options result[k] = v.to_hash elsif v.instance_of? Array result[k] = descend_array(v) else result[k] = v end end result end |
#to_json(*args) ⇒ Object
118 119 120 121 |
# File 'lib/config/options.rb', line 118 def to_json(*args) require "json" unless defined?(JSON) to_hash.to_json(*args) end |