Class: Settingslogic

Inherits:
Hash
  • Object
show all
Defined in:
lib/settingslogic.rb

Overview

A simple settings solution using a YAML file. See README for more information.

Defined Under Namespace

Classes: UndefinedSetting

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash_or_file = self.class.source) ⇒ Settingslogic

Initializes a new settings object. You can initialize an object in any of the following ways:

Settings.new(:application) # will look for config/application.yml
Settings.new("application.yaml") # will look for application.yaml
Settings.new("/var/configs/application.yml") # will look for /var/configs/application.yml
Settings.new(:config1 => 1, :config2 => 2)

Basically if you pass a symbol it will look for that file in the configs directory of your rails app, if you are using this in rails. If you pass a string it should be an absolute path to your settings file. Then you can pass a hash, and it just allows you to access the hash via methods.



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/settingslogic.rb', line 48

def initialize(hash_or_file = self.class.source)
  case hash_or_file
  when Hash
    self.update hash_or_file
  else
    hash = YAML.load(ERB.new(File.read(hash_or_file)).result).to_hash
    hash = hash[self.class.namespace] if self.class.namespace
    self.update hash
  end
  
  define_settings!
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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

Raises:



62
63
64
# File 'lib/settingslogic.rb', line 62

def method_missing(name, *args, &block)
  raise UndefinedSetting.new("The '#{name}' was not found in your configuration file: #{self.class.source}")
end

Class Method Details

.nameObject

:nodoc:



9
10
11
# File 'lib/settingslogic.rb', line 9

def name # :nodoc:
  instance.key?("name") ? instance.name : super
end

.namespace(value = nil) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/settingslogic.rb', line 21

def namespace(value = nil)
  if value.nil?
    @namespace
  else
    @namespace = value
  end
end

.source(value = nil) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/settingslogic.rb', line 13

def source(value = nil)
  if value.nil?
    @source
  else
    @source = value
  end
end