Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
81.82% covered (warning)
81.82%
9 / 11
66.67% covered (warning)
66.67%
4 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
LanguageAndRegion
81.82% covered (warning)
81.82%
9 / 11
66.67% covered (warning)
66.67%
4 / 6
7.29
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLanguage
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getRegion
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 toPreferredValue
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 getSeparator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 createRandom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2namespace Apie\IanaValueObjects;
3
4use Apie\Core\Attributes\ExampleValue;
5use Apie\Core\Attributes\FakeMethod;
6use Apie\Core\ValueObjects\SnowflakeIdentifier;
7use Apie\IanaValueObjects\LanguageTag\Language;
8use Apie\IanaValueObjects\LanguageTag\LanguageRegion;
9use Faker\Generator;
10
11#[FakeMethod('createRandom')]
12#[ExampleValue('nl', 'Language only')]
13#[ExampleValue('en-US', 'Language and region')]
14final class LanguageAndRegion extends SnowflakeIdentifier
15{
16    public function __construct(private Language $language, private ?LanguageRegion $region = null)
17    {
18    }
19
20    public function getLanguage(): Language
21    {
22        return $this->language;
23    }
24
25    public function getRegion(): ?LanguageRegion
26    {
27        return $this->region;
28    }
29
30    public function toPreferredValue(): static
31    {
32        $language = $this->language->toPreferredValue();
33        $region = $this->region?->toPreferredValue();
34        return new static($language, $region);
35    }
36
37    protected static function getSeparator(): string
38    {
39        return '-';
40    }
41
42    public static function createRandom(Generator $factory): LanguageAndRegion
43    {
44        return new LanguageAndRegion(
45            $factory->fakeClass(Language::class),
46            $factory->boolean(50) ? $factory->fakeClass(LanguageRegion::class) : null
47        );
48    }
49}