Completed
Push — 2.0 ( 3eee89...cc0c3c )
by Andrzej
03:23
created

SetterResolver::mergeSetters()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 13
rs 9.2
cc 4
eloc 7
nc 4
nop 3
1
<?php
2
/**
3
 * This file is part of the Stack package.
4
 *
5
 * (c) Andrzej Kostrzewa <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace Stack\DI\Resolver;
12
13
14
use Stack\DI\Exception;
15
use Stack\DI\Injection\LazyInterface;
16
17
/**
18
 * Class SetterResolver
19
 *
20
 * @author Andrzej Kostrzewa <[email protected]>
21
 */
22
class SetterResolver
23
{
24
    /**
25
     * Resolve class setters params
26
     *
27
     * @param $class
28
     * @param $setters
29
     * @param array $mergeSetters
30
     *
31
     * @throws Exception\SetterMethodNotFound
32
     *
33
     * @return mixed
34
     */
35
    public function resolve($class, $setters, $mergeSetters = [])
36
    {
37
        if (!empty($mergeSetters)) {
38
            $this->mergeSetters($class, $setters, $mergeSetters);
39
        }
40
41
        return $setters;
42
    }
43
44
    /**
45
     * Merges the setters with overrides; also invokes Lazy values.
46
     *
47
     * @param string $class        The setters are on this class.
48
     * @param array  $setters      The class setters.
49
     * @param array  $mergeSetters Override with these setters.
50
     *
51
     * @throws Exception\SetterMethodNotFound
52
     *
53
     * @return null
54
     */
55
    protected function mergeSetters($class, &$setters, array $mergeSetters = [])
56
    {
57
        $setters = array_merge($setters, $mergeSetters);
58
        foreach ($setters as $method => $value) {
59
            if (!method_exists($class, $method)) {
60
                throw Exception::setterMethodNotFound($class, $method);
61
            }
62
63
            if ($value instanceof LazyInterface) {
64
                $setters[$method] = $value();
65
            }
66
        }
67
    }
68
}
69