ClassDefinition   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 21
dl 0
loc 58
rs 10
c 0
b 0
f 0
wmc 7

6 Methods

Rating   Name   Duplication   Size   Complexity  
A constructor() 0 4 1
A __construct() 0 4 1
A setClassResolver() 0 4 1
A class() 0 3 1
A getConcrete() 0 8 2
A getConstructorParameters() 0 3 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Habemus\Definition\Build;
5
6
use Habemus\Autowiring\ClassResolver;
7
use Habemus\Definition\Definition;
8
use Habemus\Definition\Identifiable\IdentifiableTrait;
9
use Habemus\Definition\MethodCall\CallableMethod;
10
use Habemus\Definition\MethodCall\CallableMethodTrait;
11
use Habemus\Definition\Sharing\Shareable;
12
use Habemus\Definition\Sharing\ShareableTrait;
13
use Habemus\Definition\Tag\Taggable;
14
use Habemus\Definition\Tag\TaggableTrait;
15
use Habemus\Exception\ContainerException;
16
use Psr\Container\ContainerInterface;
17
18
class ClassDefinition implements Definition, Shareable, CallableMethod, Taggable
19
{
20
    use IdentifiableTrait;
21
    use ShareableTrait;
22
    use CallableMethodTrait;
23
    use TaggableTrait;
24
25
    /**
26
     * @var string
27
     */
28
    protected $class;
29
30
    /**
31
     * @var array
32
     */
33
    protected $constructorParameters;
34
35
    /**
36
     * @var ClassResolver|null
37
     */
38
    protected $classResolver;
39
40
    public function __construct(string $class, array $constructor = [])
41
    {
42
        $this->class = $class;
43
        $this->constructorParameters = $constructor;
44
    }
45
46
    public function setClassResolver(ClassResolver $classResolver): self
47
    {
48
        $this->classResolver = $classResolver;
49
        return $this;
50
    }
51
52
    public function constructor(string $param, $value): self
53
    {
54
        $this->constructorParameters[$param] = $value;
55
        return $this;
56
    }
57
58
    public function getConstructorParameters(): array
59
    {
60
        return $this->constructorParameters;
61
    }
62
63
    public function class(): string
64
    {
65
        return $this->class;
66
    }
67
68
    public function getConcrete(ContainerInterface $container)
69
    {
70
        if (! $this->classResolver instanceof ClassResolver) {
71
            throw new ContainerException('No ClassResolver implementation has been set.');
72
        }
73
74
        $arguments = (new ArrayDefinition($this->constructorParameters))->getConcrete($container);
75
        return $this->classResolver->resolveClass($this->class, $arguments);
76
    }
77
}
78