Skip to content

Commit bf992cd

Browse files
toooniNyholm
authored andcommitted
Plugin reference (#199)
* Fix plugin reference * Implemented tests * Added null logger * Fixed tests * Reference is always set * Test multiple plugins config
1 parent 19ba564 commit bf992cd

File tree

5 files changed

+90
-1
lines changed

5 files changed

+90
-1
lines changed

DependencyInjection/BazingaGeocoderExtension.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ public function configureProviderPlugins(ContainerBuilder $container, array $con
106106
{
107107
$plugins = [];
108108
foreach ($config['plugins'] as $plugin) {
109-
$plugins[] = $plugin['id'];
109+
if ($plugin['reference']['enabled']) {
110+
$plugins[] = $plugin['reference']['id'];
111+
}
110112
}
111113

112114
if (isset($config['cache']) || isset($config['cache_lifetime'])) {

DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ private function getProvidersNode()
9292
->requiresAtLeastOneElement()
9393
->useAttributeAsKey('name')
9494
->prototype('array')
95+
->fixXmlConfig('plugin')
9596
->children()
9697
->scalarNode('factory')->isRequired()->cannotBeEmpty()->end()
9798
->variableNode('options')->defaultValue([])->end()

Tests/Functional/BundleInitializationTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use Bazinga\GeocoderBundle\BazingaGeocoderBundle;
1616
use Geocoder\Plugin\Plugin\CachePlugin;
17+
use Geocoder\Plugin\Plugin\LoggerPlugin;
1718
use Geocoder\Plugin\PluginProvider;
1819
use Geocoder\Provider\GoogleMaps\GoogleMaps;
1920
use Geocoder\ProviderAggregator;
@@ -81,4 +82,34 @@ public function testBundleWithCachedProvider()
8182
$this->assertNotEmpty($plugins);
8283
$this->assertInstanceOf(CachePlugin::class, $plugins[0]);
8384
}
85+
86+
public function testBundleWithPluginsYml()
87+
{
88+
$kernel = $this->createKernel();
89+
$kernel->addConfigFile(__DIR__.'/config/service_plugin.yml');
90+
$this->bootKernel();
91+
$container = $this->getContainer();
92+
93+
$this->assertTrue($container->has('bazinga_geocoder.provider.acme'));
94+
$service = $container->get('bazinga_geocoder.provider.acme');
95+
$this->assertInstanceOf(PluginProvider::class, $service);
96+
$plugins = NSA::getProperty($service, 'plugins');
97+
$this->assertCount(3, $plugins);
98+
$this->assertInstanceOf(LoggerPlugin::class, $plugins[0]);
99+
}
100+
101+
public function testBundleWithPluginXml()
102+
{
103+
$kernel = $this->createKernel();
104+
$kernel->addConfigFile(__DIR__.'/config/service_plugin.xml');
105+
$this->bootKernel();
106+
$container = $this->getContainer();
107+
108+
$this->assertTrue($container->has('bazinga_geocoder.provider.acme'));
109+
$service = $container->get('bazinga_geocoder.provider.acme');
110+
$this->assertInstanceOf(PluginProvider::class, $service);
111+
$plugins = NSA::getProperty($service, 'plugins');
112+
$this->assertNotEmpty($plugins);
113+
$this->assertInstanceOf(LoggerPlugin::class, $plugins[0]);
114+
}
84115
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services">
3+
4+
<config xmlns="http://example.org/schema/dic/bazinga_geocoder">
5+
<profiling enabled="true" />
6+
<providers>
7+
<acme factory="Bazinga\GeocoderBundle\ProviderFactory\NominatimFactory" >
8+
<plugin>acme.logger</plugin>
9+
</acme>
10+
</providers>
11+
</config>
12+
13+
<services>
14+
<service id="logger" class="Psr\Log\NullLogger" />
15+
<service id="acme.logger" class="Geocoder\Plugin\Plugin\LoggerPlugin">
16+
<argument type="service" id="logger" />
17+
</service>
18+
</services>
19+
</container>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
bazinga_geocoder:
3+
profiling:
4+
enabled: false
5+
providers:
6+
acme:
7+
factory: Bazinga\GeocoderBundle\ProviderFactory\NominatimFactory
8+
plugins:
9+
- acme.logger
10+
- acme.2nd_logger
11+
- {'reference': {'enabled': false, 'id': acme.3d_logger}}
12+
- {'reference': {'enabled': true, 'id': acme.4th_logger}}
13+
14+
services:
15+
logger:
16+
class: Psr\Log\NullLogger
17+
18+
acme.logger:
19+
class: Geocoder\Plugin\Plugin\LoggerPlugin
20+
arguments:
21+
- '@logger'
22+
23+
acme.2nd_logger:
24+
class: Geocoder\Plugin\Plugin\LoggerPlugin
25+
arguments:
26+
- '@logger'
27+
28+
acme.3d_logger:
29+
class: Geocoder\Plugin\Plugin\LoggerPlugin
30+
arguments:
31+
- '@logger'
32+
33+
acme.4th_logger:
34+
class: Geocoder\Plugin\Plugin\LoggerPlugin
35+
arguments:
36+
- '@logger'

0 commit comments

Comments
 (0)