class ActiveSetting::Loader

Attributes

config_filename[W]

Public Class Methods

build_hash(filename = nil) click to toggle source
# File lib/active_setting/loader.rb, line 10
def build_hash(filename = nil)
  new(filename).build_hash
end
config_filename() click to toggle source
# File lib/active_setting/loader.rb, line 14
def config_filename
  @config_filename || 'settings.yml'
end
external_settings() click to toggle source
# File lib/active_setting/loader.rb, line 20
def external_settings
  @external_settings ||= {}
end
load_settings(filename = nil) click to toggle source
# File lib/active_setting/loader.rb, line 6
def load_settings(filename = nil)
  new(filename).load_settings
end
new(config_filename = nil) click to toggle source
# File lib/active_setting/loader.rb, line 30
def initialize(config_filename = nil)
  @config_filename = config_filename
end
register_external_setting(name, attrs) click to toggle source
# File lib/active_setting/loader.rb, line 24
def register_external_setting(name, attrs)
  category ||= external_settings[attrs.fetch(:category, 'External')] ||= {}
  category[name] = attrs.map.with_object({}) { |(k,v), hash| hash[k.to_s] = v }
end

Public Instance Methods

build_hash() click to toggle source
# File lib/active_setting/loader.rb, line 52
def build_hash
  settings_config.map.with_object({}) do |(category_name, settings), hash|
    settings.each do |setting_name, values|
      values ||= {}
      attrs = values.merge(
        data_type: values['type'],
        category:  category_name,
        name:      setting_name.to_sym
      )
      hash[setting_name.to_sym] = Setting.new(attrs)
    end
  end
end
config_filename() click to toggle source
# File lib/active_setting/loader.rb, line 34
def config_filename
  @config_filename || self.class.config_filename
end
load_settings() click to toggle source
# File lib/active_setting/loader.rb, line 38
def load_settings
  settings_config.each do |category_name, settings|
    settings.each do |setting_name, values|
      values ||= {}
      attrs = values.merge(
        data_type: values['type'],
        category:  category_name,
        name:      setting_name
      )
      Setting.register(setting_name.to_sym, attrs)
    end
  end
end

Private Instance Methods

external_settings() click to toggle source
# File lib/active_setting/loader.rb, line 72
def external_settings
  self.class.external_settings
end
settings_config() click to toggle source
# File lib/active_setting/loader.rb, line 68
def settings_config
  @settings_config ||= settings_from_file.merge(external_settings)
end
settings_from_file() click to toggle source
# File lib/active_setting/loader.rb, line 76
def settings_from_file
  return @settings_from_file unless @settings_from_file.nil?

  unless File.exist? config_filename
    fail ArgumentError, "#{config_filename} is required for settings"
  end
  yaml = YAML.load(File.read(config_filename))
  @settings_from_file = yaml.fetch('settings')
end