Passed
Push — main ( c1a481...89a1c8 )
by Jeroen
02:41 queued 01:15
created

RouteAttributeConfigurator::configureForClassName()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

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