Completed
Pull Request — master (#42)
by Simon
01:51
created

ConfigFileFinder::discoverFiles()   B

Complexity

Conditions 4
Paths 3

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 8.9197
c 0
b 0
f 0
cc 4
eloc 13
nc 3
nop 1
1
<?php declare(strict_types=1);
2
3
4
namespace Shopware\Psh\Config;
5
6
/**
7
 * Resolve the path to the config file
8
 */
9
class ConfigFileFinder
10
{
11
    const VALID_FILE_NAME_GLOB = '.psh.*';
12
13
    public function discoverFiles(string $fromDirectory): array
14
    {
15
        $configFiles = [];
16
        $currentDirectory = $fromDirectory;
17
18
        do {
19
            $globResult = glob($currentDirectory . '/' . self::VALID_FILE_NAME_GLOB);
20
21
            if (count($globResult)) {
22
                $configFiles[] = $this->preferNonDistributionFiles($globResult);
23
                if ($overrideFile = $this->getOverrideFile($globResult)) {
24
                    $configFiles[] = $overrideFile ;
25
                }
26
27
                return $configFiles;
28
            }
29
30
            $currentDirectory = dirname($currentDirectory);
31
        } while ($currentDirectory !== '/');
32
33
        throw new \RuntimeException('No config file found, make sure you have created a .psh file');
34
    }
35
36
    /**
37
     * @param string[] $configFiles
38
     * @return string
39
     */
40
    private function preferNonDistributionFiles(array $configFiles): string
41
    {
42
        foreach ($configFiles as $file) {
43
            $fileExtension = pathinfo($file, PATHINFO_EXTENSION);
44
            if ($fileExtension !== 'yaml' || $fileExtension !== 'yml') {
45
                return $file;
46
            }
47
        }
48
49
        return $configFiles[0];
50
    }
51
52
    /**
53
     * @param array $configFiles
54
     * @return string
55
     */
56
    private function getOverrideFile(array $configFiles): string
57
    {
58
        foreach ($configFiles as $file) {
59
            if (pathinfo($file, PATHINFO_EXTENSION) === 'override') {
60
                return $file;
61
            }
62
        }
63
64
        return '';
65
    }
66
}
67