Skip to content

Commit 7dbae6d

Browse files
committed
Remove plugins if their dependencies are missing
1 parent 87daeef commit 7dbae6d

File tree

5 files changed

+53
-8
lines changed

5 files changed

+53
-8
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Http\HttplugBundle\DependencyInjection\CompilerPass;
4+
5+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
6+
use Symfony\Component\DependencyInjection\ContainerBuilder;
7+
8+
/**
9+
* Remove plugins if their dependencies are missing.
10+
*
11+
* @author Tobias Nyholm <[email protected]>
12+
*/
13+
class PluginPass implements CompilerPassInterface
14+
{
15+
/**
16+
* {@inheritdoc}
17+
*/
18+
public function process(ContainerBuilder $container)
19+
{
20+
if (!($container->hasDefinition('logger') || $container->hasAlias('logger'))) {
21+
$container->removeDefinition('httplug.plugin.logger');
22+
}
23+
24+
if (!$container->hasDefinition('debug.stopwatch')) {
25+
$container->removeDefinition('httplug.plugin.stopwatch');
26+
}
27+
}
28+
}

DependencyInjection/Configuration.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* sections are normalized, and merged.
1616
*
1717
* @author David Buchmann <[email protected]>
18+
* @author Tobias Nyholm <[email protected]>
1819
*/
1920
class Configuration implements ConfigurationInterface
2021
{
@@ -165,9 +166,10 @@ protected function configurePlugins(ArrayNodeDefinition $root)
165166
->end() // End history plugin
166167

167168
->arrayNode('logger')
168-
->canBeEnabled()
169+
->canBeDisabled()
170+
->addDefaultsIfNotSet()
169171
->children()
170-
->scalarNode('logger')->isRequired()->cannotBeEmpty()->end()
172+
->scalarNode('logger')->defaultValue('logger')->cannotBeEmpty()->end()
171173
->scalarNode('formatter')->defaultNull()->end()
172174
->end()
173175
->end() // End logger plugin
@@ -190,9 +192,10 @@ protected function configurePlugins(ArrayNodeDefinition $root)
190192
->end() // End retry plugin
191193

192194
->arrayNode('stopwatch')
193-
->canBeEnabled()
195+
->canBeDisabled()
196+
->addDefaultsIfNotSet()
194197
->children()
195-
->scalarNode('stopwatch')->isRequired()->cannotBeEmpty()->end()
198+
->scalarNode('stopwatch')->defaultValue('debug.stopwatch')->cannotBeEmpty()->end()
196199
->end()
197200
->end() // End stopwatch plugin
198201

DependencyInjection/HttplugExtension.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
/**
1515
* @author David Buchmann <[email protected]>
16+
* @author Tobias Nyholm <[email protected]>
1617
*/
1718
class HttplugExtension extends Extension
1819
{
@@ -143,9 +144,10 @@ private function configurePluginByName($name, Definition $definition, array $con
143144
$definition->replaceArgument(0, new Reference($config['journal']));
144145
break;
145146
case 'logger':
146-
$definition
147-
->replaceArgument(0, new Reference($config['logger']))
148-
->replaceArgument(1, new Reference($config['formatter']));
147+
$definition->replaceArgument(0, new Reference($config['logger']));
148+
if (!empty($config['formatter'])) {
149+
$definition->replaceArgument(1, new Reference($config['formatter']));
150+
}
149151
break;
150152
case 'redirect':
151153
$definition

HttplugBundle.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,23 @@
22

33
namespace Http\HttplugBundle;
44

5+
use Http\HttplugBundle\DependencyInjection\CompilerPass\PluginPass;
6+
use Symfony\Component\DependencyInjection\ContainerBuilder;
57
use Symfony\Component\HttpKernel\Bundle\Bundle;
68

79
/**
810
* @author David Buchmann <[email protected]>
11+
* @author Tobias Nyholm <[email protected]>
912
*/
1013
class HttplugBundle extends Bundle
1114
{
15+
/**
16+
* {@inheritdoc}
17+
*/
18+
public function build(ContainerBuilder $container)
19+
{
20+
parent::build($container);
21+
22+
$container->addCompilerPass(new PluginPass());
23+
}
1224
}

Resources/config/plugins.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
</service>
2424
<service id="httplug.plugin.logger" class="Http\Client\Plugin\LoggerPlugin" public="false">
2525
<argument />
26-
<argument />
26+
<argument>null</argument>
2727
</service>
2828
<service id="httplug.plugin.redirect" class="Http\Client\Plugin\RedirectPlugin" public="false" />
2929
<service id="httplug.plugin.retry" class="Http\Client\Plugin\RetryPlugin" public="false" />

0 commit comments

Comments
 (0)