Completed
Push — master ( 870291...b9fe13 )
by Tomáš
03:25
created

ControllerFinder   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 45
ccs 21
cts 21
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A findControllersInDirs() 0 18 2
A prepareServiceKeys() 0 10 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Symplify
7
 * Copyright (c) 2015 Tomas Votruba (http://tomasvotruba.cz).
8
 */
9
10
namespace Symplify\ControllerAutowire\HttpKernel\Controller;
11
12
use Nette\Caching\Storages\DevNullStorage;
13
use Nette\Loaders\RobotLoader;
14
use Symplify\ControllerAutowire\Contract\HttpKernel\ControllerFinderInterface;
15
16
final class ControllerFinder implements ControllerFinderInterface
17
{
18
    /**
19
     * @var string
20
     */
21
    private $namePart;
22
23 4
    public function __construct(string $namePart = 'Controller')
24
    {
25 4
        $this->namePart = $namePart;
26 4
    }
27
28
    /**
29
     * {@inheritdoc}
30
     */
31 4
    public function findControllersInDirs(array $dirs) : array
32
    {
33 4
        $robot = new RobotLoader();
34 4
        $robot->setCacheStorage(new DevNullStorage());
35 4
        foreach ($dirs as $dir) {
36 4
            $robot->addDirectory($dir);
37
        }
38 4
        $robot->ignoreDirs .= ', Tests';
39 4
        $robot->acceptFiles = '*' . $this->namePart . '.php';
40 4
        $robot->rebuild();
41
42 4
        $controllerClasses = array_keys($robot->getIndexedClasses());
43 4
        sort($controllerClasses);
44
45 4
        $controllerClasses = $this->prepareServiceKeys($controllerClasses);
46
47 4
        return $controllerClasses;
48
    }
49
50 4
    private function prepareServiceKeys(array $controllerClasses) : array
51
    {
52 4
        $controllerClassesWithKeys = [];
53 4
        foreach ($controllerClasses as $key => $controllerClass) {
54 4
            $key = strtr(strtolower($controllerClass), ['\\' => '.']);
55 4
            $controllerClassesWithKeys[$key] = $controllerClass;
56
        }
57
58 4
        return $controllerClassesWithKeys;
59
    }
60
}
61