Override method_missing method to provide meaningful error message : method_missing « Reflection « Ruby






Override method_missing method to provide meaningful error message


class Fixnum
  def method_missing(m, *args)
    if args.size > 0
      raise ArgumentError.new("wrong number of arguments (#{args.size} for 0)")
    end

    match = /^plus_([0-9]+)$/.match(m.to_s)
    if match
      self + match.captures[0].to_i
    else
      raise NoMethodError.
    new("undefined method '#{m}' for #{inspect}:#{self.class}")
    end
  end
end

4.plus_5                                          # => 9
10.plus_0                                         # => 10
-1.plus_2                                         # => 1
100.plus_10000                                    # => 10100
20.send(:plus_25)                                 # => 45

100.minus_3
# NoMethodError: undefined method 'minus_3' for 100:Fixnum
100.plus_5(105)
# ArgumentError: wrong number of arguments (1 for 0)

 








Related examples in the same category

1.Convert all system command to all class method
2.Responding to Calls to Undefined Methods
3.Create a new class and override the method_missing method
4.If method does not exist, call the default one
5.Create new method dynamically