Version   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
eloc 17
dl 0
loc 45
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A semver() 0 9 3
A semverBuildIdentifier() 0 9 2
A semverPreReleaseIdentifier() 0 9 2
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace DummyGenerator\Core;
6
7
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionInterface;
8
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionTrait;
9
use DummyGenerator\Definitions\Extension\VersionExtensionInterface;
10
11
class Version implements VersionExtensionInterface, RandomizerAwareExtensionInterface
12
{
13
    use RandomizerAwareExtensionTrait;
14
15
    /** @var string[] */
16
    protected array $semverCommonPreReleaseIdentifiers = ['alpha', 'beta', 'rc'];
17
18 3
    public function semver(bool $preRelease = false, bool $build = false): string
19
    {
20 3
        return sprintf(
21 3
            '%d.%d.%d%s%s',
22 3
            $this->randomizer->getInt(0, 9),
23 3
            $this->randomizer->getInt(0, 99),
24 3
            $this->randomizer->getInt(0, 99),
25 3
            $preRelease ? '-' . $this->semverPreReleaseIdentifier($this->randomizer->getBool()) : '',
26 3
            $build ? '+' . $this->semverBuildIdentifier($this->randomizer->getBool()) : '',
27 3
        );
28
    }
29
30
    /**
31
     * Common pre-release identifier
32
     */
33 2
    private function semverPreReleaseIdentifier(bool $short = true): string
34
    {
35 2
        $ident = $this->randomizer->randomElement($this->semverCommonPreReleaseIdentifiers);
36
37 2
        if ($short) {
38 1
            return $ident;
39
        }
40
41 1
        return $ident . '.' . $this->randomizer->getInt(1, 99);
42
    }
43
44
    /**
45
     * Common random build identifier
46
     */
47 2
    private function semverBuildIdentifier(bool $shortSyntax = true): string
48
    {
49 2
        if ($shortSyntax) {
50
            // short git revision syntax: https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
51 1
            return substr(sha1(uniqid('', true)), 0, 7);
52
        }
53
54
        // date syntax
55 1
        return (new \DateTimeImmutable())->format('YmdHis');
56
    }
57
}
58