GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( e1e734...1d93cd )
by Freek
01:10
created

TestTime::getCarbon()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.2888
c 0
b 0
f 0
cc 5
nc 5
nop 1
1
<?php
2
3
namespace Spatie\TestTime;
4
5
use Carbon\Carbon;
6
use InvalidArgumentException;
7
8
/**
9
 * @mixin \Carbon\Carbon
10
 *
11
 * @method static self addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval).
12
 * @method static self addDay() Add one day to the instance (using date interval).
13
 * @method static self subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval).
14
 * @method static self subDay() Sub one day to the instance (using date interval).
15
 * @method static self addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval).
16
 * @method static self addHour() Add one hour to the instance (using date interval).
17
 * @method static self subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval).
18
 * @method static self subHour() Sub one hour to the instance (using date interval).
19
 * @method static self addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval).
20
 * @method static self addMinute() Add one minute to the instance (using date interval).
21
 * @method static self subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval).
22
 * @method static self subMinute() Sub one minute to the instance (using date interval).
23
 * @method static self addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval).
24
 * @method static self addSecond() Add one second to the instance (using date interval).
25
 * @method static self subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval).
26
 * @method static self subSecond() Sub one second to the instance (using date interval).
27
 * @method static self addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval).
28
 * @method static self addMilli() Add one millisecond to the instance (using date interval).
29
 * @method static self subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval).
30
 * @method static self subMilli() Sub one millisecond to the instance (using date interval).
31
 * @method static self addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval).
32
 * @method static self addMillisecond() Add one millisecond to the instance (using date interval).
33
 * @method static self subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval).
34
 * @method static self subMillisecond() Sub one millisecond to the instance (using date interval).
35
 * @method static self addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval).
36
 * @method static self addMicro() Add one microsecond to the instance (using date interval).
37
 * @method static self subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval).
38
 * @method static self subMicro() Sub one microsecond to the instance (using date interval).
39
 * @method static self addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval).
40
 * @method static self addMicrosecond() Add one microsecond to the instance (using date interval).
41
 * @method static self subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval).
42
 * @method static self subMicrosecond() Sub one microsecond to the instance (using date interval).
43
 * @method static self addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval).
44
 * @method static self addYear() Add one year to the instance (using date interval).
45
 * @method static self subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval).
46
 * @method static self subYear() Sub one year to the instance (using date interval).
47
 */
48
class TestTime
49
{
50
    public static function freeze(): Carbon
51
    {
52
        $frozenTime = static::getCarbon(func_get_args());
53
54
        Carbon::setTestNow($frozenTime);
55
56
        return $frozenTime;
57
    }
58
59
60
61
    public function __call($name, $arguments)
62
    {
63
        return $this->__callStatic($name, $arguments);
64
    }
65
66
    public static function __callStatic($name, $arguments)
67
    {
68
        $result = (new Carbon)->$name(...$arguments);
69
70
        if (! $result instanceof Carbon) {
71
            return $result;
72
        }
73
74
        Carbon::setTestNow($result);
75
76
        return new TestTime();
77
    }
78
79
    protected static function getCarbon(array $args): Carbon
80
    {
81
        if (count($args) === 0) {
82
            return Carbon::now();
83
        }
84
85
        if (count($args) === 1) {
86
            if (! $args[0] instanceof Carbon) {
87
                throw new InvalidArgumentException('You must pass a Carbon instance to `freeze`');
88
            }
89
90
            return $args[0];
91
        }
92
93
        if (count($args) === 2) {
94
            return Carbon::createFromFormat($args[0], $args[1]);
95
        }
96
97
        throw new InvalidArgumentException('You can only pass a maximum of two arguments to `freeze`');
98
    }
99
}
100