From 579b195b320e804d689a1a14d8e02cfdc054c1a7 Mon Sep 17 00:00:00 2001 From: Peter Gribanov Date: Wed, 25 Mar 2020 11:19:05 +0300 Subject: [PATCH] allow use Symfony 5 --- .travis.yml | 6 +- src/DependencyInjection/Configuration.php | 81 +++++++++++++++++------ 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2b4e185..44e6511 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,9 +26,9 @@ matrix: dist: trusty env: SYMFONY_VERSION=3.4.* - php: 7.1 - env: SYMFONY_VERSION=4.2.* PHPUNIT_VERSION=5.7.* - - php: 7.1 - env: SYMFONY_VERSION=4.3.* PHPUNIT_VERSION=5.7.* + env: SYMFONY_VERSION=4.4.* PHPUNIT_VERSION=5.7.* + - php: 7.2 + env: SYMFONY_VERSION=5.0.* PHPUNIT_VERSION=5.7.* - php: 5.5 dist: trusty env: DOCTRINE_VERSION=2.5.* diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index d1c2310..799e6b8 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -9,6 +9,7 @@ namespace GpsLab\Bundle\DomainEvent\DependencyInjection; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; @@ -28,26 +29,68 @@ class Configuration implements ConfigurationInterface */ public function getConfigTreeBuilder() { - return (new TreeBuilder()) - ->root('gpslab_domain_event') - ->children() - ->scalarNode('bus') - ->cannotBeEmpty() - ->defaultValue('listener_located') - ->end() - ->scalarNode('queue') - ->cannotBeEmpty() - ->defaultValue('pull_memory') - ->end() - ->scalarNode('locator') - ->cannotBeEmpty() - ->defaultValue('symfony') - ->end() - ->booleanNode('publish_on_flush') - ->defaultValue(false) - ->end() - ->end() + $tree_builder = $this->createTreeBuilder('gpslab_domain_event'); + $root = $this->getRootNode($tree_builder, 'gpslab_domain_event'); + + $root + ->scalarNode('bus') + ->cannotBeEmpty() + ->defaultValue('listener_located') + ->end() + ->scalarNode('queue') + ->cannotBeEmpty() + ->defaultValue('pull_memory') + ->end() + ->scalarNode('locator') + ->cannotBeEmpty() + ->defaultValue('symfony') + ->end() + ->booleanNode('publish_on_flush') + ->defaultValue(false) ->end() ; + + return $tree_builder; + } + + /** + * @param string $name + * + * @return TreeBuilder + */ + private function createTreeBuilder($name) + { + // Symfony 4.2 + + if (method_exists(TreeBuilder::class, '__construct')) { + return new TreeBuilder($name); + } + + // Symfony 4.1 and below + return new TreeBuilder(); + } + + /** + * @param TreeBuilder $tree_builder + * @param string $name + * + * @return ArrayNodeDefinition + */ + private function getRootNode(TreeBuilder $tree_builder, $name) + { + if (method_exists($tree_builder, 'getRootNode')) { + // Symfony 4.2 + + $root = $tree_builder->getRootNode(); + } else { + // Symfony 4.1 and below + $root = $tree_builder->root($name); + } + + // @codeCoverageIgnoreStart + if (!($root instanceof ArrayNodeDefinition)) { // should be always false + throw new \RuntimeException(sprintf('The root node should be instance of %s, got %s instead.', ArrayNodeDefinition::class, get_class($root))); + } + // @codeCoverageIgnoreEnd + + return $root; } }