Passed
Push — master ( 2ea67c...f4db78 )
by Chris
39:33
created

QueriesRepositoryTrait   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 61
ccs 0
cts 13
cp 0
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A commitRepositoryChanges() 0 3 1
A updateRepository() 0 3 1
A maybeCommitRepositoryChanges() 0 4 2
A maybeUpdateRepository() 0 4 2
A getModelFromRepository() 0 4 1
1
<?php
2
3
namespace WebTheory\Saveyour\Abstracts;
4
5
use Psr\Http\Message\ServerRequestInterface;
6
use WebTheory\Saveyour\Enum\ServerRequestLocation;
7
8
trait QueriesRepositoryTrait
9
{
10
    /**
11
     * Instance of model repository
12
     */
13
    protected object $repository;
14
15
    /**
16
     * Method on the repository to query for the model
17
     */
18
    protected string $queryMethod;
19
20
    /**
21
     * Optional method for updating the model in the repository
22
     */
23
    protected ?string $updateMethod = null;
24
25
    /**
26
     * Optional method for committing repository changes to database
27
     */
28
    protected ?string $commitMethod = null;
29
30
    /**
31
     * Parameter name to on the request that contains repository query data
32
     */
33
    protected string $lookup;
34
35
    /**
36
     * Place to look for repository query data in the request
37
     */
38
    protected ServerRequestLocation $location;
39
40
    protected function getModelFromRepository(ServerRequestInterface $request): ?object
41
    {
42
        return $this->repository->{$this->queryMethod}(
43
            $this->location->lookup($this->lookup, $request)
44
        );
45
    }
46
47
    protected function maybeUpdateRepository(object $model): void
48
    {
49
        if ($this->updateMethod) {
50
            $this->updateRepository($model);
51
        }
52
    }
53
54
    protected function maybeCommitRepositoryChanges(): void
55
    {
56
        if ($this->commitMethod) {
57
            $this->commitRepositoryChanges();
58
        }
59
    }
60
61
    protected function updateRepository(object $model): void
62
    {
63
        $this->repository->{$this->updateMethod}($model);
64
    }
65
66
    protected function commitRepositoryChanges(): void
67
    {
68
        $this->repository->{$this->commitMethod}();
69
    }
70
}
71