oop/method_defined_visibility.rb
tests/_examples/oop/method_defined_visibility.rb in the metorex repository.
module Mixin
def public_mixin
end
protected
def protected_mixin
end
private
def private_mixin
end
end
class Holder
include Mixin
def public_holder
end
private
def private_holder
end
end
class NameSource
def to_str
'public_mixin'
end
end
[:public_mixin, :protected_mixin, :private_mixin, :public_holder, :private_holder].each do |name|
puts "#{name} #{Holder.method_defined?(name)} #{Holder.public_method_defined?(name)} #{Holder.protected_method_defined?(name)} #{Holder.private_method_defined?(name)}"
end
puts Mixin.private_instance_methods(false).inspect
puts Mixin.protected_instance_methods(false).inspect
puts Holder.method_defined?(NameSource.new).inspect
puts Holder.method_defined?(:public_mixin, false).inspect
begin
Holder.method_defined?(42)
rescue TypeError => error
puts error.message
end
Output:
public_mixin true true false false
protected_mixin true false true false
private_mixin false false false true
public_holder true true false false
private_holder false false false true
[:private_mixin]
[:protected_mixin]
true
false
42 is not a symbol nor a string