Class: NiftySettings::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/nifty_settings/settings.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}) ⇒ Settings

Returns a new instance of Settings.



7
8
9
10
# 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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



56
57
58
59
60
61
62
63
64
# 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

Class Method Details

.defaultObject



97
98
99
# File 'lib/nifty_settings/settings.rb', line 97

def default
  @@default ||= self.new(self.load)
end

.envObject



120
121
122
# File 'lib/nifty_settings/settings.rb', line 120

def env
  @env ||= defined?(Rails) ? Rails.env : ENV['RACK_ENV']
end

.loadObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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) ⇒ Object



108
109
110
# File 'lib/nifty_settings/settings.rb', line 108

def method_missing(name, *args, &block)
  default.send(name, *args, &block)
end

.reset!Object



101
102
103
104
105
106
# 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) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/nifty_settings/settings.rb', line 112

def respond_to?(name, include_all = false)
  true
end

.rootObject



116
117
118
# File 'lib/nifty_settings/settings.rb', line 116

def root
  @root ||= defined?(Rails) ? Rails.root : Pathname.new(File.expand_path('.'))
end

Instance Method Details

#==(other) ⇒ Object



12
13
14
# File 'lib/nifty_settings/settings.rb', line 12

def ==(other)
  self.to_s == other.to_s
end

#[](k) ⇒ Object



39
40
41
# File 'lib/nifty_settings/settings.rb', line 39

def [](k)
  @hash[k.to_sym]
end

#[]=(k, v) ⇒ Object



35
36
37
# File 'lib/nifty_settings/settings.rb', line 35

def []=(k, v)
  @hash[k.to_sym] = normalize_attr(v)
end

#empty?Boolean Also known as: nil?

Returns:

  • (Boolean)


51
52
53
# File 'lib/nifty_settings/settings.rb', line 51

def empty?
  @hash.empty?
end

#fetch(key, default = nil) ⇒ Object



47
48
49
# File 'lib/nifty_settings/settings.rb', line 47

def fetch(key, default = nil)
  has?(key) ? self[key] : default
end

#has?(key) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/nifty_settings/settings.rb', line 43

def has?(key)
  @hash.has_key?(key.to_sym)
end

#respond_to?(name, include_all = false) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/nifty_settings/settings.rb', line 66

def respond_to?(name, include_all = false)
  true
end

#to_aryObject Also known as: to_a



21
22
23
# File 'lib/nifty_settings/settings.rb', line 21

def to_ary
  self.to_hash.values
end

#to_hashObject Also known as: to_h



16
17
18
# File 'lib/nifty_settings/settings.rb', line 16

def to_hash
  unpack_attr @hash
end

#to_strObject Also known as: to_s



26
27
28
29
30
31
32
# File 'lib/nifty_settings/settings.rb', line 26

def to_str
  if self.nil?
    nil
  else
    self.to_hash
  end.to_s
end