From ff7074ee5c9ff368a8ea834a272080a16f102fee Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Fri, 12 Apr 2019 09:08:19 +0100 Subject: [PATCH 1/7] Add integration for VCR plugin --- composer.json | 3 +- src/DependencyInjection/Configuration.php | 44 +++++++++ src/DependencyInjection/HttplugExtension.php | 96 +++++++++++++++++-- src/Resources/config/vcr-plugin.xml | 22 +++++ tests/Resources/Fixtures/config/full.php | 2 +- .../HttplugExtensionTest.php | 53 ++++++++++ 6 files changed, 209 insertions(+), 11 deletions(-) create mode 100644 src/Resources/config/vcr-plugin.xml diff --git a/composer.json b/composer.json index ffac6324..479bea70 100644 --- a/composer.json +++ b/composer.json @@ -38,8 +38,9 @@ "nyholm/nsa": "^1.1", "php-http/cache-plugin": "^1.6", "php-http/guzzle6-adapter": "^1.1.1 || ^2.0.1", - "php-http/promise": "^1.0", "php-http/mock-client": "^1.2", + "php-http/promise": "^1.0", + "php-http/vcr-plugin": "^1.0@dev", "polishsymfonycommunity/symfony-mocker-container": "^1.0", "symfony/browser-kit": "^2.8.49 || ^3.0.9 || ^3.1.10 || ^3.2.14 || ^3.3.18 || ^3.4.20 || ^4.0.15 || ^4.1.9 || ^4.2.1", "symfony/cache": "^3.1.10 || ^3.2.14 || ^3.3.18 || ^3.4.20 || ^4.0.15 || ^4.1.9 || ^4.2.1", diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 0bcfd928..8c9bbbef 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -437,6 +437,50 @@ private function createClientPluginNode() ->end() ->end() ->end() + ->arrayNode('vcr') + ->canBeEnabled() + ->addDefaultsIfNotSet() + ->info('Record response to be replayed during tests or development cycle.') + ->validate() + ->ifTrue(function ($config) { + return 'filesystem' === $config['recorder'] && empty($config['fixtures_directory']); + }) + ->thenInvalid('If you want to use the "filesystem" recorder you must also specify a "fixtures_directory".') + ->end() + ->children() + ->enumNode('mode') + ->info('What should be the behavior of the plugin?') + ->values(['record', 'replay', 'replay_or_record']) + ->defaultValue('replay_or_record') + ->cannotBeEmpty() + ->end() + ->scalarNode('recorder') + ->info('Which recorder to use. Can be "in_memory", "filesystem" or the ID of your service') + ->defaultValue('filesystem') + ->cannotBeEmpty() + ->end() + ->scalarNode('naming_strategy') + ->info('Which naming strategy to use. Add the ID of your service to override the default one.') + ->defaultValue('default') + ->cannotBeEmpty() + ->end() + ->arrayNode('naming_strategy_options') + ->info('See http://docs.php-http.org/en/latest/plugins/vcr.html#the-naming-strategy for more details') + ->children() + ->arrayNode('hash_headers') + ->info('List of header(s) that make the request unique (Ex: ‘Authorization’)') + ->prototype('scalar')->end() + ->end() + ->arrayNode('hash_body_methods') + ->info('for which request methods the body makes requests distinct.') + ->prototype('scalar')->end() + ->end() + ->end() + ->end() // End naming_strategy_options + ->scalarNode('fixtures_directory') + ->info('Where the responses will be stored and replay from when using the filesystem recorder. Should be accessible to your VCS.') + ->end() + ->end() ->end() ->end(); diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index 78595c27..ca58826a 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -12,6 +12,9 @@ use Http\Client\Common\PluginClientFactory; use Http\Client\HttpAsyncClient; use Http\Client\HttpClient; +use Http\Client\Plugin\Vcr\NamingStrategy\PathNamingStrategy; +use Http\Client\Plugin\Vcr\RecordPlugin; +use Http\Client\Plugin\Vcr\ReplayPlugin; use Http\Message\Authentication\BasicAuth; use Http\Message\Authentication\Bearer; use Http\Message\Authentication\QueryParam; @@ -51,6 +54,10 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('mock-client.xml'); } + if (\class_exists(RecordPlugin::class)) { + $loader->load('vcr-plugin.xml'); + } + // Register default services foreach ($config['classes'] as $service => $class) { if (!empty($class)) { @@ -359,12 +366,19 @@ private function configureClient(ContainerBuilder $container, $clientName, array foreach ($arguments['plugins'] as $plugin) { $pluginName = key($plugin); $pluginConfig = current($plugin); - if ('reference' === $pluginName) { - $plugins[] = $pluginConfig['id']; - } elseif ('authentication' === $pluginName) { - $plugins = array_merge($plugins, $this->configureAuthentication($container, $pluginConfig, $serviceId.'.authentication')); - } else { - $plugins[] = $this->configurePlugin($container, $serviceId, $pluginName, $pluginConfig); + + switch ($pluginName) { + case 'reference': + $plugins[] = $pluginConfig['id']; + break; + case 'authentication': + $plugins = array_merge($plugins, $this->configureAuthentication($container, $pluginConfig, $serviceId.'.authentication')); + break; + case 'vcr': + $plugins = array_merge($plugins, $this->configureVcrPlugin($container, $pluginConfig, "$serviceId.vcr")); + break; + default: + $plugins[] = $this->configurePlugin($container, $serviceId, $pluginName, $pluginConfig); } } @@ -508,13 +522,77 @@ private function configurePlugin(ContainerBuilder $container, $serviceId, $plugi { $pluginServiceId = $serviceId.'.plugin.'.$pluginName; - $definition = class_exists(ChildDefinition::class) - ? new ChildDefinition('httplug.plugin.'.$pluginName) - : new DefinitionDecorator('httplug.plugin.'.$pluginName); + $definition = $this->getChildDefinition("httplug.plugin.$pluginName"); $this->configurePluginByName($pluginName, $definition, $pluginConfig, $container, $pluginServiceId); $container->setDefinition($pluginServiceId, $definition); return $pluginServiceId; } + + private function configureVcrPlugin(ContainerBuilder $container, array $config, $prefix) + { + $recorder = $config['recorder']; + $recorderId = $container->hasDefinition($recorder) ? $recorder : "httplug.plugin.vcr.recorder.$recorder"; + $namingStrategyId = $config['naming_strategy']; + + if ('filesystem' === $recorder) { + $recorderDefinition = $this->getChildDefinition('httplug.plugin.vcr.recorder.filesystem'); + $recorderDefinition->replaceArgument(0, $config['fixtures_directory']); + $recorderDefinition->setPublic(false); + $recorderId = "$prefix.recorder"; + + $container->setDefinition($recorderId, $recorderDefinition); + } + + if ('default' === $config['naming_strategy']) { + $namingStrategyId = "$prefix.naming_strategy"; + $namingStrategy = $container->register("$prefix.naming_strategy", PathNamingStrategy::class) + ->setPublic(false); + + if (!empty($config['naming_strategy_options'])) { + $namingStrategy->setArguments([$config['naming_strategy_options']]); + } + } + + $arguments = [ + new Reference($namingStrategyId), + new Reference($recorderId), + ]; + $record = new Definition(RecordPlugin::class, $arguments); + $replay = new Definition(ReplayPlugin::class, $arguments); + $plugins = []; + + switch ($config['mode']) { + case 'replay': + $container->setDefinition("$prefix.replay", $replay); + $plugins[] = "$prefix.replay"; + break; + case 'replay_or_record': + $replay->setArgument(2, false); + $container->setDefinition("$prefix.replay", $replay); + $container->setDefinition("$prefix.record", $record); + $plugins[] = "$prefix.replay"; + $plugins[] = "$prefix.record"; + break; + case 'record': + $container->setDefinition("$prefix.record", $record); + $plugins[] = "$prefix.record"; + break; + } + + return $plugins; + } + + /** + * @param string $parent the parent service id + * + * @return ChildDefinition + */ + private function getChildDefinition($parent) + { + $definitionClass = class_exists(ChildDefinition::class) ? ChildDefinition::class : DefinitionDecorator::class; + + return new $definitionClass($parent); + } } diff --git a/src/Resources/config/vcr-plugin.xml b/src/Resources/config/vcr-plugin.xml new file mode 100644 index 00000000..68c8bd69 --- /dev/null +++ b/src/Resources/config/vcr-plugin.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/Resources/Fixtures/config/full.php b/tests/Resources/Fixtures/config/full.php index 399b1d25..8c9def8a 100644 --- a/tests/Resources/Fixtures/config/full.php +++ b/tests/Resources/Fixtures/config/full.php @@ -62,7 +62,7 @@ 'password' => 'bar', ], ], - ] + ], ], ], ], diff --git a/tests/Unit/DependencyInjection/HttplugExtensionTest.php b/tests/Unit/DependencyInjection/HttplugExtensionTest.php index 0750f5ca..3fb69580 100644 --- a/tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -449,4 +449,57 @@ public function testBatchClientCanBePublic() $this->assertFalse($this->container->getDefinition('httplug.client.acme.batch_client')->isPrivate()); } } + + /** + * @dataProvider provideVcrPluginConfig + * @group vcr-plugin + */ + public function testVcrPluginConfiguration(array $config, array $services, array $arguments = []) + { + $prefix = 'httplug.client.acme.vcr'; + $this->load(['clients' => ['acme' => ['plugins' => [['vcr' => $config]]]]]); + + foreach ($services as $service) { + $this->assertContainerBuilderHasService("$prefix.$service"); + } + + foreach ($arguments as $id => $args) { + foreach ($args as $index => $value) { + $this->assertContainerBuilderHasServiceDefinitionWithArgument("$prefix.$id", $index, $value); + } + } + } + + public function provideVcrPluginConfig() + { + $config = [ + 'mode' => 'record', + 'recorder' => 'in_memory', + 'naming_strategy' => 'app.naming_strategy', + ]; + yield [$config, ['record']]; + + $config['mode'] = 'replay'; + yield [$config, ['replay']]; + + $config['mode'] = 'replay_or_record'; + yield [$config, ['replay', 'record']]; + + $config['recorder'] = 'filesystem'; + $config['fixtures_directory'] = __DIR__; + unset($config['naming_strategy']); + + yield [$config, ['replay', 'record', 'recorder', 'naming_strategy'], ['replay' => [2 => false]]]; + + $config['naming_strategy_options'] = [ + 'hash_headers' => ['X-FOO'], + 'hash_body_methods' => ['PATCH'], + ]; + + yield [ + $config, + ['replay', 'record', 'recorder', 'naming_strategy'], + ['naming_strategy' => [$config['naming_strategy_options']]], + ]; + } } From baff1b0175f61d8eb1bbf36a118a82541c50c301 Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Wed, 17 Apr 2019 21:28:11 +0100 Subject: [PATCH 2/7] Use string concatenation, check if plugin is installed --- src/DependencyInjection/Configuration.php | 7 ++- src/DependencyInjection/HttplugExtension.php | 55 ++++++++++++-------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 8c9bbbef..78b40583 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -5,6 +5,9 @@ use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator; use Http\Client\Common\Plugin\CachePlugin; use Http\Client\Common\Plugin\Journal; +use Http\Client\Plugin\Vcr\NamingStrategy\NamingStrategyInterface; +use Http\Client\Plugin\Vcr\Recorder\PlayerInterface; +use Http\Client\Plugin\Vcr\Recorder\RecorderInterface; use Http\Message\CookieJar; use Http\Message\Formatter; use Http\Message\StreamFactory; @@ -455,12 +458,12 @@ private function createClientPluginNode() ->cannotBeEmpty() ->end() ->scalarNode('recorder') - ->info('Which recorder to use. Can be "in_memory", "filesystem" or the ID of your service') + ->info(sprintf('Which recorder to use. Can be "in_memory", "filesystem" or the ID of your service implementing %s and %s. When using filesystem, specify "fixtures_directory" as well.', RecorderInterface::class, PlayerInterface::class)) ->defaultValue('filesystem') ->cannotBeEmpty() ->end() ->scalarNode('naming_strategy') - ->info('Which naming strategy to use. Add the ID of your service to override the default one.') + ->info(sprintf('Which naming strategy to use. Add the ID of your service implementing %s to override the default one.', NamingStrategyInterface::class)) ->defaultValue('default') ->cannotBeEmpty() ->end() diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index ca58826a..7fa28215 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -12,7 +12,6 @@ use Http\Client\Common\PluginClientFactory; use Http\Client\HttpAsyncClient; use Http\Client\HttpClient; -use Http\Client\Plugin\Vcr\NamingStrategy\PathNamingStrategy; use Http\Client\Plugin\Vcr\RecordPlugin; use Http\Client\Plugin\Vcr\ReplayPlugin; use Http\Message\Authentication\BasicAuth; @@ -38,6 +37,13 @@ */ class HttplugExtension extends Extension { + /** + * Used to check is the VCR plugin is installed. + * + * @var bool + */ + private $useVcrPlugin = false; + /** * {@inheritdoc} */ @@ -54,10 +60,6 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('mock-client.xml'); } - if (\class_exists(RecordPlugin::class)) { - $loader->load('vcr-plugin.xml'); - } - // Register default services foreach ($config['classes'] as $service => $class) { if (!empty($class)) { @@ -101,6 +103,14 @@ public function load(array $configs, ContainerBuilder $container) $container->removeAlias(HttpAsyncClient::class); $container->removeAlias(HttpClient::class); } + + if ($this->useVcrPlugin) { + if (!\class_exists(RecordPlugin::class)) { + throw new \Exception('You need to require the VCR plugin to be able to use it: "composer require --dev php-http/vcr-plugin".'); + } + + $loader->load('vcr-plugin.xml'); + } } /** @@ -375,7 +385,8 @@ private function configureClient(ContainerBuilder $container, $clientName, array $plugins = array_merge($plugins, $this->configureAuthentication($container, $pluginConfig, $serviceId.'.authentication')); break; case 'vcr': - $plugins = array_merge($plugins, $this->configureVcrPlugin($container, $pluginConfig, "$serviceId.vcr")); + + $plugins = array_merge($plugins, $this->configureVcrPlugin($container, $pluginConfig, $serviceId.'.vcr')); break; default: $plugins[] = $this->configurePlugin($container, $serviceId, $pluginName, $pluginConfig); @@ -522,7 +533,7 @@ private function configurePlugin(ContainerBuilder $container, $serviceId, $plugi { $pluginServiceId = $serviceId.'.plugin.'.$pluginName; - $definition = $this->getChildDefinition("httplug.plugin.$pluginName"); + $definition = $this->getChildDefinition('httplug.plugin.'.$pluginName); $this->configurePluginByName($pluginName, $definition, $pluginConfig, $container, $pluginServiceId); $container->setDefinition($pluginServiceId, $definition); @@ -533,26 +544,28 @@ private function configurePlugin(ContainerBuilder $container, $serviceId, $plugi private function configureVcrPlugin(ContainerBuilder $container, array $config, $prefix) { $recorder = $config['recorder']; - $recorderId = $container->hasDefinition($recorder) ? $recorder : "httplug.plugin.vcr.recorder.$recorder"; + $recorderId = $container->hasDefinition($recorder) ? $recorder : 'httplug.plugin.vcr.recorder.'.$recorder; $namingStrategyId = $config['naming_strategy']; + $replayId = $prefix.'.replay'; + $recordId = $prefix.'.record'; if ('filesystem' === $recorder) { $recorderDefinition = $this->getChildDefinition('httplug.plugin.vcr.recorder.filesystem'); $recorderDefinition->replaceArgument(0, $config['fixtures_directory']); - $recorderDefinition->setPublic(false); - $recorderId = "$prefix.recorder"; + $recorderId = $prefix.'.recorder'; $container->setDefinition($recorderId, $recorderDefinition); } if ('default' === $config['naming_strategy']) { - $namingStrategyId = "$prefix.naming_strategy"; - $namingStrategy = $container->register("$prefix.naming_strategy", PathNamingStrategy::class) - ->setPublic(false); + $namingStrategyId = $prefix.'.naming_strategy'; + $namingStrategy = $this->getChildDefinition('httplug.plugin.vcr.naming_strategy.path'); if (!empty($config['naming_strategy_options'])) { $namingStrategy->setArguments([$config['naming_strategy_options']]); } + + $container->setDefinition($namingStrategyId, $namingStrategy); } $arguments = [ @@ -565,19 +578,19 @@ private function configureVcrPlugin(ContainerBuilder $container, array $config, switch ($config['mode']) { case 'replay': - $container->setDefinition("$prefix.replay", $replay); - $plugins[] = "$prefix.replay"; + $container->setDefinition($replayId, $replay); + $plugins[] = $replayId; break; case 'replay_or_record': $replay->setArgument(2, false); - $container->setDefinition("$prefix.replay", $replay); - $container->setDefinition("$prefix.record", $record); - $plugins[] = "$prefix.replay"; - $plugins[] = "$prefix.record"; + $container->setDefinition($replayId, $replay); + $container->setDefinition($recordId, $record); + $plugins[] = $replayId; + $plugins[] = $recordId; break; case 'record': - $container->setDefinition("$prefix.record", $record); - $plugins[] = "$prefix.record"; + $container->setDefinition($recordId, $record); + $plugins[] = $recordId; break; } From 81c1c6c7de5eedd6a57376d20369c1a11553ac6b Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Thu, 18 Apr 2019 10:57:52 +0100 Subject: [PATCH 3/7] Remove default value --- src/DependencyInjection/Configuration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 78b40583..d5027de4 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -454,7 +454,7 @@ private function createClientPluginNode() ->enumNode('mode') ->info('What should be the behavior of the plugin?') ->values(['record', 'replay', 'replay_or_record']) - ->defaultValue('replay_or_record') + ->isRequired() ->cannotBeEmpty() ->end() ->scalarNode('recorder') From 1512412b7f7d40c7562f5714a9a5a37c401e1167 Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Thu, 18 Apr 2019 11:02:05 +0100 Subject: [PATCH 4/7] Check that VCR is loaded --- src/DependencyInjection/HttplugExtension.php | 4 ++-- .../Unit/DependencyInjection/HttplugExtensionTest.php | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index 7fa28215..7693546f 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -385,7 +385,7 @@ private function configureClient(ContainerBuilder $container, $clientName, array $plugins = array_merge($plugins, $this->configureAuthentication($container, $pluginConfig, $serviceId.'.authentication')); break; case 'vcr': - + $this->useVcrPlugin = true; $plugins = array_merge($plugins, $this->configureVcrPlugin($container, $pluginConfig, $serviceId.'.vcr')); break; default: @@ -544,7 +544,7 @@ private function configurePlugin(ContainerBuilder $container, $serviceId, $plugi private function configureVcrPlugin(ContainerBuilder $container, array $config, $prefix) { $recorder = $config['recorder']; - $recorderId = $container->hasDefinition($recorder) ? $recorder : 'httplug.plugin.vcr.recorder.'.$recorder; + $recorderId = in_array($recorder, ['filesystem', 'in_memory']) ? 'httplug.plugin.vcr.recorder.'.$recorder : $recorder; $namingStrategyId = $config['naming_strategy']; $replayId = $prefix.'.replay'; $recordId = $prefix.'.record'; diff --git a/tests/Unit/DependencyInjection/HttplugExtensionTest.php b/tests/Unit/DependencyInjection/HttplugExtensionTest.php index 3fb69580..715c7139 100644 --- a/tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -3,6 +3,7 @@ namespace Http\HttplugBundle\Tests\Unit\DependencyInjection; use Http\Client\HttpClient; +use Http\Client\Plugin\Vcr\Recorder\InMemoryRecorder; use Http\HttplugBundle\Collector\PluginClientFactoryListener; use Http\HttplugBundle\DependencyInjection\HttplugExtension; use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase; @@ -458,6 +459,7 @@ public function testVcrPluginConfiguration(array $config, array $services, array { $prefix = 'httplug.client.acme.vcr'; $this->load(['clients' => ['acme' => ['plugins' => [['vcr' => $config]]]]]); + $this->assertContainerBuilderHasService('httplug.plugin.vcr.recorder.in_memory', InMemoryRecorder::class); foreach ($services as $service) { $this->assertContainerBuilderHasService("$prefix.$service"); @@ -470,6 +472,15 @@ public function testVcrPluginConfiguration(array $config, array $services, array } } + /** + * @group vcr-plugin + */ + public function testIsNotLoadedUnlessNeeded() + { + $this->load(['clients' => ['acme' => ['plugins' => []]]]); + $this->assertContainerBuilderNotHasService('httplug.plugin.vcr.recorder.in_memory'); + } + public function provideVcrPluginConfig() { $config = [ From a4f94ec51fb201e4c9fcd8df0b6e6b5b235a9b3f Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Mon, 20 May 2019 11:03:00 +0200 Subject: [PATCH 5/7] Replace by string concat --- CHANGELOG.md | 4 ++++ tests/Unit/DependencyInjection/HttplugExtensionTest.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c38ab35..07f76616 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release. +### Added + +- Integration for VCR Plugin + ## 1.15.2 - 2019-04-18 ### Fixed diff --git a/tests/Unit/DependencyInjection/HttplugExtensionTest.php b/tests/Unit/DependencyInjection/HttplugExtensionTest.php index 715c7139..397f813a 100644 --- a/tests/Unit/DependencyInjection/HttplugExtensionTest.php +++ b/tests/Unit/DependencyInjection/HttplugExtensionTest.php @@ -462,12 +462,12 @@ public function testVcrPluginConfiguration(array $config, array $services, array $this->assertContainerBuilderHasService('httplug.plugin.vcr.recorder.in_memory', InMemoryRecorder::class); foreach ($services as $service) { - $this->assertContainerBuilderHasService("$prefix.$service"); + $this->assertContainerBuilderHasService($prefix.'.'.$service); } foreach ($arguments as $id => $args) { foreach ($args as $index => $value) { - $this->assertContainerBuilderHasServiceDefinitionWithArgument("$prefix.$id", $index, $value); + $this->assertContainerBuilderHasServiceDefinitionWithArgument($prefix.'.'.$id, $index, $value); } } } From 7c776e4bde7008902742b83b3769f726d06abfa8 Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Mon, 20 May 2019 11:10:38 +0200 Subject: [PATCH 6/7] Rename factory method --- src/DependencyInjection/HttplugExtension.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index 7693546f..ffc94ff0 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -533,7 +533,7 @@ private function configurePlugin(ContainerBuilder $container, $serviceId, $plugi { $pluginServiceId = $serviceId.'.plugin.'.$pluginName; - $definition = $this->getChildDefinition('httplug.plugin.'.$pluginName); + $definition = $this->createChildDefinition('httplug.plugin.'.$pluginName); $this->configurePluginByName($pluginName, $definition, $pluginConfig, $container, $pluginServiceId); $container->setDefinition($pluginServiceId, $definition); @@ -550,7 +550,7 @@ private function configureVcrPlugin(ContainerBuilder $container, array $config, $recordId = $prefix.'.record'; if ('filesystem' === $recorder) { - $recorderDefinition = $this->getChildDefinition('httplug.plugin.vcr.recorder.filesystem'); + $recorderDefinition = $this->createChildDefinition('httplug.plugin.vcr.recorder.filesystem'); $recorderDefinition->replaceArgument(0, $config['fixtures_directory']); $recorderId = $prefix.'.recorder'; @@ -559,7 +559,7 @@ private function configureVcrPlugin(ContainerBuilder $container, array $config, if ('default' === $config['naming_strategy']) { $namingStrategyId = $prefix.'.naming_strategy'; - $namingStrategy = $this->getChildDefinition('httplug.plugin.vcr.naming_strategy.path'); + $namingStrategy = $this->createChildDefinition('httplug.plugin.vcr.naming_strategy.path'); if (!empty($config['naming_strategy_options'])) { $namingStrategy->setArguments([$config['naming_strategy_options']]); @@ -600,9 +600,9 @@ private function configureVcrPlugin(ContainerBuilder $container, array $config, /** * @param string $parent the parent service id * - * @return ChildDefinition + * @return ChildDefinition|DefinitionDecorator */ - private function getChildDefinition($parent) + private function createChildDefinition($parent) { $definitionClass = class_exists(ChildDefinition::class) ? ChildDefinition::class : DefinitionDecorator::class; From cf797935afa21b7e5990043a09b45ce90e4a07d4 Mon Sep 17 00:00:00 2001 From: Gary PEGEOT Date: Mon, 20 May 2019 11:35:54 +0200 Subject: [PATCH 7/7] Add doc block --- src/DependencyInjection/HttplugExtension.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index ffc94ff0..faf1e1d5 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -598,6 +598,8 @@ private function configureVcrPlugin(ContainerBuilder $container, array $config, } /** + * BC for old Symfony versions. Remove this method and use new ChildDefinition directly when we drop support for Symfony 2. + * * @param string $parent the parent service id * * @return ChildDefinition|DefinitionDecorator