oop/method_removed_hook_parens.rb

tests/_examples/oop/method_removed_hook_parens.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: