Skip to content

Commit

Permalink
Split FxpAssetPlugin class
Browse files Browse the repository at this point in the history
  • Loading branch information
francoispluchino committed Oct 30, 2014
1 parent a875180 commit 5558353
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 79 deletions.
83 changes: 4 additions & 79 deletions FxpAssetPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,9 @@
use Composer\Repository\RepositoryInterface;
use Composer\Repository\RepositoryManager;
use Fxp\Composer\AssetPlugin\Event\VcsRepositoryEvent;
use Fxp\Composer\AssetPlugin\Installer\AssetInstaller;
use Fxp\Composer\AssetPlugin\Installer\BowerInstaller;
use Fxp\Composer\AssetPlugin\Repository\VcsPackageFilter;
use Fxp\Composer\AssetPlugin\Repository\Util;
use Fxp\Composer\AssetPlugin\Util\AssetPlugin;

/**
* Composer plugin.
Expand Down Expand Up @@ -86,14 +85,14 @@ public function activate(Composer $composer, IOInterface $io)
$extra = $composer->getPackage()->getExtra();
$rm = $composer->getRepositoryManager();

$this->addRegistryRepositories($rm, $extra);
$this->setVcsTypeRepositories($rm);
AssetPlugin::addRegistryRepositories($rm, $this->packageFilter, $extra);
AssetPlugin::setVcsTypeRepositories($rm);

if (isset($extra['asset-repositories']) && is_array($extra['asset-repositories'])) {
$this->addRepositories($rm, $extra['asset-repositories']);
}

$this->addInstallers($composer, $io);
AssetPlugin::addInstallers($composer, $io);
}

/**
Expand Down Expand Up @@ -131,44 +130,6 @@ public function onPreDependenciesSolving(InstallerEvent $event)
$this->pool = $event->getPool();
}

/**
* Adds asset registry repositories.
*
* @param RepositoryManager $rm
* @param array $extra
*/
protected function addRegistryRepositories(RepositoryManager $rm, array $extra)
{
$opts = array_key_exists('asset-registry-options', $extra)
? $extra['asset-registry-options']
: array();

foreach (Assets::getRegistries() as $assetType => $registryClass) {
$config = array(
'repository-manager' => $rm,
'vcs-package-filter' => $this->packageFilter,
'asset-options' => $this->crateAssetOptions($opts, $assetType),
);

$rm->setRepositoryClass($assetType, $registryClass);
$rm->addRepository($rm->createRepository($assetType, $config));
}
}

/**
* Sets vcs type repositories.
*
* @param RepositoryManager $rm
*/
protected function setVcsTypeRepositories(RepositoryManager $rm)
{
foreach (Assets::getTypes() as $assetType) {
foreach (Assets::getVcsRepositoryDrivers() as $driverType => $repositoryClass) {
$rm->setRepositoryClass($assetType . '-' . $driverType, $repositoryClass);
}
}
}

/**
* Adds asset vcs repositories.
*
Expand Down Expand Up @@ -265,40 +226,4 @@ protected function validateVcsRepositories($index, $repo)
throw new \UnexpectedValueException('Repository '.$index.' ('.json_encode($repo).') must have a url defined');
}
}

/**
* Creates the asset options.
*
* @param array $extra The composer extra section of asset options
* @param string $assetType The asset type
*
* @return array The asset registry options
*/
protected function crateAssetOptions(array $extra, $assetType)
{
$options = array();

foreach ($extra as $key => $value) {
if (0 === strpos($key, $assetType . '-')) {
$key = substr($key, strlen($assetType) + 1);
$options[$key] = $value;
}
}

return $options;
}

/**
* Adds asset installers.
*
* @param Composer $composer
* @param IOInterface $io
*/
protected function addInstallers(Composer $composer, IOInterface $io)
{
$im = $composer->getInstallationManager();

$im->addInstaller(new BowerInstaller($io, $composer, Assets::createType('bower')));
$im->addInstaller(new AssetInstaller($io, $composer, Assets::createType('npm')));
}
}
103 changes: 103 additions & 0 deletions Util/AssetPlugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php

/*
* This file is part of the Fxp Composer Asset Plugin package.
*
* (c) François Pluchino <francois.pluchino@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Fxp\Composer\AssetPlugin\Util;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Repository\RepositoryManager;
use Fxp\Composer\AssetPlugin\Assets;
use Fxp\Composer\AssetPlugin\Installer\AssetInstaller;
use Fxp\Composer\AssetPlugin\Installer\BowerInstaller;
use Fxp\Composer\AssetPlugin\Repository\VcsPackageFilter;

/**
* Helper for FxpAssetPlugin.
*
* @author François Pluchino <francois.pluchino@gmail.com>
*/
class AssetPlugin
{
/**
* Adds asset installers.
*
* @param Composer $composer
* @param IOInterface $io
*/
public static function addInstallers(Composer $composer, IOInterface $io)
{
$im = $composer->getInstallationManager();

$im->addInstaller(new BowerInstaller($io, $composer, Assets::createType('bower')));
$im->addInstaller(new AssetInstaller($io, $composer, Assets::createType('npm')));
}

/**
* Creates the asset options.
*
* @param array $extra The composer extra section of asset options
* @param string $assetType The asset type
*
* @return array The asset registry options
*/
public static function createAssetOptions(array $extra, $assetType)
{
$options = array();

foreach ($extra as $key => $value) {
if (0 === strpos($key, $assetType . '-')) {
$key = substr($key, strlen($assetType) + 1);
$options[$key] = $value;
}
}

return $options;
}

/**
* Adds asset registry repositories.
*
* @param RepositoryManager $rm
* @param VcsPackageFilter $filter
* @param array $extra
*/
public static function addRegistryRepositories(RepositoryManager $rm, VcsPackageFilter $filter, array $extra)
{
$opts = array_key_exists('asset-registry-options', $extra)
? $extra['asset-registry-options']
: array();

foreach (Assets::getRegistries() as $assetType => $registryClass) {
$config = array(
'repository-manager' => $rm,
'vcs-package-filter' => $filter,
'asset-options' => static::createAssetOptions($opts, $assetType),
);

$rm->setRepositoryClass($assetType, $registryClass);
$rm->addRepository($rm->createRepository($assetType, $config));
}
}

/**
* Sets vcs type repositories.
*
* @param RepositoryManager $rm
*/
public static function setVcsTypeRepositories(RepositoryManager $rm)
{
foreach (Assets::getTypes() as $assetType) {
foreach (Assets::getVcsRepositoryDrivers() as $driverType => $repositoryClass) {
$rm->setRepositoryClass($assetType . '-' . $driverType, $repositoryClass);
}
}
}
}

0 comments on commit 5558353

Please sign in to comment.