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]);
+ }
}