oop/private_constant.rb

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