Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ExpirableScript
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
1 / 1
 expired
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 expiresAt
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isExpired
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace AqwSocketClient\Scripts;
6
7use AqwSocketClient\Enums\ScriptResult;
8use AqwSocketClient\Interfaces\ExpirableScriptInterface;
9use DateTimeImmutable;
10use Override;
11
12/**
13 * Base implementation for atomic expirable scripts.
14 *
15 * Extends {@see AqwSocketClient\Scripts\AbstractScript} by adding
16 * time-based expiration support.
17 */
18abstract class ExpirableScript extends AbstractScript implements ExpirableScriptInterface
19{
20    private ?DateTimeImmutable $expiresAt = null;
21
22    #[Override]
23    public function expired(): void
24    {
25        $this->done();
26        $this->setResult(ScriptResult::Expired);
27    }
28
29    #[Override]
30    public function expiresAt(DateTimeImmutable $expiresAt): void
31    {
32        $this->expiresAt = $expiresAt;
33    }
34
35    #[Override]
36    public function isExpired(): bool
37    {
38        if ($this->expiresAt === null) {
39            $this->expiresAt(new DateTimeImmutable('+1 minute'));
40            return false;
41        }
42
43        return new DateTimeImmutable() > $this->expiresAt;
44    }
45}