Passed
Push — master ( 5e3751...3e209e )
by Phillip
03:46
created

ComposerDirectoryNamespaceLocatorStrategy   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Test Coverage

Coverage 90.48%

Importance

Changes 0
Metric Value
wmc 10
eloc 20
dl 0
loc 60
ccs 19
cts 21
cp 0.9048
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A locateInDirectory() 0 16 5
A locate() 0 16 4
1
<?php
2
3
4
namespace Deployee\Components\Plugins\Locator;
5
6
7
use Composer\Autoload\ClassLoader;
8
9
class ComposerDirectoryNamespaceLocatorStrategy implements LocatorStrategyInterface
10
{
11
    use IsPluginTrait;
12
13
    /**
14
     * @var ClassLoader
15
     */
16
    private $classLoader;
17
18
    /**
19
     * ComposerNamespaceLocatorStrategy constructor.
20
     * @param ClassLoader $classLoader
21
     */
22 2
    public function __construct(ClassLoader $classLoader)
23
    {
24 2
        $this->classLoader = $classLoader;
25 2
    }
26
27
    /**
28
     * @return array
29
     */
30 2
    public function locate(): array
31
    {
32 2
        $list = [[]];
33
34 2
        foreach($this->classLoader->getPrefixesPsr4() as $namespace => $rootDirs){
35 2
            foreach($rootDirs as $rootDir){
36 2
                if(!is_dir($rootDir)){
37
                    trigger_error(sprintf('Composer directory %s does not exist', $rootDir), E_USER_WARNING);
38
                    continue;
39
                }
40
41 2
                $list[] = $this->locateInDirectory($namespace, $rootDir);
42
            }
43
        }
44
45 2
        return array_merge(...$list);
46
    }
47
48
    /**
49
     * @param string $rootNamespace
50
     * @param string $rootDir
51
     * @return array
52
     */
53 2
    private function locateInDirectory(string $rootNamespace, string $rootDir): array
54
    {
55 2
        $list = [];
56 2
        foreach(new \DirectoryIterator($rootDir) as $iterator){
57 2
            if($iterator->isFile() || $iterator->isDot()){
58 2
                continue;
59
            }
60
61 2
            $expectedClass = $rootNamespace . sprintf('%1$s\\%1$sPlugin', $iterator->getBasename());
62 2
            if($this->isPlugin($expectedClass)){
63
64 2
                $list[] = $expectedClass;
65
            }
66
        }
67
68 2
        return $list;
69
    }
70
}