Completed
Push — master ( df194f...6edc14 )
by Samuel
13s
created

RecurrenceProvider::parse()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 24
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 24
rs 8.5125
cc 5
eloc 12
nc 9
nop 1
1
<?php
2
3
namespace Recurrence;
4
5
use Recurrence\RruleTransformer\DtStartTransformer;
6
use Recurrence\RruleTransformer\FreqTransformer;
7
use Recurrence\RruleTransformer\IntervalTransformer;
8
use Recurrence\RruleTransformer\UntilTransformer;
9
10
/**
11
 * Class RecurrenceProvider
12
 * @package Recurrence
13
 */
14
class RecurrenceProvider
15
{
16
17
    /**
18
     * @var FreqTransformer
19
     */
20
    private $freqTransformer;
21
22
    /**
23
     * @var DtStartTransformer
24
     */
25
    private $dtStartTransformer;
26
27
    /**
28
     * @var UntilTransformer
29
     */
30
    private $untilTransformer;
31
32
    /**
33
     * @var IntervalTransformer
34
     */
35
    private $intervalTransformer;
36
37
    /**
38
     * RecurrenceProvider constructor.
39
     */
40
    public function __construct()
41
    {
42
        $this->freqTransformer     = new FreqTransformer();
43
        $this->dtStartTransformer  = new DtStartTransformer();
44
        $this->untilTransformer    = new UntilTransformer();
45
        $this->intervalTransformer = new IntervalTransformer();
46
    }
47
48
    /**
49
     * @param string $rRule
50
     * @return Recurrence
51
     * @throws \InvalidArgumentException
52
     */
53
    public function parse($rRule)
54
    {
55
        if (empty($rRule)) {
56
            throw new \InvalidArgumentException('Empty RRULE');
57
        }
58
59
        $recurrence = new Recurrence();
60
61
        $recurrence->setFrequency($this->freqTransformer->transform($rRule));
62
63
        if ($periodStartAt = $this->dtStartTransformer->transform($rRule)) {
64
            $recurrence->setPeriodStartAt($periodStartAt);
65
        }
66
67
        if ($periodStartAt = $this->untilTransformer->transform($rRule)) {
68
            $recurrence->setPeriodEndAt($periodStartAt);
69
        }
70
71
        if ($interval = $this->intervalTransformer->transform($rRule)) {
72
            $recurrence->setInterval($interval);
73
        }
74
75
        return $recurrence;
76
    }
77
}
78