RequiredFieldsValidationStrategy::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 1
crap 1
1
<?php declare(strict_types=1);
2
3
namespace PerfectApp\Validation;
4
5
/**
6
 *
7
 */
8
class RequiredFieldsValidationStrategy implements ValidationStrategy
9
{
10
    /**
11
     * @var array
12
     */
13
    private array $requiredFields;
14
    /**
15
     * @var array
16
     */
17
    private array $errors;
18
19
    /**
20
     * @param array $requiredFields
21
     */
22 6
    public function __construct(array $requiredFields)
23
    {
24 6
        $this->requiredFields = $requiredFields;
25 6
        $this->errors = [];
26
    }
27
28
    /**
29
     * @param array $data
30
     * @return bool
31
     */
32 6
    public function validate(array $data): bool
33
    {
34 6
        $this->errors = [];
35
36 6
        foreach ($this->requiredFields as $field) {
37 6
            $fieldValue = $data[$field] ?? null;
38 6
            $isFieldEmpty = empty($fieldValue);
39 6
            $isFieldArrayWithEmptyValues = is_array($fieldValue) && array_filter($fieldValue) === [];
40
41 6
            if ($isFieldEmpty || $isFieldArrayWithEmptyValues) {
42 4
                $msg = ucwords(str_replace('_', ' ', $field));
43 4
                $this->errors[$field] = $msg . ' is required.';
44
            }
45
        }
46
47 6
        return empty($this->errors); // Validation passed if no errors
48
    }
49
50
    /**
51
     * @return array
52
     */
53 3
    public function getErrors(): array
54
    {
55 3
        return $this->errors;
56
    }
57
}
58