Rules for constant lookup

Can somebody point me to an accurate list of the rules for constant
lookup?

I’ve just been caught out by the following.

==> works.rb <==
module Foo
class Bar; end
class Baz
def initialize
@bar = Bar.new
end
end
end

Foo::Baz.new

==> broken.rb <==
module Foo
class Bar; end
end

class Foo::Baz
def initialize
@bar = Bar.new
end
end

Foo::Baz.new

In both cases there is a module Foo, a class Foo::Bar and a class
Foo::Baz. The only difference between the two is that one uses “module
Foo; class Baz” and the second uses “class Foo::Baz”

I thought the two were identical if module Foo already exists, but
clearly I was mistaken.

Regards,

Brian.