Passed
Pull Request — master (#303)
by Fabien
02:10
created

Validator::validateVCS()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 2
nc 2
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Churn\Configuration;
6
7
use Webmozart\Assert\Assert;
8
9
class Validator
10
{
11
12
    /**
13
     * @param array<mixed> $configuration The array containing the configuration values.
14
     */
15
    public function validateConfigurationValues(array $configuration): void
16
    {
17
        $this->validateDirectoriesToScan($configuration);
18
        $this->validateFilesToShow($configuration);
19
        $this->validateMinScoreToShow($configuration);
20
        $this->validateParallelJobs($configuration);
21
        $this->validateCommitsSince($configuration);
22
        $this->validateFilesToIgnore($configuration);
23
        $this->validateFileExtensions($configuration);
24
        $this->validateVCS($configuration);
25
        $this->validateCachePath($configuration);
26
    }
27
28
    /**
29
     * @param array<mixed> $configuration The array containing the configuration values.
30
     */
31
    private function validateDirectoriesToScan(array $configuration): void
32
    {
33
        if (!\array_key_exists('directoriesToScan', $configuration)) {
34
            return;
35
        }
36
37
        Assert::isArray($configuration['directoriesToScan'], 'Directories to scan should be an array of strings');
38
        Assert::allString($configuration['directoriesToScan'], 'Directories to scan should be an array of strings');
39
    }
40
41
    /**
42
     * @param array<mixed> $configuration The array containing the configuration values.
43
     */
44
    private function validateFilesToShow(array $configuration): void
45
    {
46
        if (!\array_key_exists('filesToShow', $configuration)) {
47
            return;
48
        }
49
50
        Assert::integer($configuration['filesToShow'], 'Files to show should be an integer');
51
    }
52
53
    /**
54
     * @param array<mixed> $configuration The array containing the configuration values.
55
     */
56
    private function validateMinScoreToShow(array $configuration): void
57
    {
58
        if (!\array_key_exists('minScoreToShow', $configuration) || null === $configuration['minScoreToShow']) {
59
            return;
60
        }
61
62
        Assert::numeric($configuration['minScoreToShow'], 'Minimum score to show should be a number');
63
    }
64
65
    /**
66
     * @param array<mixed> $configuration The array containing the configuration values.
67
     */
68
    private function validateParallelJobs(array $configuration): void
69
    {
70
        if (!\array_key_exists('parallelJobs', $configuration)) {
71
            return;
72
        }
73
74
        Assert::integer($configuration['parallelJobs'], 'Amount of parallel jobs should be an integer');
75
    }
76
77
    /**
78
     * @param array<mixed> $configuration The array containing the configuration values.
79
     */
80
    private function validateCommitsSince(array $configuration): void
81
    {
82
        if (!\array_key_exists('commitsSince', $configuration)) {
83
            return;
84
        }
85
86
        Assert::string($configuration['commitsSince'], 'Commits since should be a string');
87
    }
88
89
    /**
90
     * @param array<mixed> $configuration The array containing the configuration values.
91
     */
92
    private function validateFilesToIgnore(array $configuration): void
93
    {
94
        if (!\array_key_exists('filesToIgnore', $configuration)) {
95
            return;
96
        }
97
98
        Assert::isArray($configuration['filesToIgnore'], 'Files to ignore should be an array of strings');
99
        Assert::allString($configuration['filesToIgnore'], 'Files to ignore should be an array of strings');
100
    }
101
102
    /**
103
     * @param array<mixed> $configuration The array containing the configuration values.
104
     */
105
    private function validateFileExtensions(array $configuration): void
106
    {
107
        if (!\array_key_exists('fileExtensions', $configuration)) {
108
            return;
109
        }
110
111
        Assert::isArray($configuration['fileExtensions'], 'File extensions should be an array of strings');
112
        Assert::allString($configuration['fileExtensions'], 'File extensions should be an array of strings');
113
    }
114
115
    /**
116
     * @param array<mixed> $configuration The array containing the configuration values.
117
     */
118
    private function validateVCS(array $configuration): void
119
    {
120
        if (!\array_key_exists('vcs', $configuration)) {
121
            return;
122
        }
123
124
        Assert::string($configuration['vcs'], 'VCS should be a string');
125
    }
126
127
    /**
128
     * @param array<mixed> $configuration The array containing the configuration values.
129
     */
130
    private function validateCachePath(array $configuration): void
131
    {
132
        if (!isset($configuration['cachePath'])) {
133
            return;
134
        }
135
136
        Assert::string($configuration['cachePath'], 'Cache path should be a string');
137
    }
138
}
139