1
0
Fork 0

Refactor based on code review

- Move the version api getter to the PluginManager And make it such that it can be mocked, but not pollute the public interface. That means "protected" visibility.
- The plugin api version constant should still be used throughout the code.
- Use different fixtures class names
- Use regex possessive quantifiers for performance
- Use full words for readability
pull/4089/head
nevvermind 2015-06-02 17:39:02 +01:00
parent eb2aa14830
commit 3032f0a538
12 changed files with 33 additions and 61 deletions

View File

@ -341,14 +341,4 @@ class Config
return false;
}
/**
* Returns the version of the internal composer-plugin-api package.
*
* @return string
*/
public function getPluginApiVersion()
{
return PluginInterface::PLUGIN_API_VERSION;
}
}

View File

@ -246,7 +246,7 @@ class VersionParser
private function isOldStylePluginApiVersion($requiredPluginApiVersion)
{
// catch "1.0", "1.0.0", "1.0.0.0" etc.
return (bool) preg_match('#^1(\.0)+$#', trim($requiredPluginApiVersion));
return (bool) preg_match('#^1(\.0)++$#', trim($requiredPluginApiVersion));
}
/**

View File

@ -26,7 +26,6 @@ interface PluginInterface
* Version number of the fake composer-plugin-api package
*
* @var string
* @deprecated Use \Composer\Config::getPluginApiVersion() instead.
*/
const PLUGIN_API_VERSION = '1.0.0';

View File

@ -130,10 +130,11 @@ class PluginManager
throw new \RuntimeException("Plugin ".$package->getName()." is missing a require statement for a version of the composer-plugin-api package.");
}
$currPluginApiVersion = $this->composer->getConfig()->getPluginApiVersion();
$currPluginApiConstraint = new VersionConstraint('==', $this->versionParser->normalize($currPluginApiVersion));
if (!$requiresComposer->matches($currPluginApiConstraint)) {
$this->io->writeError('<warning>The "' . $package->getName() . '" plugin was skipped because it requires a Plugin API version ("' . $requiresComposer->getPrettyString() . '") that does not match your Composer installation ("' . $currPluginApiVersion . '"). You may need to run composer update with the "--no-plugins" option.</warning>');
$currentPluginApiVersion = $this->getPluginApiVersion();
$currentPluginApiConstraint = new VersionConstraint('==', $this->versionParser->normalize($currentPluginApiVersion));
if (!$requiresComposer->matches($currentPluginApiConstraint)) {
$this->io->writeError('<warning>The "' . $package->getName() . '" plugin was skipped because it requires a Plugin API version ("' . $requiresComposer->getPrettyString() . '") that does not match your Composer installation ("' . $currentPluginApiVersion . '"). You may need to run composer update with the "--no-plugins" option.</warning>');
continue;
}
@ -276,4 +277,14 @@ class PluginManager
return $this->globalComposer->getInstallationManager()->getInstallPath($package);
}
/**
* Returns the version of the internal composer-plugin-api package.
*
* @return string
*/
protected function getPluginApiVersion()
{
return PluginInterface::PLUGIN_API_VERSION;
}
}

View File

@ -34,11 +34,6 @@ class PlatformRepository extends ArrayRepository
*/
private $overrides;
/**
* @var Config
*/
private $config;
public function __construct(array $packages = array(), array $overrides = array())
{
parent::__construct($packages);
@ -68,7 +63,7 @@ class PlatformRepository extends ArrayRepository
parent::addPackage($package);
}
$prettyVersion = $this->getConfig()->getPluginApiVersion();
$prettyVersion = PluginInterface::PLUGIN_API_VERSION;
$version = $versionParser->normalize($prettyVersion);
$composerPluginApi = new CompletePackage('composer-plugin-api', $version, $prettyVersion);
$composerPluginApi->setDescription('The Composer Plugin API');
@ -216,23 +211,4 @@ class PlatformRepository extends ArrayRepository
{
return 'ext-' . str_replace(' ', '-', $name);
}
/**
* @param Config $config
*/
public function setConfig(Config $config)
{
$this->config = $config;
}
/**
* @return Config
*/
public function getConfig()
{
if (!$this->config) {
$this->config = new Config;
}
return $this->config;
}
}

View File

@ -6,7 +6,7 @@ use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
class Plugin implements PluginInterface
class Plugin5 implements PluginInterface
{
public function activate(Composer $composer, IOInterface $io)
{

View File

@ -4,7 +4,7 @@
"type": "composer-plugin",
"autoload": { "psr-0": { "Installer": "" } },
"extra": {
"class": "Installer\\Plugin"
"class": "Installer\\Plugin5"
},
"require": {
"composer-plugin-api": "*"

View File

@ -6,7 +6,7 @@ use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
class Plugin implements PluginInterface
class Plugin6 implements PluginInterface
{
public function activate(Composer $composer, IOInterface $io)
{

View File

@ -1,10 +1,10 @@
{
"name": "plugin-v5",
"name": "plugin-v6",
"version": "1.0.0",
"type": "composer-plugin",
"autoload": { "psr-0": { "Installer": "" } },
"extra": {
"class": "Installer\\Plugin"
"class": "Installer\\Plugin6"
},
"require": {
"composer-plugin-api": "~1.2"

View File

@ -6,7 +6,7 @@ use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
class Plugin implements PluginInterface
class Plugin7 implements PluginInterface
{
public function activate(Composer $composer, IOInterface $io)
{

View File

@ -1,10 +1,10 @@
{
"name": "plugin-v5",
"name": "plugin-v7",
"version": "1.0.0",
"type": "composer-plugin",
"autoload": { "psr-0": { "Installer": "" } },
"extra": {
"class": "Installer\\Plugin"
"class": "Installer\\Plugin7"
},
"require": {
"composer-plugin-api": ">=3.0.0 <5.5"

View File

@ -222,19 +222,15 @@ class PluginInstallerTest extends TestCase
private function setPluginApiVersionWithPlugins($newPluginApiVersion, array $plugins = array())
{
// reset the plugin manager's installed plugins
$this->pm = new PluginManager($this->io, $this->composer);
$this->pm = $this->getMockBuilder('Composer\Plugin\PluginManager')
->setMethods(array('getPluginApiVersion'))
->setConstructorArgs(array($this->io, $this->composer))
->getMock();
/** @var \PHPUnit_Framework_MockObject_MockObject $config */
$config = $this->getMock('Composer\Config', array('getPluginApiVersion'));
// mock Config to return whatever Plugin API version we wish
$config->expects($this->any())
->method('getPluginApiVersion')
->will($this->returnValue($newPluginApiVersion));
// transfer the defaults in our Config mock and set it
$config->merge($this->composer->getConfig()->raw());
$this->composer->setConfig($config);
// mock the Plugin API version
$this->pm->expects($this->any())
->method('getPluginApiVersion')
->will($this->returnValue($newPluginApiVersion));
$plugApiInternalPackage = $this->getPackage(
'composer-plugin-api',