Completed
Push — master ( 1f7cb9...c35835 )
by Zbigniew
09:09
created

AbstractEnum::toArray()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2.3149

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 4
cts 7
cp 0.5714
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 0
crap 2.3149
1
<?php
2
/**
3
 * This file is part of the WrikePhpLibrary package.
4
 *
5
 * (c) Zbigniew Ślązak
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace Zibios\WrikePhpLibrary\Enum;
12
13
/**
14
 * Abstract Enum
15
 */
16
abstract class AbstractEnum
17
{
18
    /**
19
     * @var array
20
     */
21
    protected static $cache = [];
22
23
    /**
24
     * @return array
25
     */
26 136
    public static function toArray()
27
    {
28 136
        $class = get_called_class();
29 136
        if (!array_key_exists($class, static::$cache)) {
30
            $reflection = new \ReflectionClass($class);
31
            static::$cache[$class] = $reflection->getConstants();
32
        }
33
34 136
        return static::$cache[$class];
35
    }
36
37
    /**
38
     * @return array|string[]
39
     */
40 16
    public static function getKeys()
41
    {
42 16
        return array_keys(static::toArray());
43
    }
44
45
    /**
46
     * @param mixed $value
47
     *
48
     * @return string
49
     * @throws \InvalidArgumentException
50
     */
51 8
    public static function getKey($value)
52
    {
53 8
        self::assertIsValidValue($value);
54
55 8
        return (string) array_search($value, static::toArray(), true);
56
    }
57
58
    /**
59
     * @param string $key
60
     *
61
     * @return bool
62
     */
63 40
    public static function isValidKey($key)
64
    {
65 40
        return array_key_exists($key, self::toArray());
66
    }
67
68
    /**
69
     * @param string $key
70
     *
71
     * @throws \InvalidArgumentException
72
     */
73 40
    public static function assertIsValidKey($key)
74
    {
75 40
        if (self::isValidKey($key) === false) {
76 24
            throw new \InvalidArgumentException('Wrong key.');
77
        }
78 16
    }
79
80
    /**
81
     * @param string $key
82
     *
83
     * @return mixed
84
     * @throws \InvalidArgumentException
85
     */
86 8
    public static function getValue($key)
87
    {
88 8
        self::assertIsValidKey($key);
89
90 8
        return static::toArray()[$key];
91
    }
92
93
    /**
94
     * @return array
95
     */
96 16
    public static function getValues()
97
    {
98 16
        return array_values(self::toArray());
99
    }
100
101
    /**
102
     * @param mixed $value
103
     *
104
     * @return bool
105
     */
106 72
    public static function isValidValue($value)
107
    {
108 72
        return in_array($value, static::toArray(), true);
109
    }
110
111
    /**
112
     * @throws \InvalidArgumentException
113
     *
114
     * @param mixed $value
115
     */
116 72
    public static function assertIsValidValue($value)
117
    {
118 72
        if (self::isValidValue($value) === false) {
119 24
            throw new \InvalidArgumentException('Wrong value.');
120
        }
121 48
    }
122
}
123