Completed
Push — master ( 5d2be1...68f0c9 )
by Dominik
01:57
created

ModelCollection::getForeignField()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chubbyphp\Model\Collection;
6
7
use Chubbyphp\Model\ModelInterface;
8
use Chubbyphp\Model\ModelSortTrait;
9
10
final class ModelCollection implements ModelCollectionInterface
11
{
12
    use ModelSortTrait;
13
14
    /**
15
     * @var string
16
     */
17
    private $modelClass;
18
19
    /**
20
     * @var string
21
     */
22
    private $foreignField;
23
24
    /**
25
     * @var string
26
     */
27
    private $foreignId;
28
29
    /**
30
     * @var array|null
31
     */
32
    private $orderBy;
33
34
    /**
35
     * @var ModelInterface[]|array
36
     */
37
    private $models;
38
39
    /**
40
     * @param string $modelClass
41
     * @param string $foreignField
42
     * @param string $foreignId
43
     * @param array|null $orderBy
44
     */
45 View Code Duplication
    public function __construct(
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...
46
        string $modelClass,
47
        string $foreignField,
48
        string $foreignId,
49
        array $orderBy = null
50
    ) {
51
        $this->modelClass = $modelClass;
52
        $this->foreignField = $foreignField;
53
        $this->foreignId = $foreignId;
54
        $this->orderBy = $orderBy;
55
56
        $this->models = [];
57
    }
58
59
    /**
60
     * @param ModelInterface $model
61
     *
62
     * @return ModelCollectionInterface
63
     */
64
    public function addModel(ModelInterface $model): ModelCollectionInterface
65
    {
66
        $this->models[$model->getId()] = $model;
67
68
        return $this;
69
    }
70
71
    /**
72
     * @param ModelInterface $model
73
     *
74
     * @return ModelCollectionInterface
75
     */
76 View Code Duplication
    public function removeModel(ModelInterface $model): ModelCollectionInterface
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...
77
    {
78
        if (isset($this->models[$model->getId()])) {
79
            unset($this->models[$model->getId()]);
80
        }
81
82
        return $this;
83
    }
84
85
    /**
86
     * @param ModelInterface[]|array $models
87
     *
88
     * @return ModelCollectionInterface
89
     */
90
    public function setModels(array $models): ModelCollectionInterface
91
    {
92
        $this->models = [];
93
        foreach ($models as $model) {
94
            $this->addModel($model);
95
        }
96
97
        return $this;
98
    }
99
100
    /**
101
     * @return ModelInterface[]|array
102
     */
103
    public function getModels(): array
104
    {
105
        return $this->sort($this->modelClass, array_values($this->models), $this->orderBy);
106
    }
107
108
    /**
109
     * @return ModelInterface[]|array
110
     */
111
    public function getInitialModels(): array
112
    {
113
        return [];
114
    }
115
116
117
    /**
118
     * @return \ArrayIterator
119
     */
120
    public function getIterator()
121
    {
122
        return new \ArrayIterator($this->getModels());
123
    }
124
125
    /**
126
     * @return array
127
     */
128
    public function jsonSerialize(): array
129
    {
130
        $serializedModels = [];
131
        foreach ($this->getModels() as $model) {
132
            $serializedModels[] = $model->jsonSerialize();
133
        }
134
135
        return $serializedModels;
136
    }
137
138
    /**
139
     * @return string
140
     */
141
    public function getForeignField(): string
142
    {
143
        return $this->foreignField;
144
    }
145
146
    /**
147
     * @return string
148
     */
149
    public function getForeignId(): string
150
    {
151
        return $this->foreignId;
152
    }
153
}
154