Passed
Push — master ( 369dd9...0c3679 )
by Fabien
01:59
created

Validator   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 155
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 49
dl 0
loc 155
rs 10
c 1
b 0
f 0
wmc 23

12 Methods

Rating   Name   Duplication   Size   Complexity  
A validateMaxScoreThreshold() 0 7 2
A validateFileExtensions() 0 8 2
A validateFilesToShow() 0 7 2
A validateDirectoriesToScan() 0 8 2
A validateConfigurationValues() 0 13 1
A validateMinScoreToShow() 0 7 2
A validateCachePath() 0 7 2
A validateVCS() 0 7 2
A validateFilesToIgnore() 0 8 2
A validateParallelJobs() 0 7 2
A validateCommitsSince() 0 7 2
A validateHooks() 0 8 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Churn\Configuration;
6
7
use Webmozart\Assert\Assert;
8
9
/**
10
 * @internal
11
 */
12
class Validator
13
{
14
15
    /**
16
     * @param array<mixed> $configuration The array containing the configuration values.
17
     */
18
    public function validateConfigurationValues(array $configuration): void
19
    {
20
        $this->validateDirectoriesToScan($configuration);
21
        $this->validateFilesToShow($configuration);
22
        $this->validateMinScoreToShow($configuration);
23
        $this->validateMaxScoreThreshold($configuration);
24
        $this->validateParallelJobs($configuration);
25
        $this->validateCommitsSince($configuration);
26
        $this->validateFilesToIgnore($configuration);
27
        $this->validateFileExtensions($configuration);
28
        $this->validateVCS($configuration);
29
        $this->validateCachePath($configuration);
30
        $this->validateHooks($configuration);
31
    }
32
33
    /**
34
     * @param array<mixed> $configuration The array containing the configuration values.
35
     */
36
    private function validateDirectoriesToScan(array $configuration): void
37
    {
38
        if (!\array_key_exists('directoriesToScan', $configuration)) {
39
            return;
40
        }
41
42
        Assert::isArray($configuration['directoriesToScan'], 'Directories to scan should be an array of strings');
43
        Assert::allString($configuration['directoriesToScan'], 'Directories to scan should be an array of strings');
44
    }
45
46
    /**
47
     * @param array<mixed> $configuration The array containing the configuration values.
48
     */
49
    private function validateFilesToShow(array $configuration): void
50
    {
51
        if (!\array_key_exists('filesToShow', $configuration)) {
52
            return;
53
        }
54
55
        Assert::integer($configuration['filesToShow'], 'Files to show should be an integer');
56
    }
57
58
    /**
59
     * @param array<mixed> $configuration The array containing the configuration values.
60
     */
61
    private function validateMinScoreToShow(array $configuration): void
62
    {
63
        if (!isset($configuration['minScoreToShow'])) {
64
            return;
65
        }
66
67
        Assert::numeric($configuration['minScoreToShow'], 'Minimum score to show should be a number');
68
    }
69
70
    /**
71
     * @param array<mixed> $configuration The array containing the configuration values.
72
     */
73
    private function validateMaxScoreThreshold(array $configuration): void
74
    {
75
        if (!isset($configuration['maxScoreThreshold'])) {
76
            return;
77
        }
78
79
        Assert::numeric($configuration['maxScoreThreshold'], 'Maximum score threshold should be a number');
80
    }
81
82
    /**
83
     * @param array<mixed> $configuration The array containing the configuration values.
84
     */
85
    private function validateParallelJobs(array $configuration): void
86
    {
87
        if (!\array_key_exists('parallelJobs', $configuration)) {
88
            return;
89
        }
90
91
        Assert::integer($configuration['parallelJobs'], 'Amount of parallel jobs should be an integer');
92
    }
93
94
    /**
95
     * @param array<mixed> $configuration The array containing the configuration values.
96
     */
97
    private function validateCommitsSince(array $configuration): void
98
    {
99
        if (!\array_key_exists('commitsSince', $configuration)) {
100
            return;
101
        }
102
103
        Assert::string($configuration['commitsSince'], 'Commits since should be a string');
104
    }
105
106
    /**
107
     * @param array<mixed> $configuration The array containing the configuration values.
108
     */
109
    private function validateFilesToIgnore(array $configuration): void
110
    {
111
        if (!\array_key_exists('filesToIgnore', $configuration)) {
112
            return;
113
        }
114
115
        Assert::isArray($configuration['filesToIgnore'], 'Files to ignore should be an array of strings');
116
        Assert::allString($configuration['filesToIgnore'], 'Files to ignore should be an array of strings');
117
    }
118
119
    /**
120
     * @param array<mixed> $configuration The array containing the configuration values.
121
     */
122
    private function validateFileExtensions(array $configuration): void
123
    {
124
        if (!\array_key_exists('fileExtensions', $configuration)) {
125
            return;
126
        }
127
128
        Assert::isArray($configuration['fileExtensions'], 'File extensions should be an array of strings');
129
        Assert::allString($configuration['fileExtensions'], 'File extensions should be an array of strings');
130
    }
131
132
    /**
133
     * @param array<mixed> $configuration The array containing the configuration values.
134
     */
135
    private function validateVCS(array $configuration): void
136
    {
137
        if (!\array_key_exists('vcs', $configuration)) {
138
            return;
139
        }
140
141
        Assert::string($configuration['vcs'], 'VCS should be a string');
142
    }
143
144
    /**
145
     * @param array<mixed> $configuration The array containing the configuration values.
146
     */
147
    private function validateCachePath(array $configuration): void
148
    {
149
        if (!isset($configuration['cachePath'])) {
150
            return;
151
        }
152
153
        Assert::string($configuration['cachePath'], 'Cache path should be a string');
154
    }
155
156
    /**
157
     * @param array<mixed> $configuration The array containing the configuration values.
158
     */
159
    private function validateHooks(array $configuration): void
160
    {
161
        if (!\array_key_exists('hooks', $configuration)) {
162
            return;
163
        }
164
165
        Assert::isArray($configuration['hooks'], 'Hooks should be an array of strings');
166
        Assert::allString($configuration['hooks'], 'Hooks should be an array of strings');
167
    }
168
}
169