Bug #5657
closedConstants in included modules aren't visible when defining classes with Class.new
Description
I define two classes that include a module. One is defined with class
, one is defined with Class.new
. I expect both to be able to reference constants in the included module. The class
one can, but the Class.new
one can't. Reproducing code:
module X
module Y
end
end
class Class1
include X
def self.f
# Works: Y is printed
p Y
end
end
Class2 = Class.new do
include X
def self.f
# Fails: "uninitialized constant Y"
p Y
end
end
Class1.f
Class2.f
It works with 1.9.2:
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]
$ ruby bug.rb
X::Y
X::Y
but not 1.9.3-p0:
$ ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]
$ ruby bug.rb
X::Y
bug.rb:18:in f': uninitialized constant Y (NameError) from bug.rb:23:in
'
or 1.9.3-head:
$ ruby -v
ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0]
$ ruby bug.rb
X::Y
bug.rb:18:in f': uninitialized constant Y (NameError) from bug.rb:23:in
'
I discovered this because it RSpec specs when going to 1.9.3: https://github.com/rspec/rspec-core/issues/506