Skip to content

Commit

Permalink
make it possible to configure plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
uwej711 committed Jul 25, 2016
1 parent a07215f commit 5957092
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 1 deletion.
14 changes: 14 additions & 0 deletions DependencyInjection/Configuration.php
Expand Up @@ -137,6 +137,20 @@ public function getConfigTreeBuilder()
->end()
->end()
->end()
->arrayNode('plugins')
->canBeUnset()
->useAttributeAsKey('name')
->prototype('array')
->validate()
->ifTrue(function ($v) { return !empty($v['plugin_class']) && !empty($v['plugin_service']); })
->thenInvalid('Only either a plugin class or a plugin service can be set')
->end()
->children()
->scalarNode('plugin_class')->end()
->scalarNode('plugin_service')->end()
->end()
->end()
->end()
->end()
->end()
->end()
Expand Down
15 changes: 15 additions & 0 deletions DependencyInjection/NelmioSolariumExtension.php
Expand Up @@ -24,6 +24,10 @@
*/
class NelmioSolariumExtension extends Extension
{
/**
* @param array $configs
* @param ContainerBuilder $container
*/
public function load(array $configs, ContainerBuilder $container)
{
$processor = new Processor();
Expand Down Expand Up @@ -123,6 +127,17 @@ public function load(array $configs, ContainerBuilder $container)
$clientDefinition->addMethodCall('setAdapter', array($clientOptions['adapter_class']));
}

if (isset($clientOptions['plugins'])) {
foreach ($clientOptions['plugins'] as $pluginName => $pluginOptions) {
if (isset($pluginOptions['plugin_class'])) {
$plugin = $pluginOptions['plugin_class'];
} else {
$plugin = new Reference($pluginOptions['plugin_service']);
}
$clientDefinition->addMethodCall('registerPlugin', array($pluginName, $plugin));
}
}

if ($isDebug) {
$logger = new Reference('solarium.data_collector');
$container->getDefinition($clientName)->addMethodCall('registerPlugin', array($clientName . '.logger', $logger));
Expand Down
29 changes: 28 additions & 1 deletion Tests/NelmioSolariumExtensionTest.php
Expand Up @@ -13,6 +13,7 @@

use Nelmio\SolariumBundle\DependencyInjection\NelmioSolariumExtension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;

class NelmioSolariumExtensionTest extends \PHPUnit_Framework_TestCase
Expand Down Expand Up @@ -161,6 +162,27 @@ public function testDefaultClient()
$this->assertInstanceOf('Nelmio\SolariumBundle\Tests\StubClient', $container->get('solarium.client.client2'));
}

public function testPlugins()
{
$config = array(
'clients' => array(
'client' => array(
'plugins' => array('plugin1' => array('plugin_service' => 'my_plugin'), 'plugin2' => array('plugin_class' => 'Nelmio\SolariumBundle\Tests\MyPluginClass'))
)
),
);

$container = $this->createCompiledContainerForConfig($config, true, array('my_plugin' => new Definition('Nelmio\SolariumBundle\Tests\MyPluginClass')));

$client = $container->get('solarium.client');
$plugin1 = $client->getPlugin('plugin1');
$plugin2 = $client->getPlugin('plugin2');

$this->assertInstanceOf('Nelmio\SolariumBundle\Tests\MyPluginClass', $plugin1);
$this->assertInstanceOf('Nelmio\SolariumBundle\Tests\MyPluginClass', $plugin2);
}


public function testDsnAndOtherParamsTogether()
{
$config = array(
Expand Down Expand Up @@ -470,9 +492,10 @@ public function testLoadBalancer()

}

private function createCompiledContainerForConfig($config, $debug = false)
private function createCompiledContainerForConfig($config, $debug = false, $extraServices = array())
{
$container = $this->createContainer($debug);
$container->addDefinitions($extraServices);
$container->registerExtension(new NelmioSolariumExtension());
$container->loadFromExtension('nelmio_solarium', $config);
$this->compileContainer($container);
Expand Down Expand Up @@ -502,3 +525,7 @@ private function compileContainer(ContainerBuilder $container)
class StubClient extends \Solarium\Client
{
}

class MyPluginClass extends \Solarium\Core\Plugin\Plugin {

}

0 comments on commit 5957092

Please sign in to comment.