* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Fxp\Composer\AssetPlugin\Installer; use Composer\Composer; use Composer\Package\PackageInterface; /** * Factory of ignore manager patterns. * * @author François Pluchino */ class IgnoreFactory { /** * Create a ignore manager. * * @param Composer $composer The composer instance * @param PackageInterface $package The package instance * @param string|null $installDir The custom installation directory * @param string|null $section The extra section of ignore patterns * * @return IgnoreManager */ public static function create(Composer $composer, PackageInterface $package, $installDir = null, $section = 'asset-ignore-files') { $installDir = static::getInstallDir($composer, $package, $installDir); $manager = new IgnoreManager($installDir); $extra = $composer->getPackage()->getExtra(); if (isset($extra[$section])) { foreach ($extra[$section] as $packageName => $patterns) { if ($packageName === $package->getName()) { static::addPatterns($manager, $patterns); break; } } } return $manager; } /** * Get the installation directory of the package. * * @param Composer $composer The composer instance * @param PackageInterface $package The package instance * @param string|null $installDir The custom installation directory * * @return string The installation directory */ protected static function getInstallDir(Composer $composer, PackageInterface $package, $installDir = null) { if (null === $installDir) { $installDir = rtrim($composer->getConfig()->get('vendor-dir'), '/').'/'.$package->getName(); } return rtrim($installDir, '/'); } /** * Add ignore file patterns in the ignore manager. * * @param IgnoreManager $manager The ignore files manager * @param bool|array $patterns The patterns for ignore files */ protected static function addPatterns(IgnoreManager $manager, $patterns) { $enabled = false === $patterns ? false : true; $manager->setEnabled($enabled); if (is_array($patterns)) { foreach ($patterns as $pattern) { $manager->addPattern($pattern); } } } }