Passed
Pull Request — master (#10)
by
unknown
04:39
created

ApplyAtLeastOne   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 7
eloc 21
c 1
b 0
f 1
dl 0
loc 56
ccs 23
cts 23
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 3
A passes() 0 26 4
1
<?php
2
3
namespace Monooso\Apposite\Rules;
4
5
use Illuminate\Contracts\Validation\Rule;
6
use Illuminate\Support\Arr;
7
8
class ApplyAtLeastOne extends ApplyMap implements Rule
9
{
10
    private $message;
11
12
    /**
13
     * Initialise the custom rule
14
     *
15
     * @param bool|callable $conditional
16
     * @param array|string $rules
17
     * @param $message
18
     */
19 5
    public function __construct($conditional, $rules, $message)
20
    {
21 5
        $key = 'when';
22
23 5
        (bool)(is_callable($conditional) ? $conditional() : $conditional)
24 4
            ? parent::__construct($key, [$key => $rules])
25 1
            : parent::__construct($key, []);
26
27 5
        $this->message = $message;
28 5
    }
29
30
    /**
31
     * Determine if the validation rule passes
32
     *
33
     * @param string $attribute
34
     * @param mixed $value
35
     *
36
     * @return bool
37
     */
38 5
    public function passes($attribute, $value)
39
    {
40 5
        if (empty($this->rules)) {
41 1
            return true;
42
        }
43
44 4
        $rules = collect($this->rules);
45
46 4
        $checks = $rules->map(
47 4
            function ($rule) use ($attribute, $value) {
48 4
                $this->rules = $rule;
49 4
                $validator = $this->makeValidator($attribute, $value);
50
51 4
                return $validator->fails() ? $validator->errors()->all() : [];
52 4
            }
53
        )
54 4
            ->filter()
55 4
            ->values();
56
57 4
        if ($rules->count() == $checks->count()) {
58 3
            $this->messages = Arr::wrap($this->message);
59
60 3
            return false;
61
        }
62
63 1
        return true;
64
    }
65
}
66