Module: Hash::EasyAccess
- Included in:
- LocalConf
- Defined in:
- lib/vex/base/hash/easy_access.rb
Defined Under Namespace
Modules: Etest
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/vex/base/hash/easy_access.rb', line 23
def method_missing(sym, *args, &block)
return super if block_given?
if args.length == 0 && sym.to_s =~ /^(.*)\?$/
!! EasyAccess.check(self, $1)
elsif args.length == 0
EasyAccess.fetch(self, sym)
elsif args.length == 1 && sym.to_s =~ /^(.*)\=$/
v = args.first
v = v.dup if v.is_a?(Hash)
EasyAccess.set(self, $1, v)
else
super
end
end
|
Class Method Details
.check(hash, key) ⇒ Object
54
55
56
|
# File 'lib/vex/base/hash/easy_access.rb', line 54
def self.check(hash, key)
check_key(hash, key.to_s) || check_key(hash, key.to_sym)
end
|
.check_key(hash, key) ⇒ Object
50
51
52
|
# File 'lib/vex/base/hash/easy_access.rb', line 50
def self.check_key(hash, key)
key if hash.key?(key)
end
|
.easy_access(obj) ⇒ Object
71
72
73
74
|
# File 'lib/vex/base/hash/easy_access.rb', line 71
def self.easy_access(obj)
obj.easy_access! if obj.is_a?(Hash)
obj
end
|
.extended(host) ⇒ Object
19
20
21
|
# File 'lib/vex/base/hash/easy_access.rb', line 19
def self.extended(host)
host.instance_variable_set "@easy_accessible", true
end
|
.fetch(hash, key) ⇒ Object
58
59
60
61
62
63
64
|
# File 'lib/vex/base/hash/easy_access.rb', line 58
def self.fetch(hash, key)
if !(k = check(hash, key))
raise NoMethodError, "undefined key `#{key}' for #{self.inspect}"
end
easy_access hash.fetch(k)
end
|
.set(hash, key, value) ⇒ Object
66
67
68
69
|
# File 'lib/vex/base/hash/easy_access.rb', line 66
def self.set(hash, key, value)
k = check(hash, key) || key
hash[k] = value
end
|
Instance Method Details
#respond_to?(sym) ⇒ Boolean
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/vex/base/hash/easy_access.rb', line 39
def respond_to?(sym)
key = case sym.to_s
when /^(.*)[=\?]$/
$1
else
sym.to_s
end
EasyAccess.check(self, key) || super
end
|