Module: Component::Settings

Defined in:
lib/component/settings.rb

Class Method Summary collapse

Class Method Details

._load_settings_file(name, env) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/component/settings.rb', line 34

def self._load_settings_file(name, env)
  yaml_file = Pathname.new("#{Rails.application.paths["config"].existent.first}/#{name}.yml")

  if yaml_file.exist?
    require "erb"
    yaml = (YAML.load(ERB.new(yaml_file.read).result) || {})

    result = yaml.map { |k, v| [k, v[env] || {}] }.to_h

    return result
  else
    return nil
  end
rescue Psych::SyntaxError => e
  raise "YAML syntax error occurred while parsing #{yaml_file}. " \
        "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
        "Error: #{e.message}"
end

.load_settings(name, env: nil) ⇒ Object

Loads settings YAML and returns hash with settings names/values

In case name.override.yml file present, its content merged on top of settings file.

Adapted from Rails.application.config_for() YAML format key:env:value

Parameters:

  • name (String)

    settings file name.

  • env (String) (defaults to: nil)

    environment name, by default Rails.env will be used.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/component/settings.rb', line 18

def self.load_settings(name, env: nil)
  env ||= Rails.env
  settings = _load_settings_file(name, env)
  if settings.nil?
    raise "Could not load configuration. No such file - #{name}.yml"
  end

  overrides = _load_settings_file(name.to_s + ".override", env)
  if overrides.present?
    settings.deep_merge!(overrides)
  end

  settings.with_indifferent_access.freeze
end