ModuleFinder::getSearchDirectories()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 19
ccs 0
cts 15
cp 0
rs 9.9
c 0
b 0
f 0
cc 3
nc 3
nop 0
crap 12
1
<?php
2
3
4
namespace Nexus\DynamicModules\Business\Model\Finder;
5
6
7
use Symfony\Component\Finder\Finder;
8
9
class ModuleFinder implements ModuleFinderInterface
10
{
11
    /**
12
     * @var string
13
     */
14
    private $applicationPath;
15
16
    /**
17
     * @var string
18
     */
19
    private $providerNameFilter;
20
21
    /**
22
     * @var array
23
     */
24
    private $namespaces;
25
26
    /**
27
     * ModuleFinder constructor.
28
     *
29
     * @param string $applicationPath
30
     * @param string $providerNameFilter
31
     * @param array $namespaces
32
     */
33
    public function __construct(string $applicationPath, string $providerNameFilter, array $namespaces)
34
    {
35
        $this->applicationPath = $applicationPath;
36
        $this->providerNameFilter = $providerNameFilter;
37
        $this->namespaces = $namespaces;
38
    }
39
40
41
    /**
42
     * @return array
43
     */
44
    public function getModuleList(): array
45
    {
46
        $modules = [];
47
48
        foreach ($this->getSearchDirectories() as $dir) {
49
            $modules = \array_merge($modules, glob($dir . '/*'));
0 ignored issues
show
Bug introduced by
It seems like glob($dir . '/*') can also be of type false; however, parameter $array2 of array_merge() does only seem to accept array|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

49
            $modules = \array_merge($modules, /** @scrutinizer ignore-type */ glob($dir . '/*'));
Loading history...
50
        }
51
52
        return $modules;
53
    }
54
55
    /**
56
     * @return array
57
     */
58
    private function getSearchDirectories() : array
59
    {
60
        $directories = [];
61
62
        $clipath = \dirname(__DIR__, 5);
63
64
        foreach ($this->namespaces as $namespace) {
65
            $directories[] = $this->applicationPath . '/src/' . $namespace;
66
            $directories[] = $this->applicationPath . '/cli/' . $namespace;
67
            $directories[] = $this->applicationPath . '/vendor/*/*/src/' . $namespace;
68
69
            if ($this->applicationPath !== $clipath) {
70
                $directories[] = $clipath . '/src/' . $namespace;
71
                $directories[] = $clipath . '/cli/' . $namespace;
72
                $directories[] = $clipath . '/vendor/*/*/src/' . $namespace;
73
            }
74
        }
75
76
        return $directories;
77
    }
78
}