Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace Faker\Core;
6
 
7
use Faker\Extension\Helper;
8
use Faker\Extension\VersionExtension;
9
use Faker\Provider\DateTime;
10
 
11
final class Version implements VersionExtension
12
{
13
    /**
14
     * @var string[]
15
     */
16
    private $semverCommonPreReleaseIdentifiers = ['alpha', 'beta', 'rc'];
17
 
18
    /**
19
     * Represents v2.0.0 of the semantic versioning: https://semver.org/spec/v2.0.0.html
20
     */
21
    public function semver(bool $preRelease = false, bool $build = false): string
22
    {
23
        return sprintf(
24
            '%d.%d.%d%s%s',
25
            mt_rand(0, 9),
26
            mt_rand(0, 99),
27
            mt_rand(0, 99),
28
            $preRelease && mt_rand(0, 1) ? '-' . $this->semverPreReleaseIdentifier() : '',
29
            $build && mt_rand(0, 1) ? '+' . $this->semverBuildIdentifier() : '',
30
        );
31
    }
32
 
33
    /**
34
     * Common pre-release identifier
35
     */
36
    private function semverPreReleaseIdentifier(): string
37
    {
38
        $ident = Helper::randomElement($this->semverCommonPreReleaseIdentifiers);
39
 
40
        if (!mt_rand(0, 1)) {
41
            return $ident;
42
        }
43
 
44
        return $ident . '.' . mt_rand(1, 99);
45
    }
46
 
47
    /**
48
     * Common random build identifier
49
     */
50
    private function semverBuildIdentifier(): string
51
    {
52
        if (mt_rand(0, 1)) {
53
            // short git revision syntax: https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
54
            return substr(sha1(Helper::lexify('??????')), 0, 7);
55
        }
56
 
57
        // date syntax
58
        return DateTime::date('YmdHis');
59
    }
60
}