Agreed. This was a bug in 1.9.2 probably caused by the (aborted) attempt to
change constant lookup rules in 1.9.

Yehuda Katz
(ph) 718.877.1325


On Mon, Nov 21, 2011 at 8:59 PM, Shugo Maeda <shugo / ruby-lang.org> wrote:

> It was a bug of 1.9.2 and fixed in 1.9.3.
>
>   http://redmine.ruby-lang.org/issues/4536 (in Japanese)
>
> Constants should be lookuped statically.
> The behaviour is the same as 1.8.
>
> 2011/11/22 11:37 "Gary Bernhardt" <gary.bernhardt / gmail.com>:
>
> >
> >
> > 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
> >
>
>