Merge pull request #307 from meadsteve/feature/pluginfactoryconfig
Allow configuration of the plugin factory on a per install basis
This commit is contained in:
commit
ff6dfefb98
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -9,4 +9,5 @@ config.php
|
|||
.htaccess
|
||||
PHPCI/config.yml
|
||||
cache
|
||||
/loggerconfig.php
|
||||
/loggerconfig.php
|
||||
/pluginconfig.php
|
|
@ -27,8 +27,7 @@ class Application extends b8\Application
|
|||
$opts = array('controller' => 'Home', 'action' => 'index');
|
||||
|
||||
$this->router->clearRoutes();
|
||||
$this->router->register($route, $opts, function (&$route, Response &$response) use (&$request)
|
||||
{
|
||||
$this->router->register($route, $opts, function (&$route, Response &$response) use (&$request) {
|
||||
$skipValidation = in_array($route['controller'], array('session', 'webhook', 'build-status'));
|
||||
|
||||
if (!$skipValidation && !$this->validateSession()) {
|
||||
|
|
|
@ -19,6 +19,7 @@ use b8\Store\Factory;
|
|||
use Psr\Log\LoggerAwareInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\LogLevel;
|
||||
use PHPCI\Plugin\Util\Factory as PluginFactory;
|
||||
|
||||
/**
|
||||
* PHPCI Build Runner
|
||||
|
@ -118,7 +119,9 @@ class Builder implements LoggerAwareInterface
|
|||
|
||||
$this->buildLogger = new BuildLogger($logger, $build);
|
||||
|
||||
$this->pluginExecutor = new Plugin\Util\Executor($this->buildPluginFactory($build), $this->buildLogger);
|
||||
$pluginFactory = $this->buildPluginFactory($build);
|
||||
$pluginFactory->addConfigFromFile(PHPCI_DIR . "/pluginconfig.php");
|
||||
$this->pluginExecutor = new Plugin\Util\Executor($pluginFactory, $this);
|
||||
|
||||
$this->commandExecutor = new CommandExecutor(
|
||||
$this->buildLogger,
|
||||
|
@ -197,8 +200,7 @@ class Builder implements LoggerAwareInterface
|
|||
// stages.
|
||||
if ($this->success) {
|
||||
$this->build->setStatus(Build::STATUS_SUCCESS);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->build->setStatus(Build::STATUS_FAILED);
|
||||
}
|
||||
|
||||
|
@ -208,8 +210,7 @@ class Builder implements LoggerAwareInterface
|
|||
if ($this->success) {
|
||||
$this->pluginExecutor->executePlugins($this->config, 'success');
|
||||
$this->buildLogger->logSuccess('BUILD SUCCESSFUL!');
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->pluginExecutor->executePlugins($this->config, 'failure');
|
||||
$this->buildLogger->logFailure("BUILD FAILURE");
|
||||
}
|
||||
|
@ -271,8 +272,8 @@ class Builder implements LoggerAwareInterface
|
|||
*/
|
||||
protected function setupBuild()
|
||||
{
|
||||
$buildId = 'project' . $this->build->getProject()->getId(
|
||||
) . '-build' . $this->build->getId();
|
||||
$buildId = 'project' . $this->build->getProject()->getId()
|
||||
. '-build' . $this->build->getId();
|
||||
$this->ciDir = dirname(dirname(__FILE__) . '/../') . '/';
|
||||
$this->buildPath = $this->ciDir . 'build/' . $buildId . '/';
|
||||
$this->build->currentBuildPath = $this->buildPath;
|
||||
|
@ -336,10 +337,15 @@ class Builder implements LoggerAwareInterface
|
|||
{
|
||||
$this->buildLogger->logFailure($message, $exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a configured instance of the plugin factory.
|
||||
*
|
||||
* @param Build $build
|
||||
* @return PluginFactory
|
||||
*/
|
||||
private function buildPluginFactory(Build $build)
|
||||
{
|
||||
$pluginFactory = new Plugin\Util\Factory();
|
||||
$pluginFactory = new PluginFactory();
|
||||
|
||||
$self = $this;
|
||||
$pluginFactory->registerResource(
|
||||
|
|
|
@ -46,7 +46,7 @@ class CreateAdminCommand extends Command
|
|||
if (empty($adminEmail)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$adminPass = $this->ask('Admin password: ');
|
||||
$adminName = $this->ask('Admin name: ');
|
||||
|
||||
|
@ -64,7 +64,7 @@ class CreateAdminCommand extends Command
|
|||
} catch (\Exception $ex) {
|
||||
print 'There was a problem creating your account. :(' . PHP_EOL;
|
||||
print $ex->getMessage();
|
||||
print PHP_EOL;
|
||||
print PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,16 @@ class DaemoniseCommand extends Command
|
|||
*/
|
||||
protected $output;
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*/
|
||||
protected $run;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $sleep;
|
||||
|
||||
/**
|
||||
* @param \Monolog\Logger $logger
|
||||
* @param string $name
|
||||
|
@ -67,14 +77,14 @@ class DaemoniseCommand extends Command
|
|||
$this->sleep = 0;
|
||||
$runner = new RunCommand($this->logger);
|
||||
|
||||
$in = new ArgvInput(array());
|
||||
$emptyInput = new ArgvInput(array());
|
||||
|
||||
while ($this->run) {
|
||||
|
||||
$buildCount = 0;
|
||||
|
||||
try {
|
||||
$buildCount = $runner->run($in, $output);
|
||||
$buildCount = $runner->run($emptyInput, $output);
|
||||
} catch (\Exception $e) {
|
||||
var_dump($e);
|
||||
}
|
||||
|
|
|
@ -80,7 +80,9 @@ class PollCommand extends Command
|
|||
$this->logger->info("Last commit to github for " . $project->getTitle() . " is " . $last_commit);
|
||||
|
||||
if ($project->getLastCommit() != $last_commit && $last_commit != "") {
|
||||
$this->logger->info("Last commit is different from database, adding new build for " . $project->getTitle());
|
||||
$this->logger->info(
|
||||
"Last commit is different from database, adding new build for " . $project->getTitle()
|
||||
);
|
||||
|
||||
$build = new Build();
|
||||
$build->setProjectId($project->getId());
|
||||
|
@ -101,4 +103,3 @@ class PollCommand extends Command
|
|||
$this->logger->addInfo("Finished processing builds");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ class BuildDBLogHandler extends AbstractProcessingHandler
|
|||
|
||||
protected $logValue;
|
||||
|
||||
function __construct(
|
||||
public function __construct(
|
||||
Build $build,
|
||||
$level = LogLevel::INFO,
|
||||
$bubble = true
|
||||
|
@ -35,4 +35,4 @@ class BuildDBLogHandler extends AbstractProcessingHandler
|
|||
$this->logValue .= $message . PHP_EOL;
|
||||
$this->build->setLog($this->logValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ class BuildLogger implements LoggerAwareInterface
|
|||
*/
|
||||
protected $build;
|
||||
|
||||
function __construct(LoggerInterface $logger = null, Build $build)
|
||||
public function __construct(LoggerInterface $logger, Build $build)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
$this->build = $build;
|
||||
|
@ -93,4 +93,4 @@ class BuildLogger implements LoggerAwareInterface
|
|||
{
|
||||
$this->logger = $logger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use PHPCI\Model\Build;
|
|||
|
||||
class LoggedBuildContextTidier
|
||||
{
|
||||
function __invoke()
|
||||
public function __invoke()
|
||||
{
|
||||
return $this->tidyLoggedBuildContext(func_get_arg(0));
|
||||
}
|
||||
|
@ -29,4 +29,4 @@ class LoggedBuildContextTidier
|
|||
}
|
||||
return $logRecord;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,9 +6,10 @@ namespace PHPCI\Logging;
|
|||
|
||||
use Monolog\Logger;
|
||||
|
||||
class LoggerConfig {
|
||||
class LoggerConfig
|
||||
{
|
||||
|
||||
const KEY_AlwaysLoaded = "_";
|
||||
const KEY_ALWAYS_LOADED = "_";
|
||||
|
||||
private $config;
|
||||
|
||||
|
@ -23,8 +24,7 @@ class LoggerConfig {
|
|||
{
|
||||
if (file_exists($filePath)) {
|
||||
$configArray = require($filePath);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$configArray = array();
|
||||
}
|
||||
return new self($configArray);
|
||||
|
@ -36,7 +36,8 @@ class LoggerConfig {
|
|||
* array of LogHandlers.
|
||||
* @param array $configArray
|
||||
*/
|
||||
function __construct(array $configArray = array()) {
|
||||
public function __construct(array $configArray = array())
|
||||
{
|
||||
$this->config = $configArray;
|
||||
}
|
||||
|
||||
|
@ -46,13 +47,15 @@ class LoggerConfig {
|
|||
* @param $name
|
||||
* @return Logger
|
||||
*/
|
||||
public function getFor($name) {
|
||||
$handlers = $this->getHandlers(self::KEY_AlwaysLoaded);
|
||||
public function getFor($name)
|
||||
{
|
||||
$handlers = $this->getHandlers(self::KEY_ALWAYS_LOADED);
|
||||
$handlers = array_merge($handlers, $this->getHandlers($name));
|
||||
return new Logger($name, $handlers);
|
||||
}
|
||||
|
||||
protected function getHandlers($key) {
|
||||
protected function getHandlers($key)
|
||||
{
|
||||
$handlers = array();
|
||||
|
||||
// They key is expected to either be an array or
|
||||
|
@ -60,12 +63,10 @@ class LoggerConfig {
|
|||
if (isset($this->config[$key])) {
|
||||
if (is_callable($this->config[$key])) {
|
||||
$handlers = call_user_func($this->config[$key]);
|
||||
}
|
||||
elseif(is_array($this->config[$key])) {
|
||||
} elseif (is_array($this->config[$key])) {
|
||||
$handlers = $this->config[$key];
|
||||
}
|
||||
}
|
||||
return $handlers;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ class OutputLogHandler extends AbstractProcessingHandler
|
|||
*/
|
||||
protected $output;
|
||||
|
||||
function __construct(
|
||||
public function __construct(
|
||||
OutputInterface $output,
|
||||
$level = LogLevel::INFO,
|
||||
$bubble = true
|
||||
|
@ -30,4 +30,4 @@ class OutputLogHandler extends AbstractProcessingHandler
|
|||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,4 +4,4 @@ namespace PHPCI;
|
|||
abstract class Model extends \b8\Model
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,13 +41,13 @@ class Email implements \PHPCI\Plugin
|
|||
*/
|
||||
protected $fromAddress;
|
||||
|
||||
public function __construct(Builder $phpci,
|
||||
Build $build,
|
||||
\Swift_Mailer $mailer,
|
||||
array $options = array()
|
||||
public function __construct(
|
||||
Builder $phpci,
|
||||
Build $build,
|
||||
\Swift_Mailer $mailer,
|
||||
array $options = array()
|
||||
|
||||
)
|
||||
{
|
||||
) {
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->options = $options;
|
||||
|
@ -168,14 +168,14 @@ class Email implements \PHPCI\Plugin
|
|||
|
||||
protected function getCcAddresses()
|
||||
{
|
||||
$cc = array();
|
||||
$ccAddresses = array();
|
||||
|
||||
if (isset($this->options['cc'])) {
|
||||
foreach ($this->options['cc'] as $address) {
|
||||
$cc[] = $address;
|
||||
$ccAddresses[] = $address;
|
||||
}
|
||||
}
|
||||
|
||||
return $cc;
|
||||
return $ccAddresses;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,8 +23,7 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
{
|
||||
if (file_exists($filePath)) {
|
||||
$installed = json_decode(file_get_contents($filePath));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$installed = array();
|
||||
}
|
||||
return new self($installed);
|
||||
|
@ -60,12 +59,12 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
*/
|
||||
public function getPluginClasses()
|
||||
{
|
||||
return array_map(
|
||||
function($plugin) {
|
||||
return $plugin->class;
|
||||
},
|
||||
$this->getInstalledPlugins()
|
||||
);
|
||||
return array_map(
|
||||
function ($plugin) {
|
||||
return $plugin->class;
|
||||
},
|
||||
$this->getInstalledPlugins()
|
||||
);
|
||||
}
|
||||
|
||||
protected function loadPluginInfo()
|
||||
|
@ -74,7 +73,7 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
return;
|
||||
}
|
||||
$this->pluginInfo = array();
|
||||
foreach($this->composerPackages as $package) {
|
||||
foreach ($this->composerPackages as $package) {
|
||||
$this->addPluginsFromPackage($package);
|
||||
}
|
||||
}
|
||||
|
@ -89,8 +88,7 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
|
||||
if (isset($phpciData->pluginNamespace)) {
|
||||
$rootNamespace = $phpciData->pluginNamespace;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$rootNamespace = "";
|
||||
}
|
||||
|
||||
|
@ -112,9 +110,9 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
protected function addPlugins(
|
||||
array $plugins,
|
||||
$sourcePackageName,
|
||||
$rootNamespace = "")
|
||||
{
|
||||
foreach($plugins as $plugin) {
|
||||
$rootNamespace = ""
|
||||
) {
|
||||
foreach ($plugins as $plugin) {
|
||||
if (!isset($plugin->class)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -130,8 +128,8 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
protected function addPlugin(
|
||||
$plugin,
|
||||
$sourcePackageName,
|
||||
$rootNamespace = "")
|
||||
{
|
||||
$rootNamespace = ""
|
||||
) {
|
||||
$newPlugin = clone $plugin;
|
||||
|
||||
$newPlugin->class = $rootNamespace . $newPlugin->class;
|
||||
|
@ -144,4 +142,4 @@ class ComposerPluginInformation implements InstalledPluginInformation
|
|||
|
||||
$this->pluginInfo[] = $newPlugin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ class Executor
|
|||
*/
|
||||
protected $pluginFactory;
|
||||
|
||||
function __construct(Factory $pluginFactory,BuildLogger $logger)
|
||||
public function __construct(Factory $pluginFactory, BuildLogger $logger)
|
||||
{
|
||||
$this->pluginFactory = $pluginFactory;
|
||||
$this->logger = $logger;
|
||||
|
@ -78,8 +78,7 @@ class Executor
|
|||
$class = str_replace('_', ' ', $plugin);
|
||||
$class = ucwords($class);
|
||||
$class = 'PHPCI\\Plugin\\' . str_replace(' ', '', $class);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$class = $plugin;
|
||||
}
|
||||
|
||||
|
@ -105,4 +104,4 @@ class Executor
|
|||
return $rtn;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,8 @@ namespace PHPCI\Plugin\Util;
|
|||
|
||||
|
||||
|
||||
class Factory {
|
||||
class Factory
|
||||
{
|
||||
|
||||
const TYPE_ARRAY = "array";
|
||||
const TYPE_CALLABLE = "callable";
|
||||
|
@ -18,18 +19,17 @@ class Factory {
|
|||
*/
|
||||
private $container;
|
||||
|
||||
function __construct(\Pimple $container = null)
|
||||
public function __construct(\Pimple $container = null)
|
||||
{
|
||||
if ($container) {
|
||||
$this->container = $container;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->container = new \Pimple();
|
||||
}
|
||||
|
||||
$self = $this;
|
||||
$this->registerResource(
|
||||
function() use ($self) {
|
||||
function () use ($self) {
|
||||
return $self->getLastOptions();
|
||||
},
|
||||
'options',
|
||||
|
@ -37,7 +37,30 @@ class Factory {
|
|||
);
|
||||
}
|
||||
|
||||
public function getLastOptions() {
|
||||
/**
|
||||
* Trys to get a function from the file path specified. If the
|
||||
* file returns a function then $this will be passed to it.
|
||||
* This enables the config file to call any public methods.
|
||||
*
|
||||
* @param $configPath
|
||||
* @return bool - true if the function exists else false.
|
||||
*/
|
||||
public function addConfigFromFile($configPath)
|
||||
{
|
||||
// The file is expected to return a function which can
|
||||
// act on the pluginFactory to register any resources needed.
|
||||
if (file_exists($configPath)) {
|
||||
$configFunction = require($configPath);
|
||||
if (is_callable($configFunction)) {
|
||||
$configFunction($this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getLastOptions()
|
||||
{
|
||||
return $this->currentPluginOptions;
|
||||
}
|
||||
|
||||
|
@ -66,7 +89,7 @@ class Factory {
|
|||
|
||||
if ($constructor) {
|
||||
$argsToUse = array();
|
||||
foreach($constructor->getParameters() as $param) {
|
||||
foreach ($constructor->getParameters() as $param) {
|
||||
$argsToUse = $this->addArgFromParam($argsToUse, $param);
|
||||
}
|
||||
$plugin = $reflectedPlugin->newInstanceArgs($argsToUse);
|
||||
|
@ -84,11 +107,11 @@ class Factory {
|
|||
* @throws \InvalidArgumentException
|
||||
* @internal param mixed $resource
|
||||
*/
|
||||
public function registerResource($loader,
|
||||
$name = null,
|
||||
$type = null
|
||||
)
|
||||
{
|
||||
public function registerResource(
|
||||
$loader,
|
||||
$name = null,
|
||||
$type = null
|
||||
) {
|
||||
if ($name === null && $type === null) {
|
||||
throw new \InvalidArgumentException(
|
||||
"Type or Name must be specified"
|
||||
|
@ -138,9 +161,9 @@ class Factory {
|
|||
$class = $param->getClass();
|
||||
if ($class) {
|
||||
return $class->getName();
|
||||
} elseif($param->isArray()) {
|
||||
} elseif ($param->isArray()) {
|
||||
return self::TYPE_ARRAY;
|
||||
} elseif($param->isCallable()) {
|
||||
} elseif ($param->isCallable()) {
|
||||
return self::TYPE_CALLABLE;
|
||||
} else {
|
||||
return null;
|
||||
|
@ -165,4 +188,4 @@ class Factory {
|
|||
|
||||
return $existingArgs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
return new self(new \DirectoryIterator($dirPath));
|
||||
}
|
||||
|
||||
function __construct(\Iterator $files)
|
||||
public function __construct(\Iterator $files)
|
||||
{
|
||||
$this->files = $files;
|
||||
}
|
||||
|
@ -55,17 +55,17 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
public function getPluginClasses()
|
||||
{
|
||||
return array_map(
|
||||
function($plugin) {
|
||||
function ($plugin) {
|
||||
return $plugin->class;
|
||||
},
|
||||
$this->getInstalledPlugins()
|
||||
);
|
||||
},
|
||||
$this->getInstalledPlugins()
|
||||
);
|
||||
}
|
||||
|
||||
protected function loadPluginInfo()
|
||||
{
|
||||
$this->pluginInfo = array();
|
||||
foreach($this->files as $fileInfo) {
|
||||
foreach ($this->files as $fileInfo) {
|
||||
if ($fileInfo instanceof \SplFileInfo) {
|
||||
if ($fileInfo->isFile()) {
|
||||
$this->addPluginFromFile($fileInfo);
|
||||
|
@ -101,5 +101,4 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
|
||||
return $namespace . '\\' . $className;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,4 +20,4 @@ interface InstalledPluginInformation
|
|||
* @return string[]
|
||||
*/
|
||||
public function getPluginClasses();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class PluginInformationCollection implements InstalledPluginInformation
|
|||
public function getInstalledPlugins()
|
||||
{
|
||||
$arr = array();
|
||||
foreach($this->pluginInformations as $single) {
|
||||
foreach ($this->pluginInformations as $single) {
|
||||
$arr = array_merge($arr, $single->getInstalledPlugins());
|
||||
}
|
||||
return $arr;
|
||||
|
@ -39,10 +39,10 @@ class PluginInformationCollection implements InstalledPluginInformation
|
|||
public function getPluginClasses()
|
||||
{
|
||||
$arr = array();
|
||||
foreach($this->pluginInformations as $single) {
|
||||
foreach ($this->pluginInformations as $single) {
|
||||
$arr = array_merge($arr, $single->getPluginClasses());
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,4 +4,4 @@ namespace PHPCI;
|
|||
abstract class Store extends \b8\Store
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class LoggerConfigTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$expectedHandler = new \Monolog\Handler\NullHandler();
|
||||
$config = new LoggerConfig(array(
|
||||
LoggerConfig::KEY_AlwaysLoaded => function() use ($expectedHandler) {
|
||||
LoggerConfig::KEY_ALWAYS_LOADED => function() use ($expectedHandler) {
|
||||
return array($expectedHandler);
|
||||
}
|
||||
));
|
||||
|
|
13
Tests/PHPCI/Plugin/Util/ExamplePluginConfig.php
Normal file
13
Tests/PHPCI/Plugin/Util/ExamplePluginConfig.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
return function (PHPCI\Plugin\Util\Factory $factory) {
|
||||
$factory->registerResource(
|
||||
// This function will be called when the resource is needed.
|
||||
function() {
|
||||
return array(
|
||||
'bar' => "Hello",
|
||||
);
|
||||
},
|
||||
"requiredArgument",
|
||||
null
|
||||
);
|
||||
};
|
|
@ -148,6 +148,33 @@ class FactoryTest extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertArrayHasKey('thing', $plugin->Options);
|
||||
}
|
||||
|
||||
public function testAddConfigFromFile_ReturnsTrueForValidFile()
|
||||
{
|
||||
$result = $this->testedFactory->addConfigFromFile(
|
||||
realpath(__DIR__ . "/ExamplePluginConfig.php")
|
||||
);
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testAddConfigFromFile_RegistersResources()
|
||||
{
|
||||
$this->testedFactory->addConfigFromFile(
|
||||
realpath(__DIR__ . "/ExamplePluginConfig.php")
|
||||
);
|
||||
|
||||
$namespace = '\\PHPCI\\Plugin\\Tests\\Util\\';
|
||||
$pluginName = $namespace . 'ExamplePluginWithSingleRequiredArg';
|
||||
|
||||
$plugin = $this->testedFactory->buildPlugin($pluginName);
|
||||
|
||||
// The Example config file defines an array as the resource.
|
||||
$this->assertEquals(
|
||||
array("bar" => "Hello"),
|
||||
$plugin->RequiredArgument
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mocked Builder and Build classes so that realistic plugins
|
||||
* can be tested.
|
||||
|
|
|
@ -8,9 +8,7 @@ build_settings:
|
|||
|
||||
test:
|
||||
php_mess_detector:
|
||||
allow_failures: true # Temporarily allowing failures, remove this!
|
||||
php_code_sniffer:
|
||||
allow_failures: true # Temporarily allowing failures, remove this!
|
||||
standard: "PSR2"
|
||||
php_loc:
|
||||
|
||||
|
|
22
pluginconfig.php.example
Normal file
22
pluginconfig.php.example
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
return function (PHPCI\Plugin\Util\Factory $factory) {
|
||||
$factory->registerResource(
|
||||
// This function will be called when the resource is needed.
|
||||
function() {
|
||||
return array(
|
||||
'Foo' => "Stuff",
|
||||
'Bar' => "More Stuff"
|
||||
);
|
||||
},
|
||||
|
||||
// In addition to the function for building the resource the system
|
||||
// also needs to be told when to load the resource. Either or both
|
||||
// of the following arguments can be used (null to ignore)
|
||||
|
||||
// This resource will only be given when the argument name is:
|
||||
"ResourceArray",
|
||||
|
||||
// The resource will only be given when the type hint is:
|
||||
PHPCI\Plugin\Util\Factory::TYPE_ARRAY
|
||||
);
|
||||
};
|
Loading…
Reference in a new issue