Passed
Push — master ( 2ef79b...70e25c )
by Martijn
03:03
created

RuleToParserTrait   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 31
dl 0
loc 107
ccs 30
cts 30
cp 1
rs 10
c 0
b 0
f 0
wmc 17

6 Methods

Rating   Name   Duplication   Size   Complexity  
A argumentRuleToParser() 0 9 4
A ruleToParser() 0 10 3
A definitionRuleToParser() 0 7 2
A parserRuleToParser() 0 7 2
A classnameRuleToParser() 0 9 4
A callableRuleToParser() 0 7 2
1
<?php
2
3
namespace Vanderlee\Comprehend\Builder;
4
5
use Vanderlee\Comprehend\Parser\Parser;
6
7
trait RuleToParserTrait
8
{
9
    /**
10
     * List of static methods (in order) to attempt instantiating a rule
11
     *
12
     * @var string[]
13
     */
14
    private static $ruleToParserMethods = [
15
        'definitionRuleToParser',
16
        'parserRuleToParser',
17
        'callableRuleToParser',
18
        'classnameRuleToParser',
19
        'argumentRuleToParser',
20
    ];
21
22
    /**
23
     * @param mixed $rule
24
     * @param array $arguments
25
     * @return Implementation
26
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
27
     */
28 29
    private static function definitionRuleToParser(&$rule, $arguments)
29
    {
30 29
        if ($rule instanceof Definition) {
31 14
            return new Implementation($rule, $arguments);
32
        }
33
34 18
        return null;
35
    }
36
37
    /**
38
     * @param mixed $rule
39
     * @return Parser
40
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
41
     */
42 18
    private static function parserRuleToParser(&$rule)
43
    {
44 18
        if ($rule instanceof Parser) {
45 7
            return clone $rule;
46
        }
47
48 13
        return null;
49
    }
50
51
    /**
52
     * @param mixed $rule
53
     * @param array $arguments
54
     * @return Parser
55
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
56
     */
57 13
    private static function callableRuleToParser(&$rule, $arguments)
58
    {
59 13
        if (is_callable($rule)) {
60 6
            return $rule(...$arguments);
61
        }
62
63 7
        return null;
64
    }
65
66
    /**
67
     * @param mixed $rule
68
     * @param array $arguments
69
     * @return Parser
70
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
71
     */
72 8
    private static function classnameRuleToParser(&$rule, $arguments)
73
    {
74 8
        if (is_string($rule)
75 8
            && class_exists($rule)
76 8
            && is_subclass_of($rule, Parser::class)) {
77 1
            return new $rule(...$arguments);
78
        }
79
80 7
        return null;
81
    }
82
83
    /**
84
     * @param mixed $rule
85
     * @return Parser
86
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
87
     */
88 7
    private static function argumentRuleToParser(&$rule)
89
    {
90 7
        if (is_array($rule)
91 6
            || is_string($rule)
92 7
            || is_int($rule)) {
93 5
            return self::getArgument($rule);
94
        }
95
96 2
        return null;
97
    }
98
99
    /**
100
     * @param Mixed $rule
101
     * @param $arguments
102
     * @return Parser|null
103
     */
104 29
    private static function ruleToParser(&$rule, $arguments)
105
    {
106 29
        foreach (self::$ruleToParserMethods as $ruleToParserMethod) {
107 29
            $instance = self::$ruleToParserMethod($rule, $arguments);
108 29
            if ($instance) {
109 29
                return $instance;
110
            }
111
        }
112
113 2
        return null;
114
    }
115
}