RouteAttributeConfigurator   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 46
ccs 18
cts 18
cp 1
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getRouteLoader() 0 3 1
A configure() 0 7 2
A enableCache() 0 5 1
A addDirectory() 0 7 2
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