Passed
Push — master ( 24d2dd...159fd0 )
by Paul
04:04
created

src/Serializer/Context/Context.php (1 issue)

1
<?php
2
3
/*
4
 * This file is part of the FOSRestBundle package.
5
 *
6
 * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace CCT\Component\Rest\Serializer\Context;
13
14
use CCT\Component\Rest\Serializer\ContextInterface;
15
use JMS\Serializer\Exclusion\ExclusionStrategyInterface;
16
17
/**
18
 * Stores the serialization or deserialization context (groups, version, ...).
19
 *
20
 * @author Ener-Getick <[email protected]>
21
 */
22
final class Context implements ContextInterface
23
{
24
    /**
25
     * @var array
26
     */
27
    private $attributes = array();
28
29
    /**
30
     * @var int|null
31
     */
32
    private $version;
33
34
    /**
35
     * @var array|null
36
     */
37
    private $groups;
38
39
    /**
40
     * @var int|null
41
     */
42
    private $maxDepth;
43
44
    /**
45
     * @var bool
46
     */
47
    private $isMaxDepthEnabled;
48
49
    /**
50
     * @var bool|null
51
     */
52
    private $serializeNull;
53
54
    /**
55
     * @var ExclusionStrategyInterface[]
56
     */
57
    private $exclusionStrategies = array();
58
59
    /**
60
     * Sets an attribute.
61
     *
62
     * @param string $key
63
     * @param mixed $value
64
     *
65
     * @return ContextInterface
66
     */
67 2
    public function setAttribute($key, $value): ContextInterface
68
    {
69 2
        $this->attributes[$key] = $value;
70
71 2
        return $this;
72
    }
73
74
    /**
75
     * Checks if contains a normalization attribute.
76
     *
77
     * @param string $key
78
     *
79
     * @return bool
80
     */
81
    public function hasAttribute($key): bool
82
    {
83
        return isset($this->attributes[$key]);
84
    }
85
86
    /**
87
     * Gets an attribute.
88
     *
89
     * @param string $key
90
     *
91
     * @return mixed
92
     */
93
    public function getAttribute($key)
94
    {
95
        if (isset($this->attributes[$key])) {
96
            return $this->attributes[$key];
97
        }
98
        return null;
99
    }
100
101
    /**
102
     * Gets the attributes.
103
     *
104
     * @return array
105
     */
106 11
    public function getAttributes(): array
107
    {
108 11
        return $this->attributes;
109
    }
110
111
    /**
112
     * Sets the normalization version.
113
     *
114
     * @param string|null $version
115
     *
116
     * @return ContextInterface
117
     */
118 2
    public function setVersion($version): ContextInterface
119
    {
120 2
        $this->version = $version;
0 ignored issues
show
Documentation Bug introduced by
It seems like $version can also be of type string. However, the property $version is declared as type null|integer. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
121
122 2
        return $this;
123
    }
124
125
    /**
126
     * Gets the normalization version.
127
     *
128
     * @return string|null
129
     */
130 11
    public function getVersion(): ?string
131
    {
132 11
        return $this->version;
133
    }
134
135
    /**
136
     * Adds a normalization group.
137
     *
138
     * @param string $group
139
     *
140
     * @return ContextInterface
141
     */
142
    public function addGroup($group): ContextInterface
143
    {
144
        if (null === $this->groups) {
145
            $this->groups = [];
146
        }
147
        if (!\in_array($group, $this->groups, true)) {
148
            $this->groups[] = $group;
149
        }
150
151
        return $this;
152
    }
153
154
    /**
155
     * Adds normalization groups.
156
     *
157
     * @param string[] $groups
158
     *
159
     * @return ContextInterface
160
     */
161
    public function addGroups(array $groups): ContextInterface
162
    {
163
        foreach ($groups as $group) {
164
            $this->addGroup($group);
165
        }
166
167
        return $this;
168
    }
169
170
    /**
171
     * Gets the normalization groups.
172
     *
173
     * @return string[]|null
174
     */
175 11
    public function getGroups(): ?array
176
    {
177 11
        return $this->groups;
178
    }
179
180
    /**
181
     * Set the normalization groups.
182
     *
183
     * @param string[]|null $groups
184
     *
185
     * @return ContextInterface
186
     */
187 6
    public function setGroups(array $groups = null): ContextInterface
188
    {
189 6
        $this->groups = $groups;
190
191 6
        return $this;
192
    }
193
194
    /**
195
     * Sets the normalization max depth.
196
     *
197
     * @param int|null $maxDepth
198
     *
199
     * @return ContextInterface
200
     */
201
    public function setMaxDepth($maxDepth): ContextInterface
202
    {
203
        $this->maxDepth = $maxDepth;
204
205
        return $this;
206
    }
207
208
    /**
209
     * Gets the normalization max depth.
210
     *
211
     * @return int|null
212
     *
213
     */
214 7
    public function getMaxDepth(): ?int
215
    {
216 7
        return $this->maxDepth;
217
    }
218
219 2
    public function enableMaxDepth()
220
    {
221 2
        $this->isMaxDepthEnabled = true;
222
223 2
        return $this;
224
    }
225
226
    public function disableMaxDepth()
227
    {
228
        $this->isMaxDepthEnabled = false;
229
230
        return $this;
231
    }
232
233
    /**
234
     * @return bool|null
235
     */
236 11
    public function isMaxDepthEnabled(): ?bool
237
    {
238 11
        return $this->isMaxDepthEnabled;
239
    }
240
241
    /**
242
     * Sets serialize null.
243
     *
244
     * @param bool|null $serializeNull
245
     *
246
     * @return ContextInterface
247
     */
248 2
    public function setSerializeNull($serializeNull): ContextInterface
249
    {
250 2
        $this->serializeNull = $serializeNull;
251
252 2
        return $this;
253
    }
254
255
    /**
256
     * Gets serialize null.
257
     *
258
     * @return bool|null
259
     */
260 9
    public function getSerializeNull(): ?bool
261
    {
262 9
        return $this->serializeNull;
263
    }
264
265
    /**
266
     * Gets the array of exclusion strategies.
267
     *
268
     * Notice: This method only applies to the JMS serializer adapter.
269
     *
270
     * @return ExclusionStrategyInterface[]
271
     */
272 7
    public function getExclusionStrategies(): array
273
    {
274 7
        return $this->exclusionStrategies;
275
    }
276
277
    /**
278
     * Adds an exclusion strategy.
279
     *
280
     * Notice: This method only applies to the JMS serializer adapter.
281
     *
282
     * @param ExclusionStrategyInterface $exclusionStrategy
283
     */
284 1
    public function addExclusionStrategy(ExclusionStrategyInterface $exclusionStrategy): void
285
    {
286 1
        $this->exclusionStrategies[] = $exclusionStrategy;
287 1
    }
288
289 4
    public static function create()
290
    {
291 4
        return new static();
292
    }
293
}
294