RuleCollection::updateDateRule()   B
last analyzed

Complexity

Conditions 7
Paths 8

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 6
nc 8
nop 2
dl 0
loc 12
rs 8.8333
c 0
b 0
f 0
1
<?php
2
3
namespace Digitonic\ApiTestSuite\DataGeneration;
4
5
use Digitonic\ApiTestSuite\DataGeneration\Contracts\Rule;
6
use Digitonic\ApiTestSuite\DataGeneration\Rules\DateRule;
7
use Digitonic\ApiTestSuite\DataGeneration\Rules\RequiredRule;
8
use Illuminate\Support\Collection;
9
10
class RuleCollection extends Collection
11
{
12
    /**
13
     * @var bool
14
     */
15
    private $required = false;
16
17
    public function generate(array &$payload, $field, array $rules, $newSeedValue, $class, $user)
18
    {
19
        $toBeApplied = $this->filter(
20
            function ($item) {
21
                if ($item instanceof RequiredRule) {
22
                    $this->required = true;
23
                } else {
24
                    return true;
25
                }
26
            }
27
        );
28
29
        if (/*$this->required &&*/
30
            strpos($field, '.') === false) {
31
            $toBeApplied->each(
32
                function (Rule $rule) use (&$payload, $field, $rules, $newSeedValue, $class, $user) {
33
                    $rule->handle($payload, $field, $rules, $newSeedValue, $class, $user);
34
                }
35
            );
36
        }
37
    }
38
39
    /**
40
     * @param bool $required
41
     */
42
    public function setRequired($required)
43
    {
44
        $this->required = $required;
45
    }
46
47
    public function push($value)
48
    {
49
        if ($value instanceof DateRule) {
50
            foreach ($this->items as $index => $rule) {
51
                if ($rule instanceof DateRule) {
52
                    $this->updateDateRule($value, $index);
53
                } else {
54
                    parent::push($value);
55
                }
56
            }
57
        } else {
58
            parent::push($value);
59
        }
60
    }
61
62
    public function updateDateRule(DateRule $rule, $index)
63
    {
64
        if (!$this->items[$index]->getAfter() && $rule->getAfter()) {
65
            $this->items[$index]->setAfter($rule->getAfter(), $rule->getStrictAfter());
66
        }
67
68
        if (!$this->items[$index]->getBefore() && $rule->getBefore()) {
69
            $this->items[$index]->setBefore($rule->getBefore(), $rule->getStrictBefore());
70
        }
71
72
        if (!$this->items[$index]->getFormat() && $rule->getFormat()) {
73
            $this->items[$index]->setFormat($rule->getFormat());
74
        }
75
    }
76
}
77