Add code to allow configuration for the plugin factory to be stored on a per install basis.
This commit is contained in:
parent
f09ed3edad
commit
6d4e49d07b
|
@ -37,6 +37,28 @@ class Factory {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
|
22
Tests/PHPCI/Plugin/Util/ExamplePluginConfig.php
Normal file
22
Tests/PHPCI/Plugin/Util/ExamplePluginConfig.php
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
|
||||
);
|
||||
};
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue