Completed
Push — master ( 1842cb...2414f9 )
by ARCANEDEV
03:37
created

SqliteExpression   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 54
c 0
b 0
f 0
wmc 9
lcom 1
cbo 2
ccs 21
cts 21
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B getValue() 0 24 6
A interval() 0 11 3
1
<?php namespace Arcanedev\LaravelMetrics\Expressions\TrendDateFormat;
2
3
use Arcanedev\LaravelMetrics\Exceptions\InvalidTrendUnitException;
4
use Arcanedev\LaravelMetrics\Expressions\TrendDateFormat\Expression;
5
use Arcanedev\LaravelMetrics\Metrics\Trend;
6
7
/**
8
 * Class     SqliteExpression
9
 *
10
 * @package  Arcanedev\LaravelMetrics\Expressions\TrendDateFormat
11
 * @author   ARCANEDEV <[email protected]>
12
 */
13
class SqliteExpression extends Expression
14
{
15
    /* -----------------------------------------------------------------
16
     |  Main Methods
17
     | -----------------------------------------------------------------
18
     */
19
20
    /**
21
     * Get the value of the expression.
22
     *
23
     * @return mixed
24
     */
25 56
    public function getValue()
26
    {
27 56
        $interval = $this->interval();
28
29 56
        switch ($this->unit) {
30 42
            case Trend::BY_MONTHS:
31 12
                return "strftime('%Y-%m', datetime({$this->wrap($this->value)}, {$interval}))";
32
33 33
            case Trend::BY_WEEKS:
34 8
                return "strftime('%Y-%W', datetime({$this->wrap($this->value)}, {$interval}))";
35
36 27
            case Trend::BY_DAYS:
37 16
                return "strftime('%Y-%m-%d', datetime({$this->wrap($this->value)}, {$interval}))";
38
39 15
            case Trend::BY_HOURS:
40 8
                return "strftime('%Y-%m-%d %H:00', datetime({$this->wrap($this->value)}, {$interval}))";
41
42 9
            case Trend::BY_MINUTES:
43 8
                return "strftime('%Y-%m-%d %H:%M:00', datetime({$this->wrap($this->value)}, {$interval}))";
44
45
            default:
46 4
                throw InvalidTrendUnitException::make($this->unit);
47
        }
48
    }
49
50
    /**
51
     * Get the interval.
52
     *
53
     * @return string
54
     */
55 56
    private function interval(): string
56
    {
57 56
        $offset = $this->offset();
58
59 56
        if ($offset > 0)
60 20
            return '\'+'.$offset.' hour\'';
61 56
        elseif ($offset === 0)
62 56
            return '\'+0 hour\'';
63
64 20
        return '\'-'.($offset * -1).' hour\'';
65
    }
66
}
67