class NiftySettings::Settings

Public Class Methods

default() click to toggle source
# File lib/nifty_settings/settings.rb, line 97
def default
  @@default ||= self.new(self.load)
end
env() click to toggle source
# File lib/nifty_settings/settings.rb, line 120
def env
  @env ||= defined?(Rails) ? Rails.env : ENV['RACK_ENV']
end
load() click to toggle source
# File lib/nifty_settings/settings.rb, line 71
def load
  files = []

  settings_file = NiftySettings.configuration.settings_file || self.root.join('config', 'settings.yml')
  if File.file?(settings_file)
    files << settings_file
  end

  settings_dir = NiftySettings.configuration.settings_dir || self.root.join('config', 'settings')
  if File.directory?(settings_dir)
    files.concat Dir[File.join(settings_dir, '*.yml')]
  end

  return {} if files.empty?

  files.inject({}) do |hash, file|
    contents = File.read(file)
    contents = ERB.new(contents).result
    contents = YAML.load(contents) || {}
    if env
      contents = (contents['default'] || {}).deep_merge(contents[env] || {})
    end
    hash.deep_merge contents
  end
end
method_missing(name, *args, &block) click to toggle source
# File lib/nifty_settings/settings.rb, line 108
def method_missing(name, *args, &block)
  default.send(name, *args, &block)
end
new(hash = {}) click to toggle source
# File lib/nifty_settings/settings.rb, line 7
def initialize(hash = {})
  @hash = Hash.new { |h, k| h[k] = self.class.new }
  hash.each_pair { |k, v| self[k] = v }
end
reset!() click to toggle source
# File lib/nifty_settings/settings.rb, line 101
def reset!
  @@default = nil
  default # Force us to reload the settings
  # If a setup block is defined, call it post configuration.
  true
end
respond_to?(name, include_all = false) click to toggle source
# File lib/nifty_settings/settings.rb, line 112
def respond_to?(name, include_all = false)
  true
end
root() click to toggle source
# File lib/nifty_settings/settings.rb, line 116
def root
  @root ||= defined?(Rails) ? Rails.root : Pathname.new(File.expand_path('.'))
end

Public Instance Methods

==(other) click to toggle source
# File lib/nifty_settings/settings.rb, line 12
def ==(other)
  self.to_s == other.to_s
end
[](k) click to toggle source
# File lib/nifty_settings/settings.rb, line 39
def [](k)
  @hash[k.to_sym]
end
[]=(k, v) click to toggle source
# File lib/nifty_settings/settings.rb, line 35
def []=(k, v)
  @hash[k.to_sym] = normalize_attr(v)
end
empty?() click to toggle source
# File lib/nifty_settings/settings.rb, line 51
def empty?
  @hash.empty?
end
Also aliased as: nil?
fetch(key, default = nil) click to toggle source
# File lib/nifty_settings/settings.rb, line 47
def fetch(key, default = nil)
  has?(key) ? self[key] : default
end
has?(key) click to toggle source
# File lib/nifty_settings/settings.rb, line 43
def has?(key)
  @hash.has_key?(key.to_sym)
end
method_missing(name, *args, &block) click to toggle source
# File lib/nifty_settings/settings.rb, line 56
def method_missing(name, *args, &block)
  name = name.to_s
  key, modifier = name[0..-2], name[-1, 1]
  case
  when modifier == '=' then self.send(:[]=, key, *args)
  when self.has?(name) then self[name]
  when modifier == '?' then self.has?(key)
  end
end
nil?()
Alias for: empty?
respond_to?(name, include_all = false) click to toggle source
# File lib/nifty_settings/settings.rb, line 66
def respond_to?(name, include_all = false)
  true
end
to_a()
Alias for: to_ary
to_ary() click to toggle source
# File lib/nifty_settings/settings.rb, line 21
def to_ary
  self.to_hash.values
end
Also aliased as: to_a
to_h()
Alias for: to_hash
to_hash() click to toggle source
# File lib/nifty_settings/settings.rb, line 16
def to_hash
  unpack_attr @hash
end
Also aliased as: to_h
to_s()
Alias for: to_str
to_str() click to toggle source
# File lib/nifty_settings/settings.rb, line 26
def to_str
  if self.nil?
    nil
  else
    self.to_hash
  end.to_s
end
Also aliased as: to_s

Private Instance Methods

normalize_attr(value) click to toggle source
# File lib/nifty_settings/settings.rb, line 127
def normalize_attr(value)
  case value
  when Hash
    self.class.new(value)
  when Array
    value.map { |v| normalize_attr(v) }
  else
    value
  end
end
unpack_attr(value) click to toggle source
# File lib/nifty_settings/settings.rb, line 138
def unpack_attr(value)
  case value
  when self.class
    value.to_hash
  when Hash
    Hash.new.tap do |h|
      value.each_pair { |k, v| h[k] = unpack_attr(v) }
    end
  when Array
    value.map { |v| unpack_attr(v) }
  else
    value
  end
end