oop/method_removed_hook.rb
tests/_examples/oop/method_removed_hook.rb in the metorex repository.
$events = []
Tracked = Module.new do
def self.method_removed name
$events << [:removed, name]
end
def self.method_undefined name
$events << [:undefined, name]
end
def doomed
end
def shadowed
end
remove_method :doomed
undef_method :shadowed
end
puts $events.inspect
puts Tracked.instance_methods(false).inspect
puts Module.new.method_removed(:anything).inspect
puts Module.private_instance_methods.include?(:method_removed).inspect
frozen = Module.new
frozen.freeze
begin
frozen.alias_method :a, :b
rescue FrozenError => error
puts error.message
end
Output:
[[:removed, :doomed], [:undefined, :shadowed]]
[]
nil
true
can't modify frozen Module: