Collection   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 3
dl 0
loc 72
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A has() 0 4 1
A read() 0 8 2
A insert() 0 4 1
A update() 0 11 2
A delete() 0 12 3
A commit() 0 4 1
A inTransaction() 0 4 1
A reset() 0 4 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace hanneskod\yaysondb;
6
7
use hanneskod\yaysondb\Engine\EngineInterface;
8
use hanneskod\yaysondb\Expression\ExpressionInterface;
9
10
/**
11
 * Access class for a collection of documents
12
 */
13
class Collection extends Filterable implements CollectionInterface
14
{
15
    /**
16
     * @var EngineInterface
17
     */
18
    private $engine;
19
20
    public function __construct(EngineInterface $engine)
21
    {
22
        parent::__construct($engine);
23
        $this->engine = $engine;
24
    }
25
26
    public function has(string $id): bool
27
    {
28
        return $this->engine->has($id);
29
    }
30
31
    public function read(string $id): array
32
    {
33
        if (!$this->has($id)) {
34
            throw new Exception\LogicException("Document $id does not exist, did you call has()?");
35
        }
36
37
        return $this->engine->read($id);
38
    }
39
40
    public function insert(array $document): string
41
    {
42
        return $this->engine->write('', $document);
43
    }
44
45
    public function update(ExpressionInterface $expression, array $newDocument): int
46
    {
47
        $count = 0;
48
49
        foreach ($this->find($expression) as $id => $oldDocument) {
50
            $this->engine->write((string)$id, array_replace_recursive($oldDocument, $newDocument));
51
            $count++;
52
        }
53
54
        return $count;
55
    }
56
57
    public function delete(ExpressionInterface $expression): int
58
    {
59
        $count = 0;
60
61
        foreach ($this->find($expression) as $id => $document) {
62
            if ($this->engine->delete((string)$id)) {
63
                $count++;
64
            }
65
        }
66
67
        return $count;
68
    }
69
70
    public function commit()
71
    {
72
        return $this->engine->commit();
73
    }
74
75
    public function inTransaction(): bool
76
    {
77
        return $this->engine->inTransaction();
78
    }
79
80
    public function reset()
81
    {
82
        return $this->engine->reset();
83
    }
84
}
85