Passed
Push — master ( 93e91b...83695f )
by Fabien
02:05
created

Validator::validateHooks()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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