Passed
Push — master ( 105211...daec44 )
by Simone
30s
created

Container::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Sensorario\Container;
4
5
use ReflectionClass;
6
7
class Container
8
{
9
    private $services = [];
10
11
    private $builder;
12
13
    private $resolver;
14
15 9
    public function __construct()
16
    {
17 9
        $this->resolver = new Resolver();
18 9
    }
19
20 2
    public function setArgumentBuilder(ArgumentBuilder $builder)
21
    {
22 2
        $this->builder = $builder;
23 2
        $this->builder->setContainer($this);
24 2
    }
25
26 8
    public function loadServices(array $services)
27
    {
28 8
        $this->services = $services;
29 8
    }
30
31 1
    public function getServicesConfiguration()
32
    {
33 1
        return $this->services;
34
    }
35
36 6
    private function ensureServiceIsDefined($serviceName)
37
    {
38 6
        if (!$this->contains($serviceName)) {
39 1
            throw new \RuntimeException(
40 1
                'Oops! Service ' . $serviceName . ' not defined'
41
            );
42
        }
43 5
    }
44
45 3
    private function ensureBuilderIsDefined()
46
    {
47 3
        if (!$this->builder) {
48 1
            throw new \RuntimeException(
49 1
                'Oops! No builder, no party!'
50
            );
51
        }
52 2
    }
53
54 6
    public function get(string $serviceName)
55
    {
56 6
        $this->ensureServiceIsDefined($serviceName);
57
58 5
        $service = Objects\Service::box([
59 5
            'name' => $serviceName,
60 5
            'services' => $this->services,
61
        ]);
62
63 5
        if ($service->isConstructorEmpty()) {
64 4
            return $this->resolver->simpleResolver($service);
65
        }
66
67 3
        $this->ensureBuilderIsDefined();
68
69 2
        return $this->resolver->resolve($service, $this->builder);
70
    }
71
72 7
    public function contains(string $serviceName)
73
    {
74 7
        $service = Objects\Argument::fromString($serviceName);
75 7
        return isset($this->services[$service->getServiceName()]);
76
    }
77
78 1
    public function hasArguments($serviceName)
79
    {
80 1
        return isset($this->services[$serviceName]['params']);
81
    }
82
}
83