RequestResponseArgs   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A __invoke() 0 13 1
A resolve() 0 6 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ilex\Slim\RouteStrategies\Strategies;
6
7
use Ilex\Slim\RouteStrategies\RouteArgsResolver;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Slim\Interfaces\InvocationStrategyInterface;
11
12
final class RequestResponseArgs implements InvocationStrategyInterface
13
{
14
    /**
15
     * @var RouteArgsResolver
16
     */
17
    private $routeArgsResolver;
18
19
    /**
20
     * RequestResponseArgs constructor.
21
     *
22
     * @param RouteArgsResolver $routeArgsResolver
23
     */
24 3
    public function __construct(RouteArgsResolver $routeArgsResolver)
25
    {
26 3
        $this->routeArgsResolver = $routeArgsResolver;
27 3
    }
28
29
    /**
30
     * Invoke a Route callable.
31
     *
32
     * @param callable $callable The callable to invoke using the strategy.
33
     * @param ServerRequestInterface $serverRequest The request object.
34
     * @param ResponseInterface $response The response object.
35
     * @param array $routeArguments The Route's placeholder arguments
36
     *
37
     * @return ResponseInterface The response from the callable.
38
     */
39 3
    public function __invoke(
40
        callable $callable,
41
        ServerRequestInterface $serverRequest,
42
        ResponseInterface $response,
43
        array $routeArguments
44
    ): ResponseInterface {
45 3
        $newRouteArguments = \array_map(
46 3
            [$this, 'resolve'],
47 3
            array_keys($routeArguments),
48 3
            $routeArguments
49
        );
50
51 3
        return $callable($serverRequest, $response, ...$newRouteArguments);
52
    }
53
54
    /**
55
     * @param string $key
56
     * @param string $value
57
     *
58
     * @return mixed
59
     */
60 3
    private function resolve(string $key, string $value)
61
    {
62 3
        if ($this->routeArgsResolver->has($key)) {
63 3
            return $this->routeArgsResolver->resolve($key, $value);
64
        }
65 1
        return $value;
66
    }
67
}
68