StringCaseInsensitiveEnumTrait   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 1
Metric Value
eloc 20
c 1
b 1
f 1
dl 0
loc 43
rs 10
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A validValue() 0 5 1
A sanitizeValue() 0 6 1
A getValidValues() 0 4 1
A getLookupTable() 0 13 4
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