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