const_missing on private constants

* variable.c (rb_const_search): call #const_missing method on
  private constants, as well as uninitialized constants.
  [Feature #14328]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-07-06 13:56:58 +00:00
parent 5e7167f8fb
commit 7387c08373
5 changed files with 39 additions and 3 deletions

View file

@ -1422,6 +1422,21 @@ class TestModule < Test::Unit::TestCase
RUBY
end
def test_private_constant_const_missing
c = Class.new
c.const_set(:FOO, "foo")
c.private_constant(:FOO)
class << c
attr_reader :const_missing_arg
def const_missing(name)
@const_missing_arg = name
name == :FOO ? const_get(:FOO) : super
end
end
assert_equal("foo", c::FOO)
assert_equal(:FOO, c.const_missing_arg)
end
class PrivateClass
end
private_constant :PrivateClass