Class: Hashr
- Inherits:
-
Hash
show all
- Defined in:
- lib/hashr.rb,
lib/hashr/version.rb,
lib/hashr/env_defaults.rb
Defined Under Namespace
Modules: EnvDefaults
Constant Summary
collapse
- TEMPLATE =
new
- VERSION =
'0.0.15'
Class Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Hash
#deep_merge, #deep_symbolize_keys, #except, #slice
Constructor Details
#initialize(data = {}, definition = self.class.definition, &block) ⇒ Hashr
Returns a new instance of Hashr.
38
39
40
41
42
|
# File 'lib/hashr.rb', line 38
def initialize(data = {}, definition = self.class.definition, &block)
replace((deep_hashrize(definition.deep_merge((data || {}).deep_symbolize_keys))))
deep_defaultize(self)
(class << self; self; end).class_eval(&block) if block_given?
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
65
66
|
# File 'lib/hashr.rb', line 56
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
|
Class Attribute Details
.raise_missing_keys ⇒ Object
Returns the value of attribute raise_missing_keys.
9
10
11
|
# File 'lib/hashr.rb', line 9
def raise_missing_keys
@raise_missing_keys
end
|
Class Method Details
.deep_accessorize(hash) ⇒ Object
27
28
29
30
31
32
33
34
35
|
# File 'lib/hashr.rb', line 27
def deep_accessorize(hash)
hash.each do |key, value|
next unless value.is_a?(Hash)
value[:_access] ||= []
value[:_access] = Array(value[:_access])
value.keys.each { |key| value[:_access] << key if value.respond_to?(key) }
deep_accessorize(value)
end
end
|
.default(defaults) ⇒ Object
19
20
21
|
# File 'lib/hashr.rb', line 19
def default(defaults)
@defaults = deep_accessorize(defaults)
end
|
.defaults ⇒ Object
23
24
25
|
# File 'lib/hashr.rb', line 23
def defaults
@defaults ||= {}
end
|
.define(definition) ⇒ Object
11
12
13
|
# File 'lib/hashr.rb', line 11
def define(definition)
@definition = deep_accessorize(definition.deep_symbolize_keys)
end
|
.definition ⇒ Object
15
16
17
|
# File 'lib/hashr.rb', line 15
def definition
@definition ||= {}
end
|
Instance Method Details
#[](key) ⇒ Object
44
45
46
|
# File 'lib/hashr.rb', line 44
def [](key)
super(key.to_sym)
end
|
#[]=(key, value) ⇒ Object
48
49
50
|
# File 'lib/hashr.rb', line 48
def []=(key, value)
super(key, value.is_a?(Hash) ? self.class.new(value, {}) : value)
end
|
#include_accessors(accessors) ⇒ Object
72
73
74
|
# File 'lib/hashr.rb', line 72
def include_accessors(accessors)
Array(accessors).each { |accessor| meta_class.send(:define_method, accessor) { self[accessor] } } if accessors
end
|
#include_modules(modules) ⇒ Object
68
69
70
|
# File 'lib/hashr.rb', line 68
def include_modules(modules)
Array(modules).each { |mod| meta_class.send(:include, mod) } if modules
end
|
76
77
78
|
# File 'lib/hashr.rb', line 76
def meta_class
class << self; self end
end
|
#respond_to?(name) ⇒ Boolean
52
53
54
|
# File 'lib/hashr.rb', line 52
def respond_to?(name)
true
end
|