Configuration::createBridgeNode()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 21
rs 9.3142
c 0
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace TomCizek\AsynchronousRouter\DependencyInjection;
6
7
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
8
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
9
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
10
use Symfony\Component\Config\Definition\ConfigurationInterface;
11
12
final class Configuration implements ConfigurationInterface
13
{
14
    /**
15
     * Normalizes XML config and defines config tree
16
     * {@inheritdoc}
17
     */
18
    public function getConfigTreeBuilder(): TreeBuilder
19
    {
20
        $treeBuilder = new TreeBuilder();
21
        /** @var ArrayNodeDefinition $rootNode Help phpstan */
22
        $rootNode = $treeBuilder->root('prooph_asynchronous_messaging');
23
        $rootNode
24
            ->fixXmlConfig('producer', 'producers')
25
            ->children()
26
                ->arrayNode('producers')
27
                ->useAttributeAsKey('name')
28
                    ->arrayPrototype()
29
                        ->children()
30
                            ->append($this->createBridgeNode())
31
                            ->append($this->createRoutesNode())
32
                        ->end()
33
                    ->end()
34
                ->end()
35
            ->end();
36
37
        return $treeBuilder;
38
    }
39
40
    private function createRoutesNode(): NodeDefinition
41
    {
42
        $treeBuilder = new TreeBuilder();
43
        /** @var ArrayNodeDefinition $routesNode */
44
        $routesNode = $treeBuilder->root('routes');
45
        $routesNode->useAttributeAsKey('message');
46
        $routingKeyNode = $routesNode->scalarPrototype();
47
        $routingKeyNode->end();
48
49
        return $routesNode;
50
    }
51
52
    private function createBridgeNode(): NodeDefinition
53
    {
54
        $treeBuilder = new TreeBuilder();
55
        /** @var ArrayNodeDefinition $bridgeNode */
56
        $bridgeNode = $treeBuilder->root('bridge', 'scalar');
57
        $bridgeNode
58
            ->beforeNormalization()
59
            ->ifTrue(
60
                function ($v) {
61
                    return strpos($v, '@') === 0;
62
                }
63
            )
64
            ->then(
65
                function ($v) {
66
                    return substr($v, 1);
67
                }
68
            )
69
            ->end();
70
71
        return $bridgeNode;
72
    }
73
}
74