From 6f7697697d8b5553406de4026f6c3d910d7abd2b Mon Sep 17 00:00:00 2001 From: Nyholm Date: Tue, 27 Mar 2018 07:27:52 +0200 Subject: [PATCH 1/8] Allow you to configure a client without a factory --- DependencyInjection/Configuration.php | 11 +++++++++++ DependencyInjection/HttplugExtension.php | 17 +++++++++++------ .../HttplugExtensionTest.php | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index cb43df30..05b5ef44 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -179,12 +179,23 @@ private function configureClients(ArrayNodeDefinition $root) }) ->thenInvalid('If you want to use the "config" key you must also specify a valid "factory".') ->end() + ->validate() + ->ifTrue(function ($config) { + return !empty($config['service']) && ('httplug.factory.auto' !== $config['factory'] || !empty($config['config'])) ; + }) + ->thenInvalid('If you want to use the "service" key you cannot specify "factory" or "config".') + ->end() ->children() ->scalarNode('factory') ->defaultValue('httplug.factory.auto') ->cannotBeEmpty() ->info('The service id of a factory to use when creating the adapter.') ->end() + ->scalarNode('service') + ->defaultNull() + ->cannotBeEmpty() + ->info('The service id of for the client to use.') + ->end() ->booleanNode('flexible_client') ->defaultFalse() ->info('Set to true to get the client wrapped in a FlexibleHttpClient which emulates async or sync behavior.') diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index 0186f794..8309b135 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -306,12 +306,17 @@ private function configureClient(ContainerBuilder $container, $clientName, array } } - $container - ->register($serviceId.'.client', HttpClient::class) - ->setFactory([new Reference($arguments['factory']), 'createClient']) - ->addArgument($arguments['config']) - ->setPublic(false) - ; + if (empty($arguments['service'])) { + $container + ->register($serviceId.'.client', HttpClient::class) + ->setFactory([new Reference($arguments['factory']), 'createClient']) + ->addArgument($arguments['config']) + ->setPublic(false); + } else { + $container + ->setAlias($serviceId.'.client', $arguments['service']) + ->setPublic(false); + } $container ->register($serviceId, PluginClient::class) diff --git a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php index a9f19e32..adfd792f 100644 --- a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -240,6 +240,21 @@ public function testCachePluginConfigCacheKeyGeneratorReference() $this->assertSame('header_cache_key_generator', (string) $config['cache_key_generator']); } + public function testUsingServiceKeyForClients() + { + $this->load([ + 'clients' => [ + 'acme' => [ + 'service' => 'my_custom_client', + ], + ], + ]); + + $client = $this->container->getAlias('httplug.acme.client'); + $this->assertEquals('my_custom_client', (string) $client); + $this->assertTrue($client->isPrivate()); + } + private function verifyProfilingDisabled() { $def = $this->container->findDefinition('httplug.client'); From a9f10214ca76dd37fb7ab9ce49f0163bf6864cd0 Mon Sep 17 00:00:00 2001 From: Nyholm Date: Tue, 27 Mar 2018 07:31:41 +0200 Subject: [PATCH 2/8] cs --- DependencyInjection/Configuration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 05b5ef44..342e47b3 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -181,7 +181,7 @@ private function configureClients(ArrayNodeDefinition $root) ->end() ->validate() ->ifTrue(function ($config) { - return !empty($config['service']) && ('httplug.factory.auto' !== $config['factory'] || !empty($config['config'])) ; + return !empty($config['service']) && ('httplug.factory.auto' !== $config['factory'] || !empty($config['config'])); }) ->thenInvalid('If you want to use the "service" key you cannot specify "factory" or "config".') ->end() From 6dfb948499bbb18113b2bcd94467bff637c84ad8 Mon Sep 17 00:00:00 2001 From: Nyholm Date: Tue, 27 Mar 2018 07:37:44 +0200 Subject: [PATCH 3/8] Fixed tests --- DependencyInjection/Configuration.php | 1 - DependencyInjection/HttplugExtension.php | 3 ++- Tests/Unit/DependencyInjection/ConfigurationTest.php | 1 + Tests/Unit/DependencyInjection/HttplugExtensionTest.php | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 342e47b3..18a2dc21 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -193,7 +193,6 @@ private function configureClients(ArrayNodeDefinition $root) ->end() ->scalarNode('service') ->defaultNull() - ->cannotBeEmpty() ->info('The service id of for the client to use.') ->end() ->booleanNode('flexible_client') diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index 8309b135..87205bed 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -315,7 +315,8 @@ private function configureClient(ContainerBuilder $container, $clientName, array } else { $container ->setAlias($serviceId.'.client', $arguments['service']) - ->setPublic(false); + ->setPublic(false) + ->setPrivate(true); } $container diff --git a/Tests/Unit/DependencyInjection/ConfigurationTest.php b/Tests/Unit/DependencyInjection/ConfigurationTest.php index 52ca3c74..1d7e443f 100644 --- a/Tests/Unit/DependencyInjection/ConfigurationTest.php +++ b/Tests/Unit/DependencyInjection/ConfigurationTest.php @@ -118,6 +118,7 @@ public function testSupportsAllConfigFormats() 'test' => [ 'factory' => 'httplug.factory.guzzle6', 'http_methods_client' => true, + 'service' => null, 'flexible_client' => false, 'batch_client' => false, 'plugins' => [ diff --git a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php index adfd792f..3aec7c9f 100644 --- a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -250,8 +250,9 @@ public function testUsingServiceKeyForClients() ], ]); - $client = $this->container->getAlias('httplug.acme.client'); + $client = $this->container->getAlias('httplug.client.acme.client'); $this->assertEquals('my_custom_client', (string) $client); + $this->assertFalse($client->isPublic()); $this->assertTrue($client->isPrivate()); } From bd2717b0936006646c040b553e232caab20b8c03 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 08:01:23 +0200 Subject: [PATCH 4/8] Update HttplugExtension.php --- DependencyInjection/HttplugExtension.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index 87205bed..261afefb 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -314,9 +314,7 @@ private function configureClient(ContainerBuilder $container, $clientName, array ->setPublic(false); } else { $container - ->setAlias($serviceId.'.client', $arguments['service']) - ->setPublic(false) - ->setPrivate(true); + ->setAlias($serviceId.'.client', new Alias($arguments['service'], false)); } $container From 20a8062f0cffe8e0021f4c7c7f3cf326305f676c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 08:13:05 +0200 Subject: [PATCH 5/8] Update HttplugExtensionTest.php --- Tests/Unit/DependencyInjection/HttplugExtensionTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php index 3aec7c9f..4d32121d 100644 --- a/Tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/Tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -253,7 +253,6 @@ public function testUsingServiceKeyForClients() $client = $this->container->getAlias('httplug.client.acme.client'); $this->assertEquals('my_custom_client', (string) $client); $this->assertFalse($client->isPublic()); - $this->assertTrue($client->isPrivate()); } private function verifyProfilingDisabled() From 449f9990bb0eae50474bf4cfed0002a3ef119831 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 08:27:35 +0200 Subject: [PATCH 6/8] FIxed typo --- DependencyInjection/Configuration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 18a2dc21..85f21621 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -193,7 +193,7 @@ private function configureClients(ArrayNodeDefinition $root) ->end() ->scalarNode('service') ->defaultNull() - ->info('The service id of for the client to use.') + ->info('The service id of the client to use.') ->end() ->booleanNode('flexible_client') ->defaultFalse() From 3974218dc1ef78e07b36a699fc190bb8752a8bcc Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 08:28:16 +0200 Subject: [PATCH 7/8] Added changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09192a07..17498d9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" betwee ### Added - Allow to configure the `AddPathPlugin` per client, under the `add_path` configuration key. +- Allow to configure clients with a `service` instead of a factory. ## 1.9.0 - 2018-03-06 From de3f19a136580560bf4eae6e346481c0bd927e88 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 08:56:31 +0200 Subject: [PATCH 8/8] Removed date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17498d9f..aeec856b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release. -## 1.10.0 (unreleased) - 2018-03-09 +## 1.10.0 - 2018-03-27 ### Added