Method: Oj::EasyHash#method_missing

Defined in:
lib/oj/easy_hash.rb

#method_missing(m, *args, &block) ⇒ Boolean

Handles requests for Hash values. Others cause an Exception to be raised.

Parameters:

  • m (Symbol|String)

    method symbol

Returns:

  • (Boolean)

    the value of the specified instance variable.

Raises:

  • (ArgumentError)

    if an argument is given. Zero arguments expected.

  • (NoMethodError)

    if the instance variable is not defined.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/oj/easy_hash.rb', line 33

def method_missing(m, *args, &block)
  if m.to_s.end_with?('=')
    raise ArgumentError.new("wrong number of arguments (#{args.size} for 1 with #{m}) to method #{m}") if args.nil? or 1 != args.length

    m = m[0..-2]
    return store(m.to_s, args[0]) if has_key?(m.to_s)
    return store(m.to_sym, args[0]) if has_key?(m.to_sym)

    return store(m, args[0])
  else
    raise ArgumentError.new("wrong number of arguments (#{args.size} for 0 with #{m}) to method #{m}") unless args.nil? or args.empty?
    return fetch(m, nil) if has_key?(m)
    return fetch(m.to_s, nil) if has_key?(m.to_s)
    return fetch(m.to_sym, nil) if has_key?(m.to_sym)
  end
  raise NoMethodError.new("undefined method #{m}", m)
end