Passed
Push — master ( c7fd7e...983baa )
by iLex
05:47 queued 11s
created

RouteArgsResolver::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 0
dl 0
loc 2
ccs 1
cts 1
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ilex\Slim\RouteStrategies;
6
7
use Ilex\Slim\RouteStrategies\Exception\RouteArgsResolverException;
8
9
final class RouteArgsResolver
10
{
11
    /**
12
     * @var callable[]
13
     */
14
    private $resolvers = [];
15
16
    /**
17
     * @param RouteArgsResolverInterface $routeArgsResolver
18
     *
19
     * @return RouteArgsResolver
20
     *
21
     * @throws RouteArgsResolverException
22
     */
23 7
    public function add(RouteArgsResolverInterface $routeArgsResolver): self
24
    {
25 7
        $keys = $routeArgsResolver->getArgsResolver();
26 7
        foreach ($keys as $key => $callable) {
27 7
            $this->isValid($key, $callable);
28 6
            $this->resolvers[$key] = $callable;
29
        }
30 6
        return $this;
31
    }
32
33
    /**
34
     * @param string $key
35
     * @param string $value
36
     *
37
     * @return mixed
38
     */
39 3
    public function resolve(string $key, string $value)
40
    {
41 3
        return $this->resolvers[$key]($value);
42
    }
43
44 3
    public function has(string $key): bool
45
    {
46 3
        return isset($this->resolvers[$key]);
47
    }
48
49
    /**
50
     * @param string $key
51
     * @param mixed $callable
52
     *
53
     * @throws RouteArgsResolverException
54
     */
55 7
    private function isValid(string $key, $callable): void
56
    {
57 7
        if (\array_key_exists($key, $this->resolvers)) {
58 1
            throw RouteArgsResolverException::keyAlreadyExist($key);
59
        }
60
61 7
        if (!\is_callable($callable)) {
62 1
            throw RouteArgsResolverException::isNotCallable($key);
63
        }
64 6
    }
65
}
66