Passed
Pull Request — master (#20)
by Nico
09:54 queued 01:59
created

TokenFactory::createFromTokenName()   A

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 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
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\TokenStream\Token;
9
10
use InvalidArgumentException;
11
use nicoSWD\Rule\Parser\Exception\ParserException;
12
use nicoSWD\Rule\TokenStream\TokenCollection;
13
14
class TokenFactory
15
{
16
    /** @throws ParserException */
17
    public function createFromPHPType(mixed $value): BaseToken
18
    {
19
        return match (gettype($value)) {
20
            'string' => new TokenString($value),
21
            'integer' => new TokenInteger($value),
22
            'boolean' => new TokenBool($value),
23
            'NULL' => new TokenNull($value),
24
            'double' => new TokenFloat($value),
25
            'object' => new TokenObject($value),
26
            'array' => $this->buildTokenCollection($value),
27
            default => throw ParserException::unsupportedType(gettype($value))
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_THROW on line 27 at column 23
Loading history...
28
        };
29
    }
30
31
    public function createFromTokenName(string $tokenName): string
32
    {
33
        return match ($tokenName) {
34
            Token::AND => TokenAnd::class,
35
            Token::OR => TokenOr::class,
36
            Token::NOT_EQUAL_STRICT => TokenNotEqualStrict::class,
37
            Token::NOT_EQUAL => TokenNotEqual::class,
38
            Token::EQUAL_STRICT => TokenEqualStrict::class,
39
            Token::EQUAL => TokenEqual::class,
40
            Token::IN => TokenIn::class,
41
            Token::BOOL => TokenBool::class,
42
            Token::NULL => TokenNull::class,
43
            Token::METHOD => TokenMethod::class,
44
            Token::FUNCTION => TokenFunction::class,
45
            Token::VARIABLE => TokenVariable::class,
46
            Token::FLOAT => TokenFloat::class,
47
            Token::INTEGER => TokenInteger::class,
48 148
            Token::ENCAPSED_STRING => TokenEncapsedString::class,
49
            Token::SMALLER_EQUAL => TokenSmallerEqual::class,
50 148
            Token::GREATER_EQUAL => TokenGreaterEqual::class,
51 148
            Token::SMALLER => TokenSmaller::class,
52 90
            Token::GREATER => TokenGreater::class,
53 94
            Token::OPENING_PARENTHESIS => TokenOpeningParenthesis::class,
54 36
            Token::CLOSING_PARENTHESIS => TokenClosingParenthesis::class,
55 68
            Token::OPENING_ARRAY => TokenOpeningArray::class,
56 8
            Token::CLOSING_ARRAY => TokenClosingArray::class,
57 66
            Token::COMMA => TokenComma::class,
58 4
            Token::REGEX => TokenRegex::class,
59 64
            Token::COMMENT => TokenComment::class,
60 6
            Token::NEWLINE => TokenNewline::class,
61 60
            Token::SPACE => TokenSpace::class,
62 16
            Token::UNKNOWN => TokenUnknown::class,
63 46
            default => throw new InvalidArgumentException("Unknown token $tokenName")
64 44
        };
65
    }
66 2
67 2
    /** @throws ParserException */
68 2
    private function buildTokenCollection(array $items): TokenArray
69
    {
70
        $tokenCollection = new TokenCollection();
71
72
        foreach ($items as $item) {
73 286
            $tokenCollection->attach($this->createFromPHPType($item));
74
        }
75 286
76 2
        return new TokenArray($tokenCollection);
77
    }
78
}
79