class Singlettings::Base
Attributes
ns[R]
source[R]
Public Class Methods
[](key)
click to toggle source
Override the hash method
# File lib/singlettings/base.rb, line 28 def [](key) value = current_branch.fetch key.to_s, nil if value.is_a? Hash self.new value else value end end
current_branch()
click to toggle source
# File lib/singlettings/base.rb, line 37 def current_branch source unless @source return @source unless @ns if @source[@ns] == nil raise NoSuchNamespaceError, "Source is empty. The namespace does not exist" else @source[@ns] end end
method_missing(method, *args, &block)
click to toggle source
# File lib/singlettings/base.rb, line 47 def method_missing(method, *args, &block) key = method.to_s if current_branch.keys.include? key value = current_branch[key] result = value.is_a?(Hash) ? self.new(value) : value self.instance_eval do define_singleton_method(key){ result } end result else raise NoSuchKeyError, "#{key} does not exist" end end
new(directory_or_hash, default_namespace= nil)
click to toggle source
# File lib/singlettings/base.rb, line 70 def initialize(directory_or_hash, default_namespace= nil) @ns = self.class.ns default_namespace raise FileNotSpecifiedError, "You should choose a file to initialize" unless directory_or_hash if directory_or_hash.is_a? Hash @source = directory_or_hash else @source = self.class.source directory_or_hash end self.replace current_branch eval_accessors end
ns(value = nil)
click to toggle source
Set the default namespace Basic Usage of ns in class: ns :development ns Rails.env
# File lib/singlettings/base.rb, line 23 def ns(value = nil) @ns = value.to_s if value end
respond_to_missing?(method, include_private = false)
click to toggle source
# File lib/singlettings/base.rb, line 64 def respond_to_missing?(method, include_private = false) current_branch.keys.include? method.to_s || (raise NoSuchKeyError, "#{method} does not exist") end
source(directory = nil)
click to toggle source
Basic Usage of source in class
source "config/setting.yml" source
# File lib/singlettings/base.rb, line 13 def source(directory = nil) filename = directory ? directory : "#{self.ancestors[0].to_s.downcase}.yml" @erb_content = ERB.new(File.read(filename)).result # Set it in memory @source = @erb_content ? YAML.load(@erb_content) : {} end
Public Instance Methods
[](key)
click to toggle source
# File lib/singlettings/base.rb, line 95 def [](key) value = current_branch.fetch key.to_s, nil if value.is_a? Hash self.class.new value else value end end
current_branch()
click to toggle source
# File lib/singlettings/base.rb, line 86 def current_branch return source unless ns if source[ns] == nil raise NoSuchNamespaceError, "Source is empty. The namespace does not exist" else source[ns] end end
eval_accessors()
click to toggle source
# File lib/singlettings/base.rb, line 104 def eval_accessors current_branch.keys.each do |key| value = current_branch[key] result = value.is_a?(Hash) ? self.class.new(value) : value self.instance_eval do define_singleton_method(key){ result } end end end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/singlettings/base.rb, line 114 def method_missing(method, *args, &block) (raise NoSuchKeyError, "#{method} does not exist") || super end