ParameterWire   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
c 1
b 0
f 0
lcom 1
cbo 3
dl 0
loc 55
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A appendParameter() 0 7 1
A appendParameterCallback() 0 4 1
A injectParameter() 0 11 3
A makeParameter() 0 15 3
A lazyCallback() 0 4 1
A lazy() 0 4 1
1
<?php
2
3
namespace Core;
4
5
use Prob\Handler\ParameterMap;
6
use Prob\Handler\ParameterInterface;
7
8
class ParameterWire
9
{
10
    private static $parameters = [];
11
12
    public static function appendParameter(ParameterInterface $key, $value)
13
    {
14
        self::$parameters[] = [
15
            'key' => $key,
16
            'value' => $value
17
        ];
18
    }
19
20
    public static function appendParameterCallback(LazyWiringParameterCallback $callback)
21
    {
22
        self::$parameters[] = $callback;
23
    }
24
25
    public static function injectParameter(ParameterMap $map)
26
    {
27
        $buildedParameters = self::makeParameter();
28
29
        foreach ($buildedParameters as $v) {
30
            $value = $v['value'] instanceof LazyWiringParameter ? $v['value']->exec() : $v['value'];
31
            $map->bindBy($v['key'], $value);
32
        }
33
34
        return $map;
35
    }
36
37
    private static function makeParameter()
38
    {
39
        $buildedParameters = [];
40
41
        foreach (self::$parameters as $v) {
42
            if ($v instanceof LazyWiringParameterCallback) {
43
                $buildedParameters = array_merge($buildedParameters, $v->exec());
44
                continue;
45
            }
46
47
            $buildedParameters[] = $v;
48
        }
49
50
        return $buildedParameters;
51
    }
52
53
    public static function lazyCallback(callable $func)
54
    {
55
        return new LazyWiringParameterCallback($func);
56
    }
57
58
    public static function lazy(callable $parameter)
59
    {
60
        return new LazyWiringParameter($parameter);
61
    }
62
}
63