RuleToParserTrait::callableRuleToParser()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 2
eloc 3
nc 2
nop 2
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 1
b 1
f 0
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
     *
26
     * @return Implementation|null
27
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
28
     */
29 29
    private static function definitionRuleToParser($rule, $arguments)
30
    {
31 29
        if ($rule instanceof Definition) {
32 14
            return new Implementation($rule, $arguments);
33
        }
34
35 18
        return null;
36
    }
37
38
    /**
39
     * @param mixed $rule
40
     *
41
     * @return Parser|null
42
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
43
     */
44 18
    private static function parserRuleToParser($rule)
45
    {
46 18
        if ($rule instanceof Parser) {
47 7
            return clone $rule;
48
        }
49
50 13
        return null;
51
    }
52
53
    /**
54
     * @param mixed $rule
55
     * @param array $arguments
56
     *
57
     * @return Parser|null
58
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
59
     */
60 13
    private static function callableRuleToParser($rule, $arguments)
61
    {
62 13
        if (is_callable($rule)) {
63 6
            return $rule(...$arguments);
64
        }
65
66 7
        return null;
67
    }
68
69
    /**
70
     * @param mixed $rule
71
     * @param array $arguments
72
     *
73
     * @return Parser|null
74
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
75
     */
76 8
    private static function classnameRuleToParser($rule, $arguments)
77
    {
78 8
        if (is_string($rule)
79 8
            && class_exists($rule)
80 8
            && is_subclass_of($rule, Parser::class)) {
81 1
            return new $rule(...$arguments);
82
        }
83
84 7
        return null;
85
    }
86
87
    /**
88
     * @param mixed $rule
89
     *
90
     * @return Parser|null
91
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
92
     */
93 7
    private static function argumentRuleToParser($rule)
94
    {
95 7
        if (is_array($rule)
96 6
            || is_string($rule)
97 7
            || is_int($rule)) {
98 5
            return self::getArgument($rule);
99
        }
100
101 2
        return null;
102
    }
103
104
    /**
105
     * @param mixed $rule
106
     * @param       $arguments
107
     *
108
     * @return Parser|null
109
     */
110 29
    private static function ruleToParser(&$rule, $arguments)
111
    {
112 29
        foreach (self::$ruleToParserMethods as $ruleToParserMethod) {
113 29
            $instance = self::$ruleToParserMethod($rule, $arguments);
114 29
            if ($instance) {
115 29
                return $instance;
116
            }
117
        }
118
119 2
        return null;
120
    }
121
}
122