Passed
Push — main ( 8e5304...ba1bb8 )
by Pieter
04:56
created

StringCaseInsensitiveEnumTrait::validValue()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 1
Metric Value
cc 1
eloc 3
c 1
b 1
f 1
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
4
namespace Apie\ValueObjects;
5
6
use ReflectionClass;
7
8
trait StringCaseInsensitiveEnumTrait
9
{
10
    use StringTrait;
11
12
    /**
13
     * @var string[]
14
     */
15
    private static $lookupTable;
16
17
    final protected function validValue(string $value): bool
18
    {
19
        $value = strtoupper($value);
20
        $values = self::getLookupTable();
21
        return isset($values[$value]);
22
    }
23
24
    final protected function sanitizeValue(string $value): string
25
    {
26
        $value = strtoupper($value);
27
        $values = self::getLookupTable();
28
        assert(isset($values[$value]));
29
        return $values[$value];
30
    }
31
32
    private static function getLookupTable(): array
33
    {
34
        if (!self::$lookupTable) {
0 ignored issues
show
Bug Best Practice introduced by
The expression self::lookupTable of type string[] is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
35
            $values = self::getValidValues();
36
            self::$lookupTable = [];
37
            foreach ($values as $value) {
38
                self::$lookupTable[strtoupper($value)] = $value;
39
            }
40
            foreach ($values as $key => $value) {
41
                self::$lookupTable[strtoupper($key)] = $value;
42
            }
43
        }
44
        return self::$lookupTable;
45
    }
46
47
    final public static function getValidValues(): array
48
    {
49
        $reflectionClass = new ReflectionClass(__CLASS__);
50
        return $reflectionClass->getConstants();
51
    }
52
}
53