oop/instance_methods_visibility.rb

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

module Shared
  def from_module
  end
end

class Parent
  include Shared

  def public_parent
  end

  def retired
  end

  protected

  def protected_parent
  end

  private

  def private_parent
  end
end

class Parent
  undef_method :retired
end

class Child < Parent
  def public_child
  end
end

puts Parent.instance_methods(false).inspect
puts Parent.public_instance_methods(false).inspect
puts Parent.protected_instance_methods(false).inspect
puts Parent.private_instance_methods(false).inspect
puts Child.instance_methods(false).inspect
puts Child.instance_methods.include?(:from_module).inspect
puts Child.instance_methods.include?(:retired).inspect

class Caller
  def try_protected obj
    obj.protected_parent
  end
end

begin
  Parent.new.protected_parent
rescue NameError => error
  puts error.class
end

Output:

[:protected_parent, :public_parent]
[:public_parent]
[:protected_parent]
[:private_parent]
[:public_child]
true
false
NoMethodError