RuleParser::getRaw()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace Digitonic\ApiTestSuite\DataGeneration;
4
5
use Digitonic\ApiTestSuite\DataGeneration\Factories\RuleFactory;
6
7
class RuleParser
8
{
9
    const RULE_ORDER = [
10
        'required' => 1,
11
        'before' => 2,
12
        'before_or_equal' => 2,
13
        'after' => 3,
14
        'after_or_equal' => 3,
15
        'max' => 98,
16
        'date_format' => 99,
17
        'between' => 99,
18
        'date_between' => 99,
19
    ];
20
21
    /**
22
     * @var string
23
     */
24
    private $raw;
25
26
    /**
27
     * @param $rules
28
     * @return RuleCollection
29
     */
30
    public function parse($rules)
31
    {
32
        $this->raw = $rules;
33
34
        $factory = new RuleFactory();
35
        $rulesArray = explode('|', $rules);
36
37
        usort(
38
            $rulesArray,
39
            function ($a, $b) {
40
                $aName = $this->getRuleName($a);
41
                $aWeight = isset(self::RULE_ORDER[$aName]) ? self::RULE_ORDER[$aName] : 50;
42
                $bName = $this->getRuleName($b);
43
                $bWeight = isset(self::RULE_ORDER[$bName]) ? self::RULE_ORDER[$bName] : 50;
44
                if ($aWeight == $bWeight) {
45
                    return 0;
46
                }
47
                return $aWeight > $bWeight ? 1 : -1;
48
            }
49
        );
50
51
        $ruleSet = new RuleCollection();
52
        foreach ($rulesArray as $rule) {
53
            $ruleName = $this->getRuleName($rule);
54
            $params = $this->getRuleParams($rule);
55
            $ruleSet->push($factory->build($ruleName, $params));
56
        }
57
58
        return $ruleSet;
59
    }
60
61
    /**
62
     * @param $rule
63
     * @return string
64
     */
65
    protected function getRuleName($rule)
66
    {
67
        $rule = explode(':', $rule, 2);
68
        return $rule[0];
69
    }
70
71
    /**
72
     * @param $rule
73
     * @return string
74
     */
75
    protected function getRuleParams($rule)
76
    {
77
        $rule = explode(':', $rule, 2);
78
        return isset($rule[1]) ? $rule[1] : '';
79
    }
80
81
    /**
82
     * @return string
83
     */
84
    public function getRaw()
85
    {
86
        return $this->raw;
87
    }
88
}
89