Wrong autoload

Hi,

I have Parser::Typography::CharTypographer, in parser/typography/char_typographer.rb:


require File.expand_path("../base", __FILE__)

module Parser

module Typography

class CharTypographer < Base

...

Sometimes (not always) it inherits from Parser::Base as seen in debugger:


[34, 43] in /private/var/site/js-dev/lib/parser/node/tag.rb

=> 39:         typographer = Typography::CharTypographer.new

(byebug) Typography::CharTypographer.superclass

Parser::Base

How can this happen?!?

I explicitly include ‘base.rb’ from current directory in the first line!

P.S. Here’s the files layout : http://ilyakantor.ru/screen/2014-06-11_2229.png

Inheritance should happen from the first base, not the second one.

Hi Ilya,

This is not the appropriate mailing list for that, this one is only to discuss rails core features and bugs, but try to inherit from ::Base, instead of Base.

Hi,

The behavior feels like a bug that’s why I posted it here.

Kind of strange when I explicitly require base class and the inheritance still goes wrong.

I suspect it could be a combination of factors. This is something that
could explain what you see:

1. Parser::Typography::Base is autoloaded

2. Parser::Typography::CharTypographer is autoloaded

3. Files change and a new request comes

4. Parser::Base is autoloaded

5. Parser::Typography::CharTypographer is autoloaded

If that happened, it would explain why you see this mismatch only
sometimes, it would depend on whether 4 happened or not before getting to 5
and that would depend on the order of execution of a particular request.

Problem is "require". When 5 runs, require says it already loaded that file
so it passes. But if 1 happened Parser::Typography::Base would have been
removed after 3. If 4 happened Ruby is able to resolve "Base" to Parser::Base
and AS never gets a chance. If 4 didn't happen then AS autoloads
Parser::Typography::Base
because it goes first in the search. See where does the randomness may come
from?

That's a possible explanation and it wouldn't be a bug, please change the
require line with

    require_dependency 'parser/typography/base'

Xavier