Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
5.00% covered (danger)
5.00%
1 / 20
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Uuid
5.00% covered (danger)
5.00%
1 / 20
50.00% covered (danger)
50.00%
1 / 2
17.72
0.00% covered (danger)
0.00%
0 / 1
 getRegularExpression
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 generateFromInteger
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2namespace Apie\Core\Identifiers;
3
4use Apie\Core\Attributes\Description;
5use Apie\Core\ValueObjects\Interfaces\HasRegexValueObjectInterface;
6use Apie\Core\ValueObjects\IsStringWithRegexValueObject;
7use GMP;
8
9#[Description('Uuid written in 8-4-4-4-12 text format')]
10class 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}