From 17d6307f4b3452827bfd7c68382479c62ac6989d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rk=20S=C3=A1gi-Kaz=C3=A1r?= Date: Mon, 25 Jul 2016 14:32:15 +0200 Subject: [PATCH] Rename toolbar config to profiling --- CHANGELOG.md | 1 + DependencyInjection/Configuration.php | 36 +++- DependencyInjection/HttplugExtension.php | 14 +- .../Fixtures/config/bc/profiling_toolbar.yml | 4 + .../Resources/Fixtures/config/bc/toolbar.yml | 5 + .../Fixtures/config/{ => bc}/toolbar_auto.yml | 0 Tests/Resources/Fixtures/config/full.php | 2 +- Tests/Resources/Fixtures/config/full.xml | 2 +- Tests/Resources/Fixtures/config/full.yml | 2 +- .../DependencyInjection/ConfigurationTest.php | 159 ++++++++++-------- 10 files changed, 138 insertions(+), 87 deletions(-) create mode 100644 Tests/Resources/Fixtures/config/bc/profiling_toolbar.yml create mode 100644 Tests/Resources/Fixtures/config/bc/toolbar.yml rename Tests/Resources/Fixtures/config/{ => bc}/toolbar_auto.yml (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94a2851f..573e2e73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### Deprecated - `auto` value in `toolbar.enabled` config +- `toolbar` config, use `profiling` instead ## 1.2.2 - 2016-07-19 diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 8a1c8a9f..f6ef7e4f 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -69,6 +69,29 @@ public function getConfigTreeBuilder() return $v; }) ->end() + ->beforeNormalization() + ->ifTrue(function ($v) { + return is_array($v) && array_key_exists('toolbar', $v) && is_array($v['toolbar']); + }) + ->then(function ($v) { + if (array_key_exists('profiling', $v)) { + throw new InvalidConfigurationException('Can\'t configure both "toolbar" and "profiling" section. The "toolbar" config is deprecated as of version 1.3.0, please only use "profiling".'); + } + + @trigger_error('"httplug.toolbar" config is deprecated since version 1.3 and will be removed in 2.0. Use "httplug.profiling" instead.', E_USER_DEPRECATED); + + if (array_key_exists('enabled', $v['toolbar']) && 'auto' === $v['toolbar']['enabled']) { + @trigger_error('"auto" value in "httplug.toolbar" config is deprecated since version 1.3 and will be removed in 2.0. Use a boolean value instead.', E_USER_DEPRECATED); + $v['toolbar']['enabled'] = $this->debug; + } + + $v['profiling'] = $v['toolbar']; + + unset($v['toolbar']); + + return $v; + }) + ->end() ->children() ->arrayNode('main_alias') ->addDefaultsIfNotSet() @@ -90,17 +113,14 @@ public function getConfigTreeBuilder() ->scalarNode('stream_factory')->defaultNull()->end() ->end() ->end() - ->arrayNode('toolbar') + ->arrayNode('profiling') ->addDefaultsIfNotSet() + ->treatFalseLike(['enabled' => false]) + ->treatTrueLike(['enabled' => true]) + ->treatNullLike(['enabled' => $this->debug]) ->info('Extend the debug profiler with information about requests.') ->children() - ->booleanNode('enabled') // @deprecated value auto in 1.3.0 - ->beforeNormalization() - ->ifString() - ->then(function ($v) { - return 'auto' === $v ? $this->debug : $v; - }) - ->end() + ->booleanNode('enabled') ->info('Turn the toolbar on or off. Defaults to kernel debug mode.') ->defaultValue($this->debug) ->end() diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index f1b78988..53fa06e5 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -53,20 +53,20 @@ public function load(array $configs, ContainerBuilder $container) } // Configure toolbar - if ($config['toolbar']['enabled']) { + if ($config['profiling']['enabled']) { $loader->load('data-collector.xml'); - if (!empty($config['toolbar']['formatter'])) { + if (!empty($config['profiling']['formatter'])) { // Add custom formatter $container ->getDefinition('httplug.collector.debug_collector') - ->replaceArgument(0, new Reference($config['toolbar']['formatter'])) + ->replaceArgument(0, new Reference($config['profiling']['formatter'])) ; } $container ->getDefinition('httplug.formatter.full_http_message') - ->addArgument($config['toolbar']['captured_body_length']) + ->addArgument($config['profiling']['captured_body_length']) ; } @@ -91,7 +91,7 @@ private function configureClients(ContainerBuilder $container, array $config) $first = $name; } - $this->configureClient($container, $name, $arguments, $config['toolbar']['enabled']); + $this->configureClient($container, $name, $arguments, $config['profiling']['enabled']); } // If we have clients configured @@ -294,7 +294,7 @@ private function configureAutoDiscoveryClients(ContainerBuilder $container, arra $container, 'auto_discovered_client', [HttpClientDiscovery::class, 'find'], - $config['toolbar']['enabled'] + $config['profiling']['enabled'] ); } @@ -309,7 +309,7 @@ private function configureAutoDiscoveryClients(ContainerBuilder $container, arra $container, 'auto_discovered_async', [HttpAsyncClientDiscovery::class, 'find'], - $config['toolbar']['enabled'] + $config['profiling']['enabled'] ); } diff --git a/Tests/Resources/Fixtures/config/bc/profiling_toolbar.yml b/Tests/Resources/Fixtures/config/bc/profiling_toolbar.yml new file mode 100644 index 00000000..079e6ade --- /dev/null +++ b/Tests/Resources/Fixtures/config/bc/profiling_toolbar.yml @@ -0,0 +1,4 @@ +httplug: + profiling: ~ + toolbar: + enabled: auto diff --git a/Tests/Resources/Fixtures/config/bc/toolbar.yml b/Tests/Resources/Fixtures/config/bc/toolbar.yml new file mode 100644 index 00000000..380413de --- /dev/null +++ b/Tests/Resources/Fixtures/config/bc/toolbar.yml @@ -0,0 +1,5 @@ +httplug: + toolbar: + enabled: true + formatter: null + captured_body_length: 0 diff --git a/Tests/Resources/Fixtures/config/toolbar_auto.yml b/Tests/Resources/Fixtures/config/bc/toolbar_auto.yml similarity index 100% rename from Tests/Resources/Fixtures/config/toolbar_auto.yml rename to Tests/Resources/Fixtures/config/bc/toolbar_auto.yml diff --git a/Tests/Resources/Fixtures/config/full.php b/Tests/Resources/Fixtures/config/full.php index 5574b461..0a8ab554 100644 --- a/Tests/Resources/Fixtures/config/full.php +++ b/Tests/Resources/Fixtures/config/full.php @@ -13,7 +13,7 @@ 'uri_factory' => 'Http\Message\UriFactory\GuzzleUriFactory', 'stream_factory' => 'Http\Message\StreamFactory\GuzzleStreamFactory', ], - 'toolbar' => [ + 'profiling' => [ 'enabled' => true, 'formatter' => 'my_toolbar_formatter', 'captured_body_length' => 0, diff --git a/Tests/Resources/Fixtures/config/full.xml b/Tests/Resources/Fixtures/config/full.xml index acc8018b..e0ded54b 100644 --- a/Tests/Resources/Fixtures/config/full.xml +++ b/Tests/Resources/Fixtures/config/full.xml @@ -14,7 +14,7 @@ Http\Message\UriFactory\GuzzleUriFactory Http\Message\StreamFactory\GuzzleStreamFactory - + diff --git a/Tests/Resources/Fixtures/config/full.yml b/Tests/Resources/Fixtures/config/full.yml index 1dde759f..72341e8e 100644 --- a/Tests/Resources/Fixtures/config/full.yml +++ b/Tests/Resources/Fixtures/config/full.yml @@ -9,7 +9,7 @@ httplug: message_factory: Http\Message\MessageFactory\GuzzleMessageFactory uri_factory: Http\Message\UriFactory\GuzzleUriFactory stream_factory: Http\Message\StreamFactory\GuzzleStreamFactory - toolbar: + profiling: enabled: true formatter: my_toolbar_formatter captured_body_length: 0 diff --git a/Tests/Unit/DependencyInjection/ConfigurationTest.php b/Tests/Unit/DependencyInjection/ConfigurationTest.php index 5fd30e15..df931ea3 100644 --- a/Tests/Unit/DependencyInjection/ConfigurationTest.php +++ b/Tests/Unit/DependencyInjection/ConfigurationTest.php @@ -11,7 +11,69 @@ */ class ConfigurationTest extends AbstractExtensionConfigurationTestCase { - private $debug = true; + private $emptyConfig = [ + 'main_alias' => [ + 'client' => 'httplug.client.default', + 'message_factory' => 'httplug.message_factory.default', + 'uri_factory' => 'httplug.uri_factory.default', + 'stream_factory' => 'httplug.stream_factory.default', + ], + 'classes' => [ + 'client' => null, + 'message_factory' => null, + 'uri_factory' => null, + 'stream_factory' => null, + ], + 'clients' => [], + 'profiling' => [ + 'enabled' => true, + 'formatter' => null, + 'captured_body_length' => 0, + ], + 'plugins' => [ + 'authentication' => [], + 'cache' => [ + 'enabled' => false, + 'stream_factory' => 'httplug.stream_factory', + 'config' => [ + 'default_ttl' => null, + 'respect_cache_headers' => true, + ], + ], + 'cookie' => [ + 'enabled' => false, + ], + 'decoder' => [ + 'enabled' => true, + 'use_content_encoding' => true, + ], + 'history' => [ + 'enabled' => false, + ], + 'logger' => [ + 'enabled' => true, + 'logger' => 'logger', + 'formatter' => null, + ], + 'redirect' => [ + 'enabled' => true, + 'preserve_header' => true, + 'use_default_for_multiple' => true, + ], + 'retry' => [ + 'enabled' => true, + 'retry' => 1, + ], + 'stopwatch' => [ + 'enabled' => true, + 'stopwatch' => 'debug.stopwatch', + ], + ], + 'discovery' => [ + 'client' => 'auto', + 'async_client' => null, + ], + ]; protected function getContainerExtension() { @@ -20,86 +82,21 @@ protected function getContainerExtension() protected function getConfiguration() { - return new Configuration($this->debug); + return new Configuration(true); } public function testEmptyConfiguration() { - $expectedConfiguration = [ - 'main_alias' => [ - 'client' => 'httplug.client.default', - 'message_factory' => 'httplug.message_factory.default', - 'uri_factory' => 'httplug.uri_factory.default', - 'stream_factory' => 'httplug.stream_factory.default', - ], - 'classes' => [ - 'client' => null, - 'message_factory' => null, - 'uri_factory' => null, - 'stream_factory' => null, - ], - 'clients' => [], - 'toolbar' => [ - 'enabled' => true, - 'formatter' => null, - 'captured_body_length' => 0, - ], - 'plugins' => [ - 'authentication' => [], - 'cache' => [ - 'enabled' => false, - 'stream_factory' => 'httplug.stream_factory', - 'config' => [ - 'default_ttl' => null, - 'respect_cache_headers' => true, - ], - ], - 'cookie' => [ - 'enabled' => false, - ], - 'decoder' => [ - 'enabled' => true, - 'use_content_encoding' => true, - ], - 'history' => [ - 'enabled' => false, - ], - 'logger' => [ - 'enabled' => true, - 'logger' => 'logger', - 'formatter' => null, - ], - 'redirect' => [ - 'enabled' => true, - 'preserve_header' => true, - 'use_default_for_multiple' => true, - ], - 'retry' => [ - 'enabled' => true, - 'retry' => 1, - ], - 'stopwatch' => [ - 'enabled' => true, - 'stopwatch' => 'debug.stopwatch', - ], - ], - 'discovery' => [ - 'client' => 'auto', - 'async_client' => null, - ], - ]; - $formats = array_map(function ($path) { return __DIR__.'/../../Resources/Fixtures/'.$path; }, [ 'config/empty.yml', 'config/empty.xml', 'config/empty.php', - 'config/toolbar_auto.yml', ]); foreach ($formats as $format) { - $this->assertProcessedConfigurationEquals($expectedConfiguration, [$format]); + $this->assertProcessedConfigurationEquals($this->emptyConfig, [$format]); } } @@ -119,7 +116,7 @@ public function testSupportsAllConfigFormats() 'stream_factory' => 'Http\Message\StreamFactory\GuzzleStreamFactory', ], 'clients' => [], - 'toolbar' => [ + 'profiling' => [ 'enabled' => true, 'formatter' => 'my_toolbar_formatter', 'captured_body_length' => 0, @@ -223,4 +220,28 @@ public function testInvalidAuthentication() $file = __DIR__.'/../../Resources/Fixtures/config/invalid_auth.yml'; $this->assertProcessedConfigurationEquals([], [$file]); } + + public function testBackwardCompatibility() + { + $formats = array_map(function ($path) { + return __DIR__.'/../../Resources/Fixtures//'.$path; + }, [ + 'config/bc/toolbar.yml', + 'config/bc/toolbar_auto.yml', + ]); + + foreach ($formats as $format) { + $this->assertProcessedConfigurationEquals($this->emptyConfig, [$format]); + } + } + + /** + * @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException + * @expectedExceptionMessage Can't configure both "toolbar" and "profiling" section. The "toolbar" config is deprecated as of version 1.3.0, please only use "profiling". + */ + public function testProfilingToolbarCollision() + { + $file = __DIR__.'/../../Resources/Fixtures/config/bc/profiling_toolbar.yml'; + $this->assertProcessedConfigurationEquals([], [$file]); + } }