diff --git a/.travis.yml b/.travis.yml index 2b4e185..1529e77 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=6.5.* + - php: 7.2 + env: SYMFONY_VERSION=5.0.* PHPUNIT_VERSION=6.5.* - php: 5.5 dist: trusty env: DOCTRINE_VERSION=2.5.* diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index d1c2310..53ea836 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,62 @@ 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() - ->end() - ; + $tree_builder = $this->createTreeBuilder('gpslab_domain_event'); + $root = $this->getRootNode($tree_builder, 'gpslab_domain_event'); + + $bus = $root->children()->scalarNode('bus'); + $bus->cannotBeEmpty()->defaultValue('listener_located'); + + $queue = $root->children()->scalarNode('queue'); + $queue->cannotBeEmpty()->defaultValue('pull_memory'); + + $locator = $root->children()->scalarNode('locator'); + $locator->cannotBeEmpty()->defaultValue('symfony'); + + $publish_on_flush = $root->children()->booleanNode('publish_on_flush'); + $publish_on_flush->defaultValue(false); + + 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; } }