RouteAttributeConfigurator::configure()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 5
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 7
ccs 6
cts 6
cp 1
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Jerowork\RouteAttributeProvider;
6
7
use Jerowork\RouteAttributeProvider\RouteLoader\Cache\CacheRouteLoaderDecorator;
8
use Jerowork\RouteAttributeProvider\RouteLoader\Roave\RegexIterator\RegexIteratorFileFinder;
9
use Jerowork\RouteAttributeProvider\RouteLoader\Roave\RoaveRouterLoader;
10
use Jerowork\RouteAttributeProvider\RouteLoader\RouteLoaderInterface;
11
use Psr\SimpleCache\CacheInterface;
12
13
final class RouteAttributeConfigurator
14
{
15
    private RouteLoaderInterface $routeLoader;
16
17
    /**
18
     * @var string[] $directories
19
     */
20
    private array $directories = [];
21
22 3
    public function __construct(
23
        private RouteAttributeProviderInterface $routeAttributeProvider,
24
        ?RouteLoaderInterface $routeLoader = null,
25
    ) {
26 3
        $this->routeLoader = $routeLoader ?? new RoaveRouterLoader(new RegexIteratorFileFinder());
27
    }
28
29 1
    public function addDirectory(string ...$directories) : self
30
    {
31 1
        foreach ($directories as $directory) {
32 1
            $this->directories[] = $directory;
33
        }
34
35 1
        return $this;
36
    }
37
38 1
    public function enableCache(CacheInterface $cache) : self
39
    {
40 1
        $this->routeLoader = new CacheRouteLoaderDecorator($this->routeLoader, $cache);
41
42 1
        return $this;
43
    }
44
45 1
    public function configure() : void
46
    {
47 1
        foreach ($this->routeLoader->addDirectory(...$this->directories)->getRoutes() as $loadedRoute) {
48 1
            $this->routeAttributeProvider->configure(
49 1
                $loadedRoute->getClassName(),
50 1
                $loadedRoute->getMethodName(),
51 1
                $loadedRoute->getRoute()
52 1
            );
53
        }
54
    }
55
56 2
    public function getRouteLoader() : RouteLoaderInterface
57
    {
58 2
        return $this->routeLoader;
59
    }
60
}
61