Passed
Push — master ( 99427a...7e65af )
by Mike
04:46
created

ModuleFinder::getSearchDirectories()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 19
rs 9.9
c 0
b 0
f 0
cc 3
nc 3
nop 0
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()
45
    {
46
        $modules = [];
47
48
        foreach ($this->getSearchDirectories() as $dir) {
49
            $modules = array_merge($modules, glob($dir . '/*'));
50
        }
51
52
        return $modules;
53
    }
54
55
    /**
56
     * @return array
57
     */
58
    private function getSearchDirectories() : array
59
    {
60
        $directories = [];
61
62
        $clipath = dirname(dirname(dirname(dirname(dirname(__DIR__)))));
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
}