Passed
Pull Request — master (#175)
by
unknown
02:31
created

InRange::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 8
dl 0
loc 18
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Rule;
6
7
use Attribute;
8
use Yiisoft\Validator\FormatterInterface;
9
use Yiisoft\Validator\ValidationContext;
10
use Yiisoft\Arrays\ArrayHelper;
11
use Yiisoft\Validator\Result;
12
use Yiisoft\Validator\Rule;
13
14
/**
15
 * In validates that the attribute value is among a list of values.
16
 *
17
 * The range can be specified via constructor.
18
 * If the {@see InRange::$not} is called, the validator will ensure the attribute value
19
 * is NOT among the specified range.
20
 */
21
#[Attribute(Attribute::TARGET_PROPERTY)]
22
final class InRange extends Rule
23
{
24 8
    public function __construct(
25
        private iterable $range,
26
        /**
27
         * @var bool whether the comparison is strict (both type and value must be the same)
28
         */
29
        private bool $strict = false,
30
        /**
31
         * @var bool whether to invert the validation logic. Defaults to false. If set to true,
32
         * the attribute value should NOT be among the list of values passed via constructor.
33
         */
34
        private bool $not = false,
35
        private string $message = 'This value is invalid.',
36
        ?FormatterInterface $formatter = null,
37
        bool $skipOnEmpty = false,
38
        bool $skipOnError = false,
39
        $when = null
40
    ) {
41 8
        parent::__construct(formatter: $formatter, skipOnEmpty: $skipOnEmpty, skipOnError: $skipOnError, when: $when);
42
    }
43
44 8
    protected function validateValue($value, ?ValidationContext $context = null): Result
45
    {
46 8
        $result = new Result();
47
48 8
        if ($this->not === ArrayHelper::isIn($value, $this->range, $this->strict)) {
49 7
            $result->addError($this->formatMessage($this->message));
50
        }
51
52 8
        return $result;
53
    }
54
55 3
    public function getOptions(): array
56
    {
57 3
        return array_merge(parent::getOptions(), [
58 3
            'range' => $this->range,
59 3
            'strict' => $this->strict,
60 3
            'not' => $this->not,
61 3
            'message' => $this->formatMessage($this->message),
62
        ]);
63
    }
64
}
65