Test Failed
Push — master ( 4e8938...efe3fd )
by Peter
08:14 queued 11s
created

YamlStandardConfigLoader   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 29
c 1
b 0
f 0
dl 0
loc 66
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A loadFromYaml() 0 14 2
A createConfigData() 0 13 2
A createStandardsConfig() 0 21 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace YamlStandards\Model\Config;
6
7
use Symfony\Component\Config\Definition\Processor;
8
use Symfony\Component\Yaml\Parser;
9
use YamlStandards\Command\Service\YamlFilesPathService;
10
use YamlStandards\Model\Config\Exception\YamlStandardConfigNotFoundException;
11
12
class YamlStandardConfigLoader
13
{
14
    /**
15
     * @param string $configFilename
16
     * @return \YamlStandards\Model\Config\YamlStandardConfigTotalData
17
     */
18
    public function loadFromYaml(string $configFilename): YamlStandardConfigTotalData
19
    {
20
        if (file_exists($configFilename) === false) {
21
            throw new YamlStandardConfigNotFoundException('Config file ' . $configFilename . ' does not exist');
22
        }
23
24
        $yamlParser = new Parser();
25
        $yamlStandardsConfigDefinition = new YamlStandardConfigDefinition();
26
        $processor = new Processor();
27
28
        $configContent = $yamlParser->parseFile($configFilename);
29
        $outputConfigs = $processor->processConfiguration($yamlStandardsConfigDefinition, [$configContent]);
30
31
        return $this->createConfigData($outputConfigs);
32
    }
33
34
    /**
35
     * @param array $outputConfigs
36
     * @return \YamlStandards\Model\Config\YamlStandardConfigTotalData
37
     */
38
    private function createConfigData(array $outputConfigs): YamlStandardConfigTotalData
39
    {
40
        $yamlStandardConfigsSingleData = [];
41
42
        foreach ($outputConfigs as $outputConfig) {
43
            $pathToYamlFiles = YamlFilesPathService::getPathToYamlFiles($outputConfig[YamlStandardConfigDefinition::CONFIG_PATHS_TO_CHECK]);
44
            $pathToExcludedYamlFiles = YamlFilesPathService::getPathToYamlFiles($outputConfig[YamlStandardConfigDefinition::CONFIG_EXCLUDED_PATHS]);
45
            $standardConfigs = $this->createStandardsConfig($outputConfig[YamlStandardConfigDefinition::CONFIG_CHECKERS]);
46
47
            $yamlStandardConfigsSingleData[] = new YamlStandardConfigSingleData($pathToYamlFiles, $pathToExcludedYamlFiles, $standardConfigs);
48
        }
49
50
        return new YamlStandardConfigTotalData($yamlStandardConfigsSingleData);
51
    }
52
53
    /**
54
     * @param array $checkersConfig
55
     * @return \YamlStandards\Model\Config\YamlStandardConfigSingleStandardData[]
56
     */
57
    private function createStandardsConfig(array $checkersConfig): array
58
    {
59
        $yamlStandardConfigsSingleCheckerData = [];
60
61
        foreach ($checkersConfig as $checkerConfig) {
62
            $checkerClassName = $checkerConfig[YamlStandardConfigDefinition::CONFIG_PATH_TO_CHECKER];
63
            $checkerClass = new $checkerClassName();
64
65
            $fixerClassName = str_replace('Checker', 'Fixer', $checkerClassName);
66
            $fixerClass = class_exists($fixerClassName) === false ? null : new $fixerClassName();
67
68
            $parameters = $checkerConfig[YamlStandardConfigDefinition::CONFIG_PARAMETERS_FOR_CHECKER];
69
            $depth = $parameters[YamlStandardConfigDefinition::CONFIG_PARAMETERS_DEPTH];
70
            $indents = $parameters[YamlStandardConfigDefinition::CONFIG_PARAMETERS_INDENTS];
71
            $level = $parameters[YamlStandardConfigDefinition::CONFIG_PARAMETERS_LEVEL];
72
            $parametersClass = new StandardParametersData($depth, $indents, $level);
73
74
            $yamlStandardConfigsSingleCheckerData[] = new YamlStandardConfigSingleStandardData($checkerClass, $fixerClass, $parametersClass);
75
        }
76
77
        return $yamlStandardConfigsSingleCheckerData;
78
    }
79
}
80