DruidInputSource   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 19
dl 0
loc 62
ccs 20
cts 20
cp 1
rs 10
c 1
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getInterval() 0 3 1
A setInterval() 0 5 1
A toArray() 0 17 3
1
<?php
2
declare(strict_types=1);
3
4
namespace Level23\Druid\InputSources;
5
6
use InvalidArgumentException;
7
use Level23\Druid\Concerns\HasFilter;
8
use Level23\Druid\Concerns\HasInterval;
9
use Level23\Druid\Filters\FilterInterface;
10
use Level23\Druid\Interval\IntervalInterface;
11
12
class DruidInputSource implements InputSourceInterface
13
{
14
    use HasFilter, HasInterval;
15
16
    protected string $dataSource;
17
18
    protected ?IntervalInterface $interval = null;
19
20
    /**
21
     * @return \Level23\Druid\Interval\IntervalInterface|null
22
     */
23 1
    public function getInterval(): ?IntervalInterface
24
    {
25 1
        return $this->interval;
26
    }
27
28
    /**
29
     * @param \Level23\Druid\Interval\IntervalInterface|null $interval
30
     *
31
     * @return \Level23\Druid\InputSources\DruidInputSource
32
     */
33 2
    public function setInterval(?IntervalInterface $interval): DruidInputSource
34
    {
35 2
        $this->interval = $interval;
36
37 2
        return $this;
38
    }
39
40
    /**
41
     * DruidInputSource constructor.
42
     *
43
     * @param string                                         $dataSource
44
     * @param \Level23\Druid\Interval\IntervalInterface|null $interval
45
     * @param \Level23\Druid\Filters\FilterInterface|null    $filter
46
     */
47 9
    public function __construct(string $dataSource, ?IntervalInterface $interval = null, ?FilterInterface $filter = null)
48
    {
49 9
        $this->dataSource = $dataSource;
50 9
        $this->interval   = $interval;
51 9
        $this->filter     = $filter;
52
    }
53
54
    /**
55
     * @return array<string,string|array<string,string|int|bool|array<mixed>>>
56
     */
57 6
    public function toArray(): array
58
    {
59 6
        if (empty($this->interval)) {
60 1
            throw new InvalidArgumentException('You have to specify the interval which you want to use for your query!');
61
        }
62
63 5
        $response = [
64 5
            'type'       => 'druid',
65 5
            'dataSource' => $this->dataSource,
66 5
            'interval'   => $this->interval->getInterval(),
67 5
        ];
68
69 5
        if (!empty($this->filter)) {
70 1
            $response['filter'] = $this->filter->toArray();
71
        }
72
73 5
        return $response;
74
    }
75
}