StorageImpl::getRepositories()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * Created by IntelliJ IDEA.
4
 * User: gerk
5
 * Date: 30.03.17
6
 * Time: 08:18
7
 */
8
9
namespace PeekAndPoke\Component\Slumber\Data;
10
11
use PeekAndPoke\Component\Slumber\Core\Exception\SlumberException;
12
use PeekAndPoke\Component\Slumber\Core\Exception\SlumberRuntimeException;
13
14
15
/**
16
 * @author Karsten J. Gerber <[email protected]>
17
 */
18
class StorageImpl implements Storage
19
{
20
    /** @var EntityPool */
21
    private $entityPool;
22
    /** @var RepositoryRegistry */
23
    private $registry;
24
25
    /**
26
     * StorageImpl constructor.
27
     *
28
     * @param EntityPool         $entityPool
29
     * @param RepositoryRegistry $registry
30
     */
31
    public function __construct(EntityPool $entityPool, RepositoryRegistry $registry)
32
    {
33
        $this->entityPool = $entityPool;
34
        $this->registry   = $registry;
35
    }
36
37
    /**
38
     * @param mixed $subject
39
     *
40
     * @throws SlumberException When no repo is associated with the subject
41
     */
42 2 View Code Duplication
    public function save($subject)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
43
    {
44 2
        if (! \is_object($subject)) {
45
            return;
46
        }
47
48 2
        $repo = $this->getRepositoryByEntity($subject);
49
50 2
        if ($repo === null) {
51
            throw new SlumberRuntimeException('No repository is associated with objects of type "' . \get_class($subject) . '"');
52
        }
53
54 2
        $repo->save($subject);
55 2
    }
56
57
    /**
58
     * @param mixed $subject
59
     *
60
     * @throws SlumberException When no repo is associated with the subject
61
     */
62 View Code Duplication
    public function remove($subject)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
63
    {
64
        if (! \is_object($subject)) {
65
            return;
66
        }
67
68
        $repo = $this->getRepositoryByEntity($subject);
69
70
        if ($repo === null) {
71
            throw new SlumberRuntimeException('No repository is associated with objects of type "' . \get_class($subject) . '"');
72
        }
73
74
        $repo->remove($subject);
75
    }
76
77
    /**
78
     * @return EntityPool
79
     */
80 20
    public function getEntityPool()
81
    {
82 20
        return $this->entityPool;
83
    }
84
85
    /**
86
     * @return Repository[]
87
     */
88
    public function getRepositories()
89
    {
90
        return $this->registry->getRepositories();
91
    }
92
93
    /**
94
     * @param string $name
95
     *
96
     * @return Repository|null
97
     */
98
    public function getRepositoryByName($name)
99
    {
100
        return $this->registry->getRepositoryByName($name);
101
    }
102
103
    /**
104
     * @param string $cls
105
     *
106
     * @return bool
107
     */
108
    public function hasRepositoryByClassName($cls)
109
    {
110
        return $this->registry->hasRepositoryByClassName($cls);
111
    }
112
113
    /**
114
     * @param string $cls
115
     *
116
     * @return Repository|null
117
     */
118 17
    public function getRepositoryByClassName($cls)
119
    {
120 17
        return $this->registry->getRepositoryByClassName($cls);
121
    }
122
123
    /**
124
     * @param mixed $entity
125
     *
126
     * @return Repository|null
127
     */
128 6
    public function getRepositoryByEntity($entity)
129
    {
130 6
        return $this->registry->getRepositoryByEntity($entity);
131
    }
132
}
133