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

__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 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 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
}