ValidStateRule::passes()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
c 0
b 0
f 0
dl 0
loc 9
rs 10
cc 3
nc 2
nop 2
1
<?php
2
3
namespace Spatie\ModelStates\Validation;
4
5
use Illuminate\Contracts\Validation\Rule;
6
7
class ValidStateRule implements Rule
8
{
9
    /** @var string|\Spatie\ModelStates\State */
10
    private $abstractStateClass;
11
12
    /** @var bool */
13
    private $nullable;
14
15
    public static function make(string $abstractStateClass): ValidStateRule
16
    {
17
        return new self($abstractStateClass);
18
    }
19
20
    public function __construct(string $abstractStateClass)
21
    {
22
        $this->abstractStateClass = $abstractStateClass;
23
    }
24
25
    public function nullable(): ValidStateRule
26
    {
27
        $this->nullable = true;
28
29
        return $this;
30
    }
31
32
    public function required(): ValidStateRule
33
    {
34
        $this->nullable = false;
35
36
        return $this;
37
    }
38
39
    public function passes($attribute, $value): bool
40
    {
41
        if ($this->nullable && $value === null) {
42
            return true;
43
        }
44
45
        $stateClass = $this->abstractStateClass::resolveStateClass($value);
46
47
        return is_subclass_of($stateClass, $this->abstractStateClass);
48
    }
49
50
    public function message(): string
51
    {
52
        return 'This value is invalid';
53
    }
54
}
55