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 count}
Instance Method Summary collapse
-
#[](param) ⇒ Object
An alternative mechanism for property access.
- #[]=(param, value) ⇒ Object
- #add_source!(source) ⇒ 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.
141 142 143 144 |
# File 'lib/config/options.rb', line 141 def [](param) return super if SETTINGS_RESERVED_NAMES.include?(param) send("#{param}") end |
#[]=(param, value) ⇒ Object
146 147 148 |
# File 'lib/config/options.rb', line 146 def []=(param, value) send("#{param}=", value) end |
#add_source!(source) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/config/options.rb', line 17 def add_source!(source) # handle yaml file paths source = (Sources::YAMLSource.new(source)) if source.is_a?(String) source = (Sources::HashSource.new(source)) if source.is_a?(Hash) @config_sources ||= [] @config_sources << source end |
#each(*args, &block) ⇒ Object
117 118 119 |
# File 'lib/config/options.rb', line 117 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
126 127 128 129 130 131 132 133 134 |
# File 'lib/config/options.rb', line 126 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
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/config/options.rb', line 71 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 64 65 66 |
# 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| separator = Config.env_separator prefix = (Config.env_prefix || Config.const_name).to_s.split(separator) keys = variable.to_s.split(separator) next if keys.shift(prefix.size) != prefix 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
98 99 100 101 |
# File 'lib/config/options.rb', line 98 def reload_from_files(*files) Config.load_and_set_settings(files) reload! end |
#to_hash ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/config/options.rb', line 103 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
121 122 123 124 |
# File 'lib/config/options.rb', line 121 def to_json(*args) require "json" unless defined?(JSON) to_hash.to_json(*args) end |