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
|