Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
94.74% covered (success)
94.74%
18 / 19
74.07% covered (warning)
74.07%
20 / 27
44.44% covered (danger)
44.44%
8 / 18
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
OffenseLevel
94.74% covered (success)
94.74%
18 / 19
74.07% covered (warning)
74.07%
20 / 27
44.44% covered (danger)
44.44%
8 / 18
0.00% covered (danger)
0.00%
0 / 1
41.98
0.00% covered (danger)
0.00%
0 / 1
 fromString
94.74% covered (success)
94.74%
18 / 19
74.07% covered (warning)
74.07%
20 / 27
44.44% covered (danger)
44.44%
8 / 18
0.00% covered (danger)
0.00%
0 / 1
41.98
1<?php
2
3namespace App\Enum;
4
5/**
6 * @author Wilhelm Zwertvaegher
7 */
8enum OffenseLevel: int implements Enum
9{
10    case LOW = 1;
11
12    case MEDIUM = 5;
13
14    case HIGH = 10;
15
16    case VERY_HIGH = 15;
17
18    case MAX = 20;
19
20    public static function fromString(string $value): self
21    {
22        if (filter_var($value, FILTER_VALIDATE_INT)) {
23            $v = (int) $value;
24            try {
25                return self::from($v);
26            } catch (\Throwable $e) {
27                return ($v >= self::MAX->value) ? self::MAX :
28                    ($v >= self::VERY_HIGH->value ? self::VERY_HIGH :
29                    ($v >= self::HIGH->value ? self::HIGH :
30                    ($v >= self::MEDIUM->value ? self::MEDIUM :
31                    self::LOW
32                    )));
33            }
34        }
35
36        $normalized = strtoupper(preg_replace('/[^A-Za-z_]/', '_', $value));
37
38        return match ($normalized) {
39            'LOW' => self::LOW,
40            'MEDIUM' => self::MEDIUM,
41            'HIGH' => self::HIGH,
42            'VERY_HIGH' => self::VERY_HIGH,
43            'MAX' => self::MAX,
44            default => throw new \ValueError("Unknown offense level: {$normalized}"),
45        };
46    }
47}