Passed
Push — master ( c2e69f...e5bfaf )
by Samuel
43s
created

Frequency::convertToDateTimeFormat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 1
cts 1
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Recurrence;
4
5
/**
6
 * Class Frequency
7
 * @package Recurrence
8
 */
9
class Frequency
10
{
11
    const FREQUENCY_YEARLY   = 'YEARLY';
12
    const FREQUENCY_MONTHLY  = 'MONTHLY';
13
    const FREQUENCY_WEEKLY   = 'WEEKLY';
14
    const FREQUENCY_DAILY    = 'DAILY';
15
    const FREQUENCY_HOURLY   = 'HOURLY';
16
    const FREQUENCY_MINUTELY = 'MINUTELY';
17
    const FREQUENCY_SECONDLY = 'SECONDLY';
18
19
    /**
20
     * @var array
21
     */
22
    private $frequencies = [
23
        self::FREQUENCY_YEARLY,
24
        self::FREQUENCY_MONTHLY,
25
        self::FREQUENCY_WEEKLY,
26
        self::FREQUENCY_DAILY,
27
        self::FREQUENCY_HOURLY,
28
        self::FREQUENCY_MINUTELY,
29
        self::FREQUENCY_SECONDLY,
30
    ];
31
32
    const DATEINTERVAL_YEARLY   = 'P1Y';
33
    const DATEINTERVAL_MONTHLY  = 'P1M';
34
    const DATEINTERVAL_WEEKLY   = 'P1W';
35
    const DATEINTERVAL_DAILY    = 'P1D';
36
    const DATEINTERVAL_HOURLY   = 'PT1H';
37
    const DATEINTERVAL_MINUTELY = 'PT1M';
38
    const DATEINTERVAL_SECONDLY = 'PT1S';
39
40
    /**
41
     * @var array
42
     */
43
    private $dateIntervalFrequencies = [
44
        self::FREQUENCY_YEARLY   => self::DATEINTERVAL_YEARLY,
45
        self::FREQUENCY_MONTHLY  => self::DATEINTERVAL_MONTHLY,
46
        self::FREQUENCY_WEEKLY   => self::DATEINTERVAL_WEEKLY,
47
        self::FREQUENCY_DAILY    => self::DATEINTERVAL_DAILY,
48
        self::FREQUENCY_HOURLY   => self::DATEINTERVAL_HOURLY,
49
        self::FREQUENCY_MINUTELY => self::DATEINTERVAL_MINUTELY,
50
        self::FREQUENCY_SECONDLY => self::DATEINTERVAL_SECONDLY,
51
    ];
52
53
    const DATETIME_YEARLY   = '+1 years';
54
    const DATETIME_MONTHLY  = '+1 months';
55
    const DATETIME_WEEKLY   = '+1 weeks';
56
    const DATETIME_DAILY    = '+1 days';
57
    const DATETIME_HOURLY   = '+1 hours';
58
    const DATETIME_MINUTELY = '+1 minutes';
59
    const DATETIME_SECONDLY = '+1 seconds';
60
61
    /**
62
     * @var array
63
     */
64
    private $dateTimeFrequencies = [
65
        self::FREQUENCY_YEARLY   => self::DATETIME_YEARLY,
66
        self::FREQUENCY_MONTHLY  => self::DATETIME_MONTHLY,
67
        self::FREQUENCY_WEEKLY   => self::DATETIME_WEEKLY,
68
        self::FREQUENCY_DAILY    => self::DATETIME_DAILY,
69
        self::FREQUENCY_HOURLY   => self::DATETIME_HOURLY,
70
        self::FREQUENCY_MINUTELY => self::DATETIME_MINUTELY,
71
        self::FREQUENCY_SECONDLY => self::DATETIME_SECONDLY,
72
    ];
73
74
    /**
75
     * @var string
76
     */
77
    private $frequencyName;
78
79
    /**
80
     * @param string $frequencyName
81
     */
82
    public function __construct($frequencyName)
83
    {
84 1
        if (!in_array($frequencyName, $this->frequencies)) {
85 1
            throw new \InvalidArgumentException(sprintf('Invalid frequency name. Supported values are : %s', implode(', ', $this->frequencies)));
86
        }
87
88 1
        $this->frequencyName = $frequencyName;
89 1
    }
90
91
    /**
92
     * @return string
93
     */
94
    public function convertToDateIntervalFormat()
95
    {
96 1
        return $this->dateIntervalFrequencies[$this->frequencyName];
97
    }
98
99
    /**
100
     * @return string
101
     */
102
    public function convertToDateTimeFormat()
103
    {
104 1
        return $this->dateTimeFrequencies[$this->frequencyName];
105
    }
106
107
    /**
108
     * @return string
109
     */
110
    public function __toString()
111
    {
112 1
        return $this->frequencyName;
113
    }
114
}
115