TokenParser::parseToken()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 9
cts 9
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 3
nop 1
crap 3
1
<?php
2
3
4
namespace CondParse;
5
6
7
use CondParse\ParseStrategy\ClosingBracket;
8
use CondParse\ParseStrategy\DefaultStrategy;
9
use CondParse\ParseStrategy\Operand;
10
use CondParse\ParseStrategy\ParseStrategyInterface;
11
use CondParse\ParseStrategy\ToOperatorStack;
12
use CondParse\ParseStrategy\WhiteSpace;
13
14
class TokenParser
15
{
16
    const STRATEGIES = [
17
        WhiteSpace::class,
18
        Operand::class,
19
        ToOperatorStack::class,
20
        ClosingBracket::class
21
    ];
22
23
    const FALLBACK_STRATEGY = DefaultStrategy::class;
24
25
    /** @var ParseStrategyInterface[] */
26
    private $strategies;
27
    /** @var ParseStrategyInterface */
28
    private $fallbackStrategy;
29
30
    public function __construct()
31
    {
32 17
        $this->strategies = array_map(function ($class) {
33 17
            return new $class();
34 17
        }, self::STRATEGIES);
35
36 17
        $fallbackClass = self::FALLBACK_STRATEGY;
37 17
        $this->fallbackStrategy = new $fallbackClass();
38 17
    }
39
40
    /**
41
     * @param TokenParserParameter $parameter
42
     */
43 17
    public function parseToken(TokenParserParameter $parameter)
44
    {
45 17
        foreach ($this->strategies as $strategy) {
46 17
            if (! $strategy->shouldExecuteFor($parameter)) {
47 16
                continue;
48
            }
49
50 16
            $strategy->executeFor($parameter);
51 16
            return;
52 4
        }
53
54 4
        $this->fallbackStrategy->executeFor($parameter);
55 4
    }
56
}
57