Added Capable plugins for a more future-proof Plugin API
Plugins can now present their capabilities to the PluginManager, through which it can act accordingly, thus making Plugin API more flexible, BC-friendly and decoupled.main
parent
7d7b3ccb2a
commit
2051d74774
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Plugin\Capability;
|
||||
|
||||
/**
|
||||
* Marker interface for Plugin capabilities.
|
||||
* Every new Capability which is added to the Plugin API must implement this interface.
|
||||
*
|
||||
* @api
|
||||
* @since Plugin API 1.1
|
||||
*/
|
||||
interface Capability
|
||||
{
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Plugin;
|
||||
|
||||
/**
|
||||
* Plugins which need to expose various implementations
|
||||
* of the Composer Plugin Capabilities must have their
|
||||
* declared Plugin class implementing this interface.
|
||||
*
|
||||
* @api
|
||||
* @since Plugin API 1.1
|
||||
*/
|
||||
interface Capable
|
||||
{
|
||||
/**
|
||||
* Method by which a Plugin announces its API implementations, through an array
|
||||
* with a special structure.
|
||||
*
|
||||
* The key must be a string, representing a fully qualified class/interface name
|
||||
* which Composer Plugin API exposes - named "API class".
|
||||
* The value must be a string as well, representing the fully qualified class name
|
||||
* of the API class - named "SPI class".
|
||||
*
|
||||
* Every SPI must implement their API class.
|
||||
*
|
||||
* Every SPI will be passed a single array parameter via their constructor.
|
||||
*
|
||||
* Example:
|
||||
* // API as key, SPI as value
|
||||
* return array(
|
||||
* 'Composer\Plugin\Capability\CommandProvider' => 'My\CommandProvider',
|
||||
* 'Composer\Plugin\Capability\Validator' => 'My\Validator',
|
||||
* );
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getCapabilities();
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Test\Plugin\Mock;
|
||||
|
||||
class Capability implements \Composer\Plugin\Capability\Capability
|
||||
{
|
||||
public $args;
|
||||
|
||||
public function __construct(array $args)
|
||||
{
|
||||
$this->args = $args;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Test\Plugin\Mock;
|
||||
|
||||
use Composer\Plugin\Capable;
|
||||
use Composer\Plugin\PluginInterface;
|
||||
|
||||
interface CapablePluginInterface extends PluginInterface, Capable
|
||||
{
|
||||
}
|
Loading…
Reference in New Issue