Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
5.00% |
1 / 20 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
| Uuid | |
5.00% |
1 / 20 |
|
50.00% |
1 / 2 |
17.72 | |
0.00% |
0 / 1 |
| getRegularExpression | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| generateFromInteger | |
0.00% |
0 / 19 |
|
0.00% |
0 / 1 |
12 | |||
| 1 | <?php |
| 2 | namespace Apie\Core\Identifiers; |
| 3 | |
| 4 | use Apie\Core\Attributes\Description; |
| 5 | use Apie\Core\ValueObjects\Interfaces\HasRegexValueObjectInterface; |
| 6 | use Apie\Core\ValueObjects\IsStringWithRegexValueObject; |
| 7 | use GMP; |
| 8 | |
| 9 | #[Description('Uuid written in 8-4-4-4-12 text format')] |
| 10 | class Uuid implements HasRegexValueObjectInterface |
| 11 | { |
| 12 | use IsStringWithRegexValueObject; |
| 13 | |
| 14 | public static function getRegularExpression(): string |
| 15 | { |
| 16 | return '/^[a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12}$/'; |
| 17 | } |
| 18 | |
| 19 | public static function generateFromInteger(int|string|GMP $number): static |
| 20 | { |
| 21 | if (is_int($number) && $number <= 0xFFFFFFFFFFFF) { |
| 22 | return static::fromNative( |
| 23 | sprintf( |
| 24 | '00000000-0000-0000-0000-%012x', |
| 25 | $number |
| 26 | ) |
| 27 | ); |
| 28 | } |
| 29 | $hex = gmp_strval(gmp_init($number, 10), 16); |
| 30 | $hex = str_pad($hex, 32, '0', STR_PAD_LEFT); |
| 31 | return static::fromNative( |
| 32 | sprintf( |
| 33 | '%s-%s-%s-%s-%s', |
| 34 | substr($hex, 0, 8), |
| 35 | substr($hex, 8, 4), |
| 36 | substr($hex, 12, 4), |
| 37 | substr($hex, 16, 4), |
| 38 | substr($hex, 20, 12) |
| 39 | ) |
| 40 | ); |
| 41 | } |
| 42 | } |