Passed
Push — master ( ed2711...5bfb66 )
by Samuel
02:22
created

ExcludeWeekendConstraint   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 6
c 1
b 0
f 0
dl 0
loc 25
ccs 5
cts 5
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A apply() 0 9 2
A isWeekend() 0 2 1
1
<?php
2
3
namespace Recurrence\Constraint\DatetimeConstraint;
4
5
use Recurrence\Constraint\RecurrenceConstraintInterface;
6
use Recurrence\Model\Recurrence;
7
8
/**
9
 * Class ExcludeWeekendConstraint
10
 * @package Recurrence\Constraint
11
 */
12
class ExcludeWeekendConstraint implements DatetimeConstraintInterface, RecurrenceConstraintInterface
13
{
14
15
    /**
16
     * @param Recurrence $recurrence
17
     * @param \Datetime $datetime
18
     * @return \Datetime
19
     */
20
    public function apply(Recurrence $recurrence, \Datetime $datetime)
21
    {
22 1
        if ($this->isWeekend($datetime)) {
23
            // Add 1 or 2 days to skip weekend (we didn't use `next monday` pattern of \Datetime::format cause it remove time)
24 1
            $days = (7 - (int) $datetime->format('N') + 1);
25 1
            $datetime->modify(sprintf('+%d days', $days));
26
        }
27
28 1
        return $datetime;
29
    }
30
31
    /**
32
     * @param \Datetime $datetime
33
     * @return bool
34
     */
35
    private function isWeekend($datetime) {
36 1
        return ((int) $datetime->format('N') >= 6);
37
    }
38
}
39