Module: Mobj::HashEx
- Defined in:
- lib/ext/hash.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/ext/hash.rb', line 54
def method_missing(name, *args, &block)
value = if name[-1] == '=' && args.size == 1
key = name[0...-1].sym
key = key.to_s if key?(key.to_s)
self[key] = args.sequester!
elsif name[-1] == '?'
key = name[0...-1].sym
!!self[key, key.to_s]
elsif name[-1] == '!'
key = name[0...-1].sym
val = self[key.sym] || self[key.to_s]
if !val && (block || args.unempty?)
self[key] = val = (block ? block.call(*args) : args.sequester!)
end
super unless val
else
self[name.sym] || self[name.to_s]
end
value ||= args.sequester! unless args.empty?
return block ? block[value] : value
end
|
Instance Method Details
#apply!(obj) ⇒ Object
14
15
16
17
18
|
# File 'lib/ext/hash.rb', line 14
def apply!(obj)
map do |key, value|
obj.send(key, *value)
end
end
|
77
78
79
|
# File 'lib/ext/hash.rb', line 77
def denil!
reject!{ |k, v| k.nil? || v.nil? }
end
|
#filled? ⇒ Boolean
Also known as:
notempty?, noempty?, full?, unempty?
7
|
# File 'lib/ext/hash.rb', line 7
def filled?() !mt? end
|
20
21
22
|
# File 'lib/ext/hash.rb', line 20
def ki(name)
name.to_s[/(.*?)[?!=]?$/, 1]
end
|
#ki?(name) ⇒ Boolean
24
25
26
|
# File 'lib/ext/hash.rb', line 24
def ki?(name)
[name.sym, name.to_s, ki(name).sym, ki(name).to_s].any? { |k| key?(k) }
end
|
#symvert(key_converter = :itself, value_converter = key_converter) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/ext/hash.rb', line 28
def symvert(key_converter = :itself, value_converter = key_converter)
each.with_object({}) do |(k, v), o|
key = if key_converter.p?
key_converter.call(k, v)
elsif k.respond_to?(key_converter.sym)
k.__send__(key_converter.sym)
else
k
end
value = if value_converter.p?
value_converter.arity == 1 ? value_converter.call(v) : value_converter.call(k, v)
elsif v.respond_to?(value_converter.sym)
v.__send__(value_converter.sym)
else
v
end
o[key] = value
end
end
|
#symvert!(key_converter = :itself, value_converter = key_converter) ⇒ Object
50
51
52
|
# File 'lib/ext/hash.rb', line 50
def symvert!(key_converter = :itself, value_converter = key_converter)
replace(symvert(key_converter, value_converter))
end
|