oop/instance_methods_visibility_parens.rb

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