Mega Code Archive

 
Categories / Ruby / Reflection
 

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)