Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
Expires
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __call
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
4
 get
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Headers\Response;
4
5use Headers\Response\Exceptions\IntervalMethodNotFoundException;
6use InvalidArgumentException;
7
8/**
9 * @method self seconds(int $value)
10 * @method self minutes(int $value)
11 * @method self hours(int $value)
12 * @method self days(int $value)
13 * @method self weeks(int $value)
14 * @method self months(int $value)
15 * @method self years(int $value)
16 */
17class Expires
18{
19    protected array $intervalStrings = [];
20
21    protected const DATETIME_LIST = [
22        'seconds',
23        'minutes',
24        'hours',
25        'days',
26        'weeks',
27        'months',
28        'years'
29    ];
30
31    /**
32     * Obs: 
33     * $method = o nome do método invocado ex: days
34     * $param[0] = o primeiro parametro capturado pelo __call
35     * 
36     * Ex: $expires->days(10)
37     * $method = 'days'
38     * $params[0] = 10
39     */
40    public function __call(string $method, array $params): mixed
41    {
42        if (false === in_array($method, self::DATETIME_LIST)) {
43            throw new IntervalMethodNotFoundException("Method '$method' does not exists");
44        }
45
46        if (false === is_int($params[0])) {
47            throw new InvalidArgumentException('Parameter is not int');
48        }
49
50        if ($params[0] < 0) {
51            throw new InvalidArgumentException('Invalid negative parameter');
52        }
53
54        $this->intervalStrings[] = $params[0] . ' ' . $method;
55        return $this;
56    }
57
58    public function get(): string
59    {
60        return implode(' + ', $this->intervalStrings);
61    }
62}