Passed
Pull Request — master (#55)
by Tim
01:56
created

DateTrait   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 7
c 1
b 0
f 0
dl 0
loc 44
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A validDate() 0 7 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XML\Assert;
6
7
use InvalidArgumentException;
8
9
/**
10
 * @package simplesamlphp/xml-common
11
 */
12
trait DateTrait
13
{
14
    /**
15
     * The ·lexical space· of date consists of finite-length sequences of characters of the form:
16
     * '-'? yyyy '-' mm '-' dd zzzzzz?
17
     *
18
     * where the date and optional timezone are represented exactly the same way as they are for dateTime.
19
     * The first moment of the interval is that represented by:
20
     * '-' yyyy '-' mm '-' dd 'T00:00:00' zzzzzz?
21
     *
22
     * and the least upper bound of the interval is the timeline point represented (noncanonically) by:
23
     * '-' yyyy '-' mm '-' dd 'T24:00:00' zzzzzz?.
24
     *
25
     * @var string
26
     */
27
    private static string $date_regex  = '/^
28
        -?
29
        ([1-9][0-9]*|[0-9]{4})
30
        -
31
        (
32
            ((0(1|3|5|7|8)|1(0|2))-(0[1-9]|(1|2)[0-9]|3[0-1]))
33
            |((0(4|6|9)|11)-(0[1-9]|(1|2)[0-9]|30))
34
            |(02-(0[1-9]|(1|2)[0-9]))
35
        )
36
        (
37
            ([+-]
38
                ([0-1][0-9]|2[0-4])
39
                :
40
                (0[0-9]|[1-5][0-9])
41
            )|Z
42
        )?$/Dx';
43
44
45
    /**
46
     * @param string $value
47
     * @param string $message
48
     */
49
    protected static function validDate(string $value, string $message = ''): void
50
    {
51
        parent::regex(
52
            $value,
53
            self::$date_regex,
54
            $message ?: '%s is not a valid xs:date',
55
            InvalidArgumentException::class,
56
        );
57
    }
58
}
59