While playing a bit with Ruby, I wrote the following code:
class A
end
A.singleton_class.instance_eval do
undef_method :new
end
# or
# class << B
# undef_method :new
# end
A.new
> NoMethodError: undefined method `new' for A:Class
> from (irb):8
> from /home/mmsequeira/.rvm/rubies/ruby-1.9.3-p327/bin/irb:16:in `<main>'
This is cool. But how can I know which methods have been undefined in a given class?
You can’t by default. Undefining a method removes it from existence. You could, however, record them as they’re removed. This can be done with method hooks to capture everything and avoid ugly alias method chaining:
This will capture methods undefined via
undef_methodorundef:Of course, you must include the hook methods in Module before anything can be captured.