Completed
Push — error_reporting ( 3b2267 )
by Akihito
07:13 queued 04:12
created

NamedParameter::getErrorMessage()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 3
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Resource;
6
7
use BEAR\Resource\Exception\ParameterException;
8
use function get_class;
9
use function is_array;
10
use Ray\Di\InjectorInterface;
11
12
final class NamedParameter implements NamedParameterInterface
13
{
14
    /**
15
     * @var InjectorInterface
16
     */
17
    private $injector;
18
19
    /**
20
     * @var NamedParamMetasInterface
21
     */
22
    private $paramMetas;
23
24
    public function __construct(NamedParamMetasInterface $paramMetas, InjectorInterface $injector)
25
    {
26
        $this->paramMetas = $paramMetas;
27
        $this->injector = $injector;
28
    }
29
30
    /**
31
     * {@inheritdoc}
32
     */
33
    public function getParameters(callable $callable, array $query) : array
34
    {
35
        $metas = ($this->paramMetas)($callable);
36
        $parameters = [];
37
        foreach ($metas as $varName => $param) {
38
            /* @var $param ParamInterface */
39
            try {
40
                $parameters[] = $param($varName, $query, $this->injector);
41
            } catch (ParameterException $e) {
42
                throw new ParameterException($this->getErrorMessage($callable, $e));
43
            }
44
        }
45
46
        return $parameters;
47
    }
48
49
    private function getErrorMessage(callable $callable, ParameterException $e) : string
50
    {
51
        if (is_array($callable) && count($callable) === 2) {
52
            return sprintf('%s in %s::%s', $e->getMessage(), get_class($callable[0]), (string) $callable[1]);
53
        }
54
55
        return sprintf('%s', $e->getMessage());
56
    }
57
}
58