RouteArgsResolver   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 54
ccs 15
cts 15
cp 1
rs 10
c 0
b 0
f 0
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A isValid() 0 8 3
A has() 0 3 1
A add() 0 8 2
A resolve() 0 3 1
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 8
    public function add(RouteArgsResolverInterface $routeArgsResolver): self
24
    {
25 8
        $keys = $routeArgsResolver->getArgsResolver();
26 8
        foreach ($keys as $key => $callable) {
27 8
            $this->isValid($key, $callable);
28 7
            $this->resolvers[$key] = $callable;
29
        }
30 7
        return $this;
31
    }
32
33
    /**
34
     * @param string $key
35
     * @param string $value
36
     *
37
     * @return mixed
38
     */
39 4
    public function resolve(string $key, string $value)
40
    {
41 4
        return $this->resolvers[$key]($value);
42
    }
43
44 4
    public function has(string $key): bool
45
    {
46 4
        return isset($this->resolvers[$key]);
47
    }
48
49
    /**
50
     * @param string $key
51
     * @param mixed $callable
52
     *
53
     * @throws RouteArgsResolverException
54
     */
55 8
    private function isValid(string $key, $callable): void
56
    {
57 8
        if (\array_key_exists($key, $this->resolvers)) {
58 1
            throw RouteArgsResolverException::keyAlreadyExist($key);
59
        }
60
61 8
        if (!\is_callable($callable)) {
62 1
            throw RouteArgsResolverException::isNotCallable($key);
63
        }
64 7
    }
65
}
66