ParameterWire::appendParameter()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
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