RepositoryAbstract   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 128
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

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

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getStorage() 0 4 1
A findOneBy() 0 6 1
A createEntity() 0 10 2
A findAllBy() 0 11 2
A setHydrator() 0 6 1
A getHydrator() 0 8 2
A setEntityPrototype() 0 6 1
A getEntityPrototype() 0 8 2
1
<?php
2
3
namespace Koine\Repository;
4
5
use Koine\Repository\Exception\RecordNotFoundException;
6
use Koine\Repository\Storage\StorageInterface;
7
use Zend\Hydrator\HydratorInterface;
8
9
abstract class RepositoryAbstract implements RepositoryInterface
10
{
11
    /**
12
     * @var HydratorInterface
13
     */
14
    private $hydrator;
15
16
    /**
17
     * @var object
18
     */
19
    private $entityPrototype;
20
21
    /**
22
     * @var StorageInterface
23
     */
24
    private $storage;
25
26
    /**
27
     * @param StorageInterface $storage
28
     */
29
    public function __construct(StorageInterface $storage)
30
    {
31
        $this->storage = $storage;
32
    }
33
34
    /**
35
     * @return MySql
36
     */
37
    protected function getStorage()
38
    {
39
        return $this->storage;
40
    }
41
42
    /**
43
     * @param array $params
44
     *
45
     * @return object
46
     *
47
     * @throws RecordNotFoundException
48
     */
49
    public function findOneBy(array $params)
50
    {
51
        $rawData = $this->getStorage()->findOneBy($params);
52
53
        return $this->createEntity($rawData);
54
    }
55
56
    /**
57
     * @param array $rawData
58
     *
59
     * @return object
60
     */
61
    private function createEntity(array $rawData = array())
62
    {
63
        $entity = clone $this->getEntityPrototype();
64
65
        if ($rawData) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $rawData of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
66
            $this->getHydrator()->hydrate($rawData, $entity);
67
        }
68
69
        return $entity;
70
    }
71
72
    /**
73
     * @param array $params
74
     *
75
     * @return array
76
     */
77
    public function findAllBy(array $params = array())
78
    {
79
        $rawCollection = $this->getStorage()->findAllBy($params);
80
        $collection = array();
81
82
        foreach ($rawCollection as $rawData) {
83
            $collection[] = $this->createEntity($rawData);
84
        }
85
86
        return $collection;
87
    }
88
89
    /**
90
     * @param HydratorInterface $hydrator
91
     *
92
     * @return self
93
     */
94
    public function setHydrator(HydratorInterface $hydrator)
95
    {
96
        $this->hydrator = $hydrator;
97
98
        return $this;
99
    }
100
101
    /**
102
     * @return HydratorInterface
103
     */
104
    public function getHydrator()
105
    {
106
        if ($this->hydrator === null) {
107
            throw new \DomainException('Hydrator was not set');
108
        }
109
110
        return $this->hydrator;
111
    }
112
113
    /**
114
     * @param object $entityPrototype
115
     *
116
     * @return self
117
     */
118
    public function setEntityPrototype($entityPrototype)
119
    {
120
        $this->entityPrototype = $entityPrototype;
121
122
        return $this;
123
    }
124
125
    /**
126
     * @return object
127
     */
128
    public function getEntityPrototype()
129
    {
130
        if ($this->entityPrototype === null) {
131
            throw new \DomainException('Entity Prototype was not set');
132
        }
133
134
        return $this->entityPrototype;
135
    }
136
}
137