[](key, default = nil)
click to toggle source
Calls superclass method
def [](key, default = nil)
store(key.to_sym, Hashr.new(default)) if default && !key?(key)
super(key.to_sym)
end
[]=(key, value)
click to toggle source
Calls superclass method
def []=(key, value)
super(key.to_sym, value.is_a?(Hash) ? self.class.new(value, {}) : value)
end
include_accessors(accessors)
click to toggle source
def include_accessors(accessors)
Array(accessors).each { |accessor| meta_class.send(:define_method, accessor) { self[accessor] } } if accessors
end
include_modules(modules)
click to toggle source
def include_modules(modules)
Array(modules).each { |mod| meta_class.send(:include, mod) } if modules
end
method_missing(name, *args, &block)
click to toggle source
def method_missing(name, *args, &block)
case name.to_s[-1, 1]
when '?'
!!self[name.to_s[0..-2].to_sym]
when '='
self[name.to_s[0..-2].to_sym] = args.first
else
raise(IndexError.new("Key #{name.inspect} is not defined.")) if !key?(name) && self.class.raise_missing_keys
self[name]
end
end
respond_to?(*args)
click to toggle source
def respond_to?(*args)
true
end
set(path, value, stack = [])
click to toggle source
def set(path, value, stack = [])
tokens = path.to_s.split('.')
tokens.size == 1 ? self[path] = value : self[tokens.shift, Hashr.new].set(tokens.join('.'), value, stack)
end
to_hash()
click to toggle source
def to_hash
inject({}) do |hash, (key, value)|
hash[key] = value.is_a?(Hashr) ? value.to_hash : value
hash
end
end