class Config::Options

Constants

RAILS_RESERVED_NAMES

Some keywords that don’t play nicely with Rails 7.*

SETTINGS_RESERVED_NAMES

Some keywords that don’t play nicely with OpenStruct

Public Instance Methods

[](param) click to toggle source

An alternative mechanism for property access. This let’s you do foo along with foo.bar.

Calls superclass method
# File lib/config/options.rb, line 122
def [](param)
  return super if SETTINGS_RESERVED_NAMES.include?(param)
  return super if RAILS_RESERVED_NAMES.include?(param)
  public_send("#{param}")
end
[]=(param, value) click to toggle source
# File lib/config/options.rb, line 128
def []=(param, value)
  send("#{param}=", value)
end
add_source!(source) click to toggle source
# 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.is_a?(Pathname)
  source = (Sources::HashSource.new(source)) if source.is_a?(Hash)

  @config_sources ||= []
  @config_sources << source
end
as_json(options = nil) click to toggle source
# File lib/config/options.rb, line 95
def as_json(options = nil)
  to_hash.as_json(options)
end
each(*args, &block) click to toggle source
# File lib/config/options.rb, line 86
def each(*args, &block)
  marshal_dump.each(*args, &block)
end
empty?() click to toggle source
# File lib/config/options.rb, line 13
def empty?
  marshal_dump.empty?
end
has_key?(key) click to toggle source
# File lib/config/options.rb, line 148
def has_key?(key)
  @table.has_key?(key)
end
key?(key) click to toggle source
# File lib/config/options.rb, line 144
def key?(key)
  @table.key?(key)
end
keys() click to toggle source
# File lib/config/options.rb, line 9
def keys
  marshal_dump.keys
end
load!()
Alias for: reload!
merge!(hash) click to toggle source
# File lib/config/options.rb, line 99
def merge!(hash)
  current = to_hash
  DeepMerge.deep_merge!(
                        hash.dup,
                        current,
                        preserve_unmergeables: false,
                        knockout_prefix:       Config.knockout_prefix,
                        overwrite_arrays:      Config.overwrite_arrays,
                        merge_nil_values:      Config.merge_nil_values,
                        merge_hash_arrays:     Config.merge_hash_arrays
                       )
  marshal_load(__convert(current).marshal_dump)
  self
end
method_missing(method_name, *args) click to toggle source
Calls superclass method
# File lib/config/options.rb, line 152
def method_missing(method_name, *args)
  if Config.fail_on_missing && method_name !~ /.*(?==\z)/m
    raise KeyError, "key not found: #{method_name.inspect}" unless key?(method_name)
  end
  super
end
prepend_source!(source) click to toggle source
# File lib/config/options.rb, line 26
def prepend_source!(source)
  source = (Sources::YAMLSource.new(source)) if source.is_a?(String) || source.is_a?(Pathname)
  source = (Sources::HashSource.new(source)) if source.is_a?(Hash)

  @config_sources ||= []
  @config_sources.unshift(source)
end
reload!() click to toggle source

look through all our sources and rebuild the configuration

# File lib/config/options.rb, line 35
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,
                            merge_nil_values:      Config.merge_nil_values,
                            merge_hash_arrays:     Config.merge_hash_arrays
                           )
    end
  end

  # swap out the contents of the OStruct with a hash (need to recursively convert)
  marshal_load(__convert(conf).marshal_dump)

  validate!

  self
end
Also aliased as: load!
reload_from_files(*files) click to toggle source
# File lib/config/options.rb, line 65
def reload_from_files(*files)
  Config.load_and_set_settings(files)
  reload!
end
respond_to_missing?(*args) click to toggle source
Calls superclass method
# File lib/config/options.rb, line 159
def respond_to_missing?(*args)
  super
end
to_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/config/options.rb, line 70
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
Also aliased as: to_h
to_json(*args) click to toggle source
# File lib/config/options.rb, line 90
def to_json(*args)
  require "json" unless defined?(JSON)
  to_hash.to_json(*args)
end

Protected Instance Methods

descend_array(array) click to toggle source
# File lib/config/options.rb, line 165
def descend_array(array)
  array.map do |value|
    if value.instance_of? Config::Options
      value.to_hash
    elsif value.instance_of? Array
      descend_array(value)
    else
      value
    end
  end
end