DecoratingCallableResolver::resolve()   A
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 6
cts 6
cp 1
rs 9.7998
c 0
b 0
f 0
cc 4
nc 2
nop 1
crap 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Nastoletni\Code\Slim;
6
7
use Nastoletni\Code\UserInterface\Controller\AbstractController;
8
use Nastoletni\Code\UserInterface\Controller\ControllerDecorator;
9
use Psr\Container\ContainerInterface;
10
use Slim\CallableResolver;
11
use Slim\Interfaces\CallableResolverInterface;
12
13
class DecoratingCallableResolver implements CallableResolverInterface
14
{
15
    /**
16
     * @var CallableResolver
17
     */
18
    private $callableResolver;
19
20
    /**
21
     * @var ControllerDecorator
22
     */
23
    private $controllerDecorator;
24
25
    /**
26
     * DecoratingCallableResolver constructor.
27
     *
28
     * @param ContainerInterface  $container
29
     * @param ControllerDecorator $controllerDecorator
30
     */
31 5
    public function __construct(
32
        ContainerInterface $container,
33
        ControllerDecorator $controllerDecorator
34
    ) {
35 5
        $this->callableResolver = new CallableResolver($container);
36 5
        $this->controllerDecorator = $controllerDecorator;
37 5
    }
38
39
    /**
40
     * Invokes resolved callable and decorates it if is a subclass
41
     * of AbstractController.
42
     *
43
     * @param mixed $toResolve
44
     *
45
     * @return callable
46
     */
47 5
    public function resolve($toResolve): callable
48
    {
49 5
        $resolved = $this->callableResolver->resolve($toResolve);
50
51
        // Check against resolved value for callable class or against first
52
        // value for callable array.
53 5
        if (($controller = $resolved) instanceof AbstractController
54 5
            || is_array($controller) && ($controller = $resolved[0]) instanceof AbstractController) {
55
            /* @var $controller AbstractController */
56 4
            $this->controllerDecorator->decorate($controller);
57
        }
58
59 5
        return $resolved;
60
    }
61
}
62