class Animal def method_missing(method, *args, &block) say, speak = method.to_s.split("_") if say == "say" && speak returnspeak.upcaseifargs.first== "shout" speak else super end end end => Animal.new.say_moo => "moo" => Animal.new.say_moo("shout") => "MOO"