ClearingValidator::validate()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
nc 3
nop 1
dl 0
loc 18
rs 9.6666
c 0
b 0
f 0
ccs 9
cts 9
cp 1
crap 4
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace byrokrat\banking\Validator;
6
7
use byrokrat\banking\AccountNumber;
8
9
/**
10
 * Validate clearing numbers
11
 */
12
class ClearingValidator implements ValidatorInterface
13
{
14
    /**
15
     * @var array<array> List of clearing number max and min values
16
     */
17
    private $clearingRanges;
18
19
    /**
20
     * Load ranges of valid clearing numbers
21
     *
22
     * @param array<array> $clearingRanges
23
     */
24 93
    public function __construct(array $clearingRanges)
25
    {
26 93
        $this->clearingRanges = $clearingRanges;
27 93
    }
28
29
    /**
30
     * Validate clearing number
31
     *
32
     * Clearing must be in one of the specified ranges to be considered valid.
33
     */
34 231
    public function validate(AccountNumber $number): ResultInterface
35
    {
36 231
        $clearing = intval($number->getClearingNumber());
37
38 231
        $clearingRange = ['0', '0'];
39
40 231
        foreach ($this->clearingRanges as $clearingRange) {
41 231
            if ($clearing >= $clearingRange[0] && $clearing <= $clearingRange[1]) {
42 228
                return new Success(
43 231
                    "Clearing number $clearing is within range {$clearingRange[0]} to {$clearingRange[1]}"
44
                );
45
            }
46
        }
47
48 143
        return new Failure(
49 143
            "Clearing number $clearing not within range {$clearingRange[0]} to {$clearingRange[1]}"
50
        );
51
    }
52
}
53