Passed
Push — master ( d77b4c...5fea4d )
by Phillip
01:15
created

ComposerDirectoryNamespaceLocatorStrategy::isPluginNamespace()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
c 0
b 0
f 0
rs 10
cc 2
nc 2
nop 1
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 1
    public function __construct(ClassLoader $classLoader)
23
    {
24 1
        $this->classLoader = $classLoader;
25 1
    }
26
27
    /**
28
     * @return array
29
     */
30 1
    public function locate(): array
31
    {
32 1
        $list = [];
33
34 1
        foreach($this->classLoader->getPrefixesPsr4() as $namespace => $rootDirs){
35 1
            foreach($rootDirs as $rootDir){
36 1
                $list = $list + $this->locateInDirectory($namespace, $rootDir);
37
            }
38
        }
39
40 1
        return $list;
41
    }
42
43
    /**
44
     * @param string $rootNamespace
45
     * @param string $rootDir
46
     * @return array
47
     */
48 1
    private function locateInDirectory(string $rootNamespace, string $rootDir): array
49
    {
50 1
        $list = [];
51 1
        foreach(new \DirectoryIterator($rootDir) as $iterator){
52 1
            if($iterator->isFile() || $iterator->isDot()){
53 1
                continue;
54
            }
55
56 1
            $expectedClass = $rootNamespace . sprintf('%1$s\\%1$sPlugin', $iterator->getBasename());
57 1
            if($this->isPlugin($expectedClass)){
58 1
                $list[] = $expectedClass;
59
            }
60
        }
61
62 1
        return $list;
63
    }
64
}