Completed
Push — master ( e9d1ee...cb5c09 )
by Théo
06:38
created

ContainerBuilder::setParameter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 2
Metric Value
c 2
b 0
f 2
dl 0
loc 4
ccs 0
cts 3
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 2
crap 2
1
<?php
2
3
/*
4
 * This file is part of the LaravelYaml package.
5
 *
6
 * (c) Théo FIDRY <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Fidry\LaravelYaml\DependencyInjection\Builder;
13
14
use Fidry\LaravelYaml\DependencyInjection\Definition;
15
use Fidry\LaravelYaml\DependencyInjection\Definition\Alias;
16
use Fidry\LaravelYaml\DependencyInjection\Definition\DecorationInterface;
17
use Fidry\LaravelYaml\DependencyInjection\Definition\Reference;
18
use Fidry\LaravelYaml\DependencyInjection\Definition\Service;
19
use Fidry\LaravelYaml\DependencyInjection\Definition\ServiceInterface;
20
use Illuminate\Contracts\Foundation\Application;
21
use Symfony\Component\ExpressionLanguage\Expression;
22
23
/**
24
 * @author Théo FIDRY <[email protected]>
25
 */
26
final class ContainerBuilder implements BuilderInterface
27
{
28
    /**
29
     * @var Alias[]
30
     */
31
    private $aliases = [];
32
33
    /**
34
     * @var array
35
     */
36
    private $parameters = [];
37
38
    /**
39
     * @var ServiceInterface[]
40
     */
41
    private $services = [];
42
43
    /**
44
     * @var BuilderInterface|null
45
     */
46
    private $parametersBuilder;
47
48
    /**
49
     * @var BuilderInterface|null
50
     */
51
    private $aliasesBuilder;
52
53
    /**
54
     * @var BuilderInterface|null
55
     */
56
    private $servicesBuilder;
57
58 3
    public function __construct(
59
        BuilderInterface $parametersBuilder = null,
60
        BuilderInterface $aliasesBuilder = null,
61
        BuilderInterface $servicesBuilder = null
62
    ) {
63 3
        $this->parametersBuilder = $parametersBuilder;
64 3
        $this->aliasesBuilder = $aliasesBuilder;
65 3
        $this->servicesBuilder = $servicesBuilder;
66 3
    }
67
68
    /**
69
     * @param string                            $key
70
     * @param array|Reference|string|Expression $value
71
     */
72
    public function setParameter($key, $value)
73
    {
74
        $this->parameters[$key] = $value;
75
    }
76
77
    /**
78
     * @param Alias $alias
79
     */
80
    public function addAlias(Alias $alias)
81
    {
82
        $this->aliases[$alias->getAlias()] = $alias;
83
    }
84
85
    /**
86
     * @param ServiceInterface $service
87
     */
88
    public function addService(ServiceInterface $service)
89
    {
90
        if ($service instanceof DecorationInterface) {
91
            $inner = $this->services[$service->getDecoration()[0]];
92
            $this->services[$service->getDecoration()[1]] = Service::createFromDecoration($inner, $service);
93
            $this->services[$service->getDecoration()[0]] = $service;
94
95
            return;
96
        }
97
98
        $this->services[$service->getName()] = $service;
99
    }
100
101 3
    public function build(Application $application)
102
    {
103 3
        $parametersBuilder = (null === $this->parametersBuilder)
104 1
            ? new ParametersBuilder($this->parameters)
105 3
            : $this->parametersBuilder
106 1
        ;
107 3
        $parameters = $parametersBuilder->build($application);
108
109 3
        $servicesBuilder = (null === $this->servicesBuilder)
110 1
            ? new ServicesBuilder($this->services, $parameters)
111 3
            : $this->servicesBuilder
112 1
        ;
113 3
        $servicesBuilder->build($application);
114
115 3
        $aliasesBuilder = (null === $this->aliasesBuilder)
116 1
            ? new AliasesBuilder($this->aliases)
117 3
            : $this->aliasesBuilder
118 1
        ;
119 3
        $aliasesBuilder->build($application);
120 3
    }
121
}
122