Completed
Push — master ( e0cdcf...eeff10 )
by Simone
02:17
created

Container   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 4
dl 0
loc 79
ccs 40
cts 40
cp 1
rs 10
c 0
b 0
f 0

9 Methods

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