oop/private_class_method.rb

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

class Parent
  def self.inherited_secret
    :secret
  end
  private_class_method :inherited_secret

  def self.first
    :first
  end
  def self.second
    :second
  end
end

class Child < Parent
end

Child.private_class_method :first, :second

begin
  Child.inherited_secret
rescue NoMethodError
  puts "inherited_secret hidden"
end

begin
  Child.first
rescue NoMethodError
  puts "first hidden"
end

begin
  Child.second
rescue NoMethodError
  puts "second hidden"
end

Child.public_class_method :first
puts Child.first.inspect

class Listed
  def self.only
    :only
  end
  private_class_method [:only]
end

begin
  Listed.only
rescue NoMethodError
  puts "only hidden"
end

begin
  Class.new do
    private_class_method :absent
  end
rescue NameError
  puts "NameError for a missing method"
end

class Instance
  def instance_level
  end
end

begin
  Instance.private_class_method :instance_level
rescue NameError
  puts "NameError for an instance method"
end

Output:

inherited_secret hidden
first hidden
second hidden
:first
only hidden
NameError for a missing method
NameError for an instance method