RouteAttributeConfigurator::getRouteLoader()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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