Sha256: be87869ecf0d30d9fe893301a30e840c7e2bfc9246e2f1e194a497256073976e

Contents?: true

Size: 1.57 KB

Versions: 4

Compression:

Stored size: 1.57 KB

Contents

# Copyright: Copyright (c) 2004  Nicolas Despres. All rights reserved.
# Author: Nicolas Despres  <polrop@lrde.epita.fr>.
# 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


Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
ttk-0.1.576 ruby_ex/module/instance_method_visibility.rb
ttk-0.1.579 ruby_ex/module/instance_method_visibility.rb
ttk-0.1.580 ruby_ex/module/instance_method_visibility.rb
vcs-0.2.148 ruby_ex/module/instance_method_visibility.rb