oop/remove_method.rb

tests/_examples/oop/remove_method.rb in the metorex repository.

class Parent
  def inherited_method
    :parent
  end
end

class Child < Parent
  def first
    :first
  end
  def second
    :second
  end
end

puts Child.send(:remove_method, :first, :second).inspect
puts Child.instance_methods(false).inspect
puts Child.new.inherited_method.inspect

begin
  Child.send(:remove_method, :inherited_method)
rescue NameError
  puts "inherited: NameError"
end

begin
  Child.send(:remove_method, :never_defined)
rescue NameError
  puts "missing: NameError"
end

puts Child.send(:remove_method).inspect

frozen = Module.new do
  def doomed
  end
end
frozen.freeze

begin
  frozen.send(:remove_method, :doomed)
rescue FrozenError
  puts "frozen: FrozenError"
end

puts (frozen.send(:remove_method) == frozen).inspect
puts Module.instance_method(:remove_method).arity.inspect
puts Module.public_instance_methods.include?(:remove_method).inspect

Output:

Child
[]
:parent
inherited: NameError
missing: NameError
Child
frozen: FrozenError
true
-1
true