EnumRule   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 66.67%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 0
dl 0
loc 51
ccs 8
cts 12
cp 0.6667
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 2
A passes() 0 4 2
A message() 0 6 2
1
<?php
2
3
namespace MadWeb\Enum\Rules;
4
5
use Illuminate\Contracts\Validation\Rule;
6
use InvalidArgumentException;
7
use MadWeb\Enum\Enum;
8
9
class EnumRule implements Rule
10
{
11
    private $enumClass = '';
12
13
    /**
14
     * @var bool true if the the key of the enum should be used to validate against, otherwise the value is used.
15
     */
16
    private $useKey = false;
17
18
    /**
19
     * Create a new rule instance.
20
     *
21
     * @param string $enumClass The enum class to create the the rule for
22
     * @param bool $useKey true if the enum key should be used to validate against, otherwise the value is used.
23
     *
24
     * @return void
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
25
     */
26 39
    public function __construct(string $enumClass, bool $useKey = false)
27
    {
28 39
        if (! is_subclass_of($enumClass, Enum::class)) {
29 6
            throw new InvalidArgumentException("Value '$enumClass' is not an enum class");
30
        }
31
32 33
        $this->useKey = $useKey;
33 33
        $this->enumClass = $enumClass;
34 33
    }
35
36
    /**
37
     * Determine if the validation rule passes.
38
     *
39
     * @param  string  $attribute
40
     * @param  mixed  $value
41
     * @return bool
42
     */
43 33
    public function passes($attribute, $value): bool
44
    {
45 33
        return call_user_func([$this->enumClass, $this->useKey ? 'isValidKey' : 'isValid'], $value);
46
    }
47
48
    /**
49
     * Get the validation error message.
50
     *
51
     * @return string
52
     */
53
    public function message()
54
    {
55
        return trans()->has('validation.enum')
56
                ? __('validation.enum')
57
                : 'The :attribute value you have entered is invalid.';
58
    }
59
}
60