From 0bf5a16769b59d862471718f1a7beac8c95899da Mon Sep 17 00:00:00 2001 From: Fabien Bourigault Date: Mon, 29 May 2017 14:56:13 +0200 Subject: [PATCH] enable autowiring for every discoverable service --- .../Compiler/DiscoveryPass.php | 63 ------------------- HttplugBundle.php | 8 --- Resources/config/services.xml | 25 +++++++- .../DiscoveryTest.php} | 34 +++++++--- 4 files changed, 48 insertions(+), 82 deletions(-) delete mode 100644 DependencyInjection/Compiler/DiscoveryPass.php rename Tests/{Unit/DependencyInjection/Compiler/DiscoveryPassTest.php => Functional/DiscoveryTest.php} (67%) diff --git a/DependencyInjection/Compiler/DiscoveryPass.php b/DependencyInjection/Compiler/DiscoveryPass.php deleted file mode 100644 index b54e8e02..00000000 --- a/DependencyInjection/Compiler/DiscoveryPass.php +++ /dev/null @@ -1,63 +0,0 @@ - - */ -final class DiscoveryPass implements CompilerPassInterface -{ - /** - * Fallback services and classes. - * - * @var array - */ - private $services = [ - 'client' => HttpClient::class, - 'message_factory' => MessageFactory::class, - 'uri_factory' => UriFactory::class, - 'stream_factory' => StreamFactory::class, - ]; - - /** - * Factories by type. - * - * @var array - */ - private $factoryClasses = [ - 'client' => HttpClientDiscovery::class, - 'message_factory' => MessageFactoryDiscovery::class, - 'uri_factory' => UriFactoryDiscovery::class, - 'stream_factory' => StreamFactoryDiscovery::class, - ]; - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - foreach ($this->services as $service => $class) { - $serviceId = sprintf('httplug.%s.default', $service); - - if (false === $container->has($serviceId)) { - // Register and create factory for service - $definition = $container->register($serviceId, $class); - $definition->setFactory([$this->factoryClasses[$service], 'find']); - $definition->addArgument($class); - } - } - } -} diff --git a/HttplugBundle.php b/HttplugBundle.php index b5402c52..082d32f4 100644 --- a/HttplugBundle.php +++ b/HttplugBundle.php @@ -2,8 +2,6 @@ namespace Http\HttplugBundle; -use Http\HttplugBundle\DependencyInjection\Compiler\DiscoveryPass; -use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; /** @@ -12,10 +10,4 @@ */ class HttplugBundle extends Bundle { - public function build(ContainerBuilder $container) - { - parent::build($container); - - $container->addCompilerPass(new DiscoveryPass()); - } } diff --git a/Resources/config/services.xml b/Resources/config/services.xml index c9b4df13..e34c8425 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -8,7 +8,30 @@ - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Unit/DependencyInjection/Compiler/DiscoveryPassTest.php b/Tests/Functional/DiscoveryTest.php similarity index 67% rename from Tests/Unit/DependencyInjection/Compiler/DiscoveryPassTest.php rename to Tests/Functional/DiscoveryTest.php index d84549f9..c016c93d 100644 --- a/Tests/Unit/DependencyInjection/Compiler/DiscoveryPassTest.php +++ b/Tests/Functional/DiscoveryTest.php @@ -2,45 +2,58 @@ namespace Http\HttplugBundle\Tests\Unit\DependencyInjection\Compiler; +use Http\Client\HttpAsyncClient; use Http\Client\HttpClient; -use Http\HttplugBundle\DependencyInjection\Compiler\DiscoveryPass; +use Http\HttplugBundle\DependencyInjection\HttplugExtension; use Http\Message\MessageFactory; use Http\Message\StreamFactory; use Http\Message\UriFactory; -use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase; -use Symfony\Component\DependencyInjection\ContainerBuilder; +use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase; use Symfony\Component\DependencyInjection\Definition; /** * @author Márk Sági-Kazár */ -final class DiscoveryPassTest extends AbstractCompilerPassTestCase +final class DiscoveryTest extends AbstractExtensionTestCase { - protected function registerCompilerPass(ContainerBuilder $container) + protected function setUp() { - $container->addCompilerPass(new DiscoveryPass()); + parent::setUp(); + + $this->setParameter('kernel.debug', true); + } + + /** + * {@inheritdoc} + */ + protected function getContainerExtensions() + { + return [ + new HttplugExtension(), + ]; } public function testDiscoveryFallbacks() { - $this->compile(); + $this->load(); $this->assertContainerBuilderHasService('httplug.client.default', HttpClient::class); $this->assertContainerBuilderHasService('httplug.message_factory.default', MessageFactory::class); $this->assertContainerBuilderHasService('httplug.uri_factory.default', UriFactory::class); $this->assertContainerBuilderHasService('httplug.stream_factory.default', StreamFactory::class); + $this->assertContainerBuilderHasService('httplug.async_client.default', HttpAsyncClient::class); } public function testDiscoveryPartialFallbacks() { + $this->load(); $this->setDefinition('httplug.client.default', new Definition('Http\Adapter\Guzzle6\Client')); - $this->compile(); - $this->assertContainerBuilderHasService('httplug.client.default', 'Http\Adapter\Guzzle6\Client'); $this->assertContainerBuilderHasService('httplug.message_factory.default', MessageFactory::class); $this->assertContainerBuilderHasService('httplug.uri_factory.default', UriFactory::class); $this->assertContainerBuilderHasService('httplug.stream_factory.default', StreamFactory::class); + $this->assertContainerBuilderHasService('httplug.async_client.default', HttpAsyncClient::class); } public function testNoDiscoveryFallbacks() @@ -49,7 +62,8 @@ public function testNoDiscoveryFallbacks() $this->setDefinition('httplug.message_factory.default', new Definition(MessageFactory::class)); $this->setDefinition('httplug.uri_factory.default', new Definition(UriFactory::class)); $this->setDefinition('httplug.stream_factory.default', new Definition(StreamFactory::class)); + $this->setDefinition('httplug.async_client.default', new Definition(HttpAsyncClient::class)); - $this->compile(); + $this->load(); } }