Method: Mobj::HashEx#method_missing

Defined in:
lib/ext/hash.rb

#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