hoaproject / Protocol

The Hoa\Protocol library.
https://hoa-project.net/
308 stars 25 forks source link

WITH_COMPOSER constant: Make a difference between "downloaded with composer" and "autoloaded with composer" #12

Open ulk200 opened 8 years ago

ulk200 commented 8 years ago

This is related to https://github.com/hoaproject/Ruler/issues/86 I'm using the Hoa/Ruler library that i downloded with composer, but i'm using a third party autoloader. When hoa://Library/Ruler/Grammar.pp gets loaded the \Hoa\Protocol\Node\Library object calls its parent in the reach function because the WITH_COMPOSER contant is false. effectivly looking into directories in a camelcase name format. But since i used composer to download the files, Grammar.pp is not found (my directories are not camelcase) I solved this by forcing WITH_COMPOSER to true, this constant is based on wether the Composer\Autoload\ClassLoader class exists or not. It may be preferable to make a distinction between "downloaded with composer" (which sets a specific directory structure) from the "autoloaded_with_composer" (which imply the class present at runtime). Then hoa://Library/Ruler/Grammar.pp should rely on the "downloaded with composer" constant to call its parent or not. Thank you.

Hywan commented 8 years ago

Hello :-),

Is there a way to detect whether files/resources have been installed with Composer? I guess no 😢.

ulk200 commented 8 years ago

Maybe you could test if the containing directory is named "Hoa" vs "hoa" ? I'm no composer expert but maybe you can tell composer (in the install phase) to generate an additionnal file ? Or to trigger a hook in the sources it just downloded ?

Hywan commented 8 years ago

The issue is when you are working with a FS that is can insensitive, like the default one on Mac OS X. is_dir('Hoa') === is_dir('hoa') if one of them exists.