oop/private_constant_parens.rb

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

class Holder
  VISIBLE = :visible
  HIDDEN = :hidden
  ALSO_HIDDEN = :also_hidden

  private_constant(:HIDDEN, "ALSO_HIDDEN")

  def self.reach_hidden
    HIDDEN
  end
end

class Heir < Holder
end

puts(Holder::VISIBLE.inspect)
puts(Holder.reach_hidden.inspect)

begin
  Holder::HIDDEN
rescue NameError
  puts "HIDDEN is private"
end

begin
  Holder::ALSO_HIDDEN
rescue NameError
  puts "ALSO_HIDDEN is private"
end

begin
  Heir.send(:private_constant, :VISIBLE)
rescue NameError
  puts "NameError for an inherited constant"
end

begin
  Holder.send(:private_constant, :ABSENT)
rescue NameError
  puts "NameError for a missing constant"
end

Holder.send(:public_constant, :HIDDEN)
puts(Holder::HIDDEN.inspect)

Output:

:visible
:hidden
HIDDEN is private
ALSO_HIDDEN is private
NameError for an inherited constant
NameError for a missing constant
:hidden