Test Failed
Pull Request — master (#222)
by Rustam
02:30
created

Subset   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 55.56%

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 15
dl 0
loc 45
ccs 10
cts 18
cp 0.5556
rs 10
c 2
b 1
f 0
wmc 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Rule;
6
7
use Attribute;
8
use Closure;
9
use JetBrains\PhpStorm\ArrayShape;
10
use Yiisoft\Validator\Rule\Trait\RuleNameTrait;
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_TRAIT, expecting T_STRING or '{' on line 10 at column 27
Loading history...
11
use Yiisoft\Validator\Rule\Trait\HandlerClassNameTrait;
12
use Yiisoft\Validator\ParametrizedRuleInterface;
13
14
#[Attribute(Attribute::TARGET_PROPERTY)]
15
final class Subset implements ParametrizedRuleInterface
16
{
17
    use HandlerClassNameTrait;
18 2
    use RuleNameTrait;
19
20
    public function __construct(
21
        private iterable $values,
22
        /**
23
         * @var bool whether the comparison is strict (both type and value must be the same)
24
         */
25
        private bool $strict = false,
26
        private string $iterableMessage = 'Value must be iterable.',
27
        private string $subsetMessage = 'Values must be ones of {values}.',
28
        private bool $skipOnEmpty = false,
29
        private bool $skipOnError = false,
30
        private ?Closure $when = null,
31 2
    ) {
32
    }
33
34 8
    /**
35
     * @return iterable
36 8
     */
37
    public function getValues(): iterable
38 8
    {
39
        return $this->values;
40
    }
41
42
    /**
43 8
     * @return bool
44 2
     */
45 2
    public function isStrict(): bool
46
    {
47 2
        return $this->strict;
48
    }
49
50 8
    /**
51
     * @return string
52
     */
53
    public function getIterableMessage(): string
54
    {
55
        return $this->iterableMessage;
56
    }
57
58
    /**
59
     * @return string
60
     */
61
    public function getSubsetMessage(): string
62
    {
63
        return $this->subsetMessage;
64
    }
65
66
    /**
67
     * @return bool
68
     */
69
    public function isSkipOnEmpty(): bool
70
    {
71
        return $this->skipOnEmpty;
72
    }
73
74
    /**
75
     * @return bool
76
     */
77
    public function isSkipOnError(): bool
78
    {
79
        return $this->skipOnError;
80
    }
81
82
    /**
83
     * @return Closure|null
84
     */
85
    public function getWhen(): ?Closure
86
    {
87
        return $this->when;
88
    }
89
90
    #[ArrayShape([
91
        'values' => 'iterable',
92
        'strict' => 'bool',
93
        'iterableMessage' => 'string[]',
94
        'subsetMessage' => 'string[]',
95
        'skipOnEmpty' => 'bool',
96
        'skipOnError' => 'bool',
97
    ])]
98
    public function getOptions(): array
99
    {
100
        return [
101
            'values' => $this->values,
102
            'strict' => $this->strict,
103
            'iterableMessage' => [
104
                'message' => $this->iterableMessage,
105
            ],
106
            'subsetMessage' => [
107
                'message' => $this->subsetMessage,
108
            ],
109
            'skipOnEmpty' => $this->skipOnEmpty,
110
            'skipOnError' => $this->skipOnError,
111
        ];
112
    }
113
}
114