Issue #5657 has been reported by Gary Bernhardt.

----------------------------------------
Bug #5657: Constants in included modules aren't visible when defining classes with Class.new
http://redmine.ruby-lang.org/issues/5657

Author: Gary Bernhardt
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p0 (2011-11-08) [x86_64-darwin10.8.0]


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 `<main>'

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 `<main>'

I discovered this because it RSpec specs when going to 1.9.3: https://github.com/rspec/rspec-core/issues/506


-- 
http://redmine.ruby-lang.org