Completed
Push — master ( f06ad0...9cb85d )
by Nico
06:26
created

anonymous//src/nicoSWD/Rules/container.php$0   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 9

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 16
lcom 2
cbo 9
dl 0
loc 90
ccs 37
cts 37
cp 1
rs 10
c 0
b 0
f 0

9 Methods

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