# Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved. # Author: Nicolas Despres . # License: Gnu General Public License. # $LastChangedBy: polrop $ # $Id: instance_method_visibility.rb 143 2005-01-30 14:06:43Z polrop $ class Module def instance_method_visibility(name) if private_method_defined?(name) :private elsif protected_method_defined?(name) :protected elsif public_method_defined?(name) :public else raise(NoMethodError, "`#{name}' - not an instance method of `#{self.name}'") end end end # class Module if (not defined? INSTANCE_METHOD_VISIBILITY_TESTED) and (defined? TEST_MODE or __FILE__ == $0) INSTANCE_METHOD_VISIBILITY_TESTED = true require 'test/unit/ui/console/testrunner' class InstanceMethodVisibilityTest < Test::Unit::TestCase class A def pub; end def pri; end def pro; end public :pub private :pri protected :pro end # class A def test_simple assert_equal(:public, A.instance_method_visibility('pub')) assert_equal(:private, A.instance_method_visibility('pri')) assert_equal(:protected, A.instance_method_visibility('pro')) assert_raises(NoMethodError) { A.instance_method_visibility('new') } end class AA def f; end end class BB < AA private :f end def test_inheritance assert_equal(:public, AA.instance_method_visibility('f')) assert(! BB.public_method_defined?('f')) assert_equal(:private, BB.instance_method_visibility('f')) end end # class InstanceMethodVisibilityTest end