Completed
Push — master ( d4b65d...556902 )
by Nico
02:06
created

container.php$0 ➔ userMethodFactory()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2
1
<?php declare(strict_types=1);
2
3
/**
4
 * @license     http://opensource.org/licenses/mit-license.php MIT
5
 * @link        https://github.com/nicoSWD
6
 * @author      Nicolas Oelgart <[email protected]>
7
 */
8
namespace nicoSWD\Rule;
9
10
use nicoSWD\Rule\Grammar\JavaScript\JavaScript;
11
use nicoSWD\Rule\TokenStream\AST;
12
use nicoSWD\Rule\Compiler\CompilerFactory;
13
use nicoSWD\Rule\Evaluator\Evaluator;
14
use nicoSWD\Rule\Evaluator\EvaluatorInterface;
15
use nicoSWD\Rule\Expression\ExpressionFactory;
16
use nicoSWD\Rule\Tokenizer\Tokenizer;
17
use nicoSWD\Rule\TokenStream\Token\TokenFactory;
18
use nicoSWD\Rule\TokenStream\TokenStreamFactory;
19
use nicoSWD\Rule\TokenStream\CallableUserMethodFactory;
20
21
return new class {
22
    private static $tokenStreamFactory;
23
    private static $tokenFactory;
24
    private static $compiler;
25
    private static $javaScript;
26
    private static $expressionFactory;
27
    private static $userMethodFactory;
28
    private static $tokenizer;
29
    private static $evaluator;
30
31 228
    public function parser(array $variables): Parser\Parser
32
    {
33 228
        return new Parser\Parser(
34 228
            self::ast($variables),
35 228
            self::expressionFactory(),
36 228
            self::compiler()
37
        );
38
    }
39
40 162
    public function evaluator(): EvaluatorInterface
41
    {
42 162
        if (!isset(self::$evaluator)) {
43 2
            self::$evaluator = new Evaluator();
44
        }
45
46 162
        return self::$evaluator;
47
    }
48
49 228
    private static function tokenFactory(): TokenFactory
50
    {
51 228
        if (!isset(self::$tokenFactory)) {
52 2
            self::$tokenFactory = new TokenFactory();
53
        }
54
55 228
        return self::$tokenFactory;
56
    }
57
58 228
    private static function compiler(): CompilerFactory
59
    {
60 228
        if (!isset(self::$compiler)) {
61 2
            self::$compiler = new CompilerFactory();
62
        }
63
64 228
        return self::$compiler;
65
    }
66
67 228
    private static function ast(array $variables): AST
68
    {
69 228
        $ast = new AST(self::tokenizer(), self::tokenFactory(), self::tokenStreamFactory(), self::userMethodFactory());
70 228
        $ast->setVariables($variables);
71
72 228
        return $ast;
73
    }
74
75 228
    private static function tokenizer(): Tokenizer
76
    {
77 228
        if (!isset(self::$tokenizer)) {
78 2
            self::$tokenizer = new Tokenizer(self::javascript(), self::tokenFactory());
79
        }
80
81 228
        return self::$tokenizer;
82
    }
83
84 2
    private static function javascript(): JavaScript
85
    {
86 2
        if (!isset(self::$javaScript)) {
87 2
            self::$javaScript = new JavaScript();
88
        }
89
90 2
        return self::$javaScript;
91
    }
92
93 228
    private static function tokenStreamFactory(): TokenStreamFactory
94
    {
95 228
        if (!isset(self::$tokenStreamFactory)) {
96 2
            self::$tokenStreamFactory = new TokenStreamFactory();
97
        }
98
99 228
        return self::$tokenStreamFactory;
100
    }
101
102 228
    private static function expressionFactory(): ExpressionFactory
103
    {
104 228
        if (!isset(self::$expressionFactory)) {
105 2
            self::$expressionFactory = new ExpressionFactory();
106
        }
107
108 228
        return self::$expressionFactory;
109
    }
110
111 228
    private static function userMethodFactory(): CallableUserMethodFactory
112
    {
113 228
        if (!isset(self::$userMethodFactory)) {
114 2
            self::$userMethodFactory = new CallableUserMethodFactory();
115
        }
116
117 228
        return self::$userMethodFactory;
118
    }
119
};
120