Completed
Push — master ( 390a97...c4c478 )
by Daniel
9s
created

Capabilities::create()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 24
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 2
eloc 15
nc 2
nop 1
1
<?php
2
3
namespace Psi\Component\ObjectAgent;
4
5
final class Capabilities
6
{
7
    private $supportedComparators;
8
    private $setParent;
9
    private $queryCount;
10
11
    private function __construct()
12
    {
13
        // this class cannot be instantiated with "new".
14
    }
15
16
    public static function create(array $capabilities): Capabilities
17
    {
18
        $defaults = [
19
            'supported_comparators' => [],
20
            'can_set_parent' => false,
21
            'can_query_count' => false,
22
        ];
23
24
        if ($diff = array_diff(array_keys($capabilities), array_keys($defaults))) {
25
            throw new \InvalidArgumentException(sprintf(
26
                'Unknown capabilities: "%s". Valid capabilities: "%s"',
27
                implode('", "', $diff), implode('", "', array_keys($defaults))
28
            ));
29
        }
30
31
        $capabilities = array_merge($defaults, $capabilities);
32
33
        $instance = new self();
34
        $instance->supportedComparators = (array) $capabilities['supported_comparators'];
35
        $instance->setParent = (bool) $capabilities['can_set_parent'];
36
        $instance->queryCount = (bool) $capabilities['can_query_count'];
37
38
        return $instance;
39
    }
40
41
    public function getSupportedComparators(): array
42
    {
43
        return $this->supportedComparators;
44
    }
45
46
    public function canSetParent(): bool
47
    {
48
        return $this->setParent;
49
    }
50
51
    public function canQueryCount(): bool
52
    {
53
        return $this->queryCount;
54
    }
55
}
56