Completed
Push — master ( 07b302...111bcd )
by Andrey
02:58
created

ModuleOptions::setSerializers()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
/**
3
 * @link    https://github.com/nnx-framework/jms-serializer-module
4
 * @author  Malofeykin Andrey  <[email protected]>
5
 */
6
namespace Nnx\JmsSerializerModule\Options;
7
8
use Zend\Stdlib\AbstractOptions;
9
use Nnx\ModuleOptions\ModuleOptionsInterface;
10
11
12
/**
13
 * Class ModuleOptions
14
 *
15
 * @package Nnx\JmsSerializerModule\Options
16
 */
17
class ModuleOptions extends AbstractOptions implements ModuleOptionsInterface
18
{
19
    /**
20
     * Данные для конфига сериалайзеров
21
     *
22
     * @var array
23
     */
24
    protected $serializers = [];
25
26
    /**
27
     * Конфиги сериалайзеров
28
     *
29
     * @var SerializerOptions[]
30
     */
31
    protected $serializersOptions = [];
32
33
    /**
34
     * Данные для фабрик метеданных сериалайзеров
35
     *
36
     * @var array
37
     */
38
    protected $metadataFactories = [];
39
40
    /**
41
     * Конфиги для фабрик метаданных
42
     *
43
     * @var PluginOptions[]
44
     */
45
    protected $metadataFactoriesOptions = [];
46
47
    /**
48
     * Данные для хранилища хенделеров сериалайзера
49
     *
50
     * @var array
51
     */
52
    protected $handlerRegistries = [];
53
54
    /**
55
     * Хранилища хенделеров сериалайзера
56
     *
57
     * @var PluginOptions[]
58
     */
59
    protected $handlerRegistriesOptions = [];
60
61
    /**
62
     * Данные описывающие драйверы метаданных
63
     *
64
     * @var array
65
     */
66
    protected $metadataDrivers = [];
67
68
    /**
69
     * Конфиги драйверов метаданных
70
     *
71
     * @var PluginOptions[]
72
     */
73
    protected $metadataDriversOptions = [];
74
75
    /**
76
     * Данные описывающие конструкторы объектов
77
     *
78
     * @var array
79
     */
80
    protected $objectConstructors = [];
81
82
    /**
83
     * Конфиги конструкторов объектов
84
     *
85
     * @var PluginOptions[]
86
     */
87
    protected $objectConstructorsOptions = [];
88
89
    /**
90
     * Набор плагинов используемх для сериализации
91
     *
92
     * @var array
93
     */
94
    protected $serializationVisitors = [];
95
96
    /**
97
     * Набор плагинов используемх для десериализации
98
     *
99
     * @var array
100
     */
101
    protected $deserializationVisitors = [];
102
103
    /**
104
     * Набор данных описывающих диспетчеры событий
105
     *
106
     * @var array
107
     */
108
    protected $eventDispatchers = [];
109
110
    /**
111
     * Устанавливает конфиги описывающие диспетчеры событий
112
     *
113
     * @var array
114
     */
115
    protected $eventDispatchersOptions = [];
116
117
118
    /**
119
     * Набор данных описывающих парсеры типов
120
     *
121
     * @var array
122
     */
123
    protected $typeParsers = [];
124
125
    /**
126
     * Устанавливает конфиги описывающие парсеры типов данных
127
     *
128
     * @var array
129
     */
130
    protected $typeParsersOptions = [];
131
132
    /**
133
     * Устанавливает информацию о сериалайзерах
134
     *
135
     * @param array $serializer
136
     *
137
     * @return $this
138
     */
139
    public function setSerializers(array $serializer)
140
    {
141
        $this->serializers = $serializer;
142
        $this->serializersOptions = [];
143
144
        return $this;
145
    }
146
147
    /**
148
     * Определяет есть ли сериалайзер с заданным именем
149
     *
150
     * @param string $serializerName
151
     *
152
     * @return $this
153
     */
154
    public function hasSerializer($serializerName)
155
    {
156
        return array_key_exists($serializerName, $this->serializers);
157
    }
158
159
    /**
160
     * Возвращает конфиг сериалайзера с заданным именем
161
     *
162
     * @param $serializerName
163
     *
164
     * @return SerializerOptions
165
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
166
     */
167
    public function getSerializer($serializerName)
168
    {
169
        if (array_key_exists($serializerName, $this->serializersOptions)) {
170
            return $this->serializersOptions[$serializerName];
171
        }
172
173
        if (!$this->hasSerializer($serializerName)) {
174
            $errMsg = sprintf('Config for serializer %s not found', $serializerName);
175
            throw new Exception\InvalidArgumentException($errMsg);
176
        }
177
178
        $this->serializersOptions[$serializerName] = new SerializerOptions($this->serializers[$serializerName]);
179
180
        return $this->serializersOptions[$serializerName];
181
    }
182
183
    /**
184
     * Устанавливает данные для фабрик метеданных сериалайзеров
185
     *
186
     * @param array $metadataFactories
187
     *
188
     * @return $this
189
     */
190
    public function setMetadataFactories(array $metadataFactories)
191
    {
192
        $this->metadataFactories = $metadataFactories;
193
        $this->metadataFactoriesOptions = [];
194
195
        return $this;
196
    }
197
198
199
    /**
200
     * Определяет есть ли фабрика метаданных с заданныим именем
201
     *
202
     * @param string $metadataFactoryName
203
     *
204
     * @return $this
205
     */
206
    public function hasMetadataFactory($metadataFactoryName)
207
    {
208
        return array_key_exists($metadataFactoryName, $this->metadataFactories);
209
    }
210
211
    /**
212
     * Возвращает конфиг фабрики метаданных с заданным именем
213
     *
214
     * @param $metadataFactoryName
215
     *
216
     * @return PluginOptions
217
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
218
     */
219 View Code Duplication
    public function gasMetadataFactory($metadataFactoryName)
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...
220
    {
221
        if (array_key_exists($metadataFactoryName, $this->metadataFactoriesOptions)) {
222
            return $this->metadataFactoriesOptions[$metadataFactoryName];
223
        }
224
225
        if (!$this->hasMetadataFactory($metadataFactoryName)) {
226
            $errMsg = sprintf('Config for metadata factory %s not found', $metadataFactoryName);
227
            throw new Exception\InvalidArgumentException($errMsg);
228
        }
229
230
        $this->metadataFactoriesOptions[$metadataFactoryName] = new PluginOptions($this->metadataFactories[$metadataFactoryName]);
231
232
        return $this->metadataFactoriesOptions[$metadataFactoryName];
233
    }
234
235
    /**
236
     * Устанавливает данные для хранилища хенделеров сериалайзера
237
     *
238
     * @param array $handlerRegistries
239
     *
240
     * @return $this
241
     */
242
    public function setHandlerRegistries(array $handlerRegistries)
243
    {
244
        $this->handlerRegistries = $handlerRegistries;
245
        $this->handlerRegistriesOptions = [];
246
247
        return $this;
248
    }
249
250
    /**
251
     * Определяет есть ли хранилище хенделеров сериалайзера с заданныим именем
252
     *
253
     * @param string $handlerRegistryName
254
     *
255
     * @return $this
256
     */
257
    public function hasHandlerRegistry($handlerRegistryName)
258
    {
259
        return array_key_exists($handlerRegistryName, $this->handlerRegistries);
260
    }
261
262
    /**
263
     * Возвращает конфиг хранилища хенделеров сериалайзера с заданныим именем
264
     *
265
     * @param $handlerRegistryName
266
     *
267
     * @return PluginOptions
268
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
269
     */
270 View Code Duplication
    public function getHandlerRegistry($handlerRegistryName)
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...
271
    {
272
        if (array_key_exists($handlerRegistryName, $this->handlerRegistriesOptions)) {
273
            return $this->handlerRegistriesOptions[$handlerRegistryName];
274
        }
275
276
        if (!$this->hasHandlerRegistry($handlerRegistryName)) {
277
            $errMsg = sprintf('Handler registry %s not found', $handlerRegistryName);
278
            throw new Exception\InvalidArgumentException($errMsg);
279
        }
280
281
        $this->handlerRegistriesOptions[$handlerRegistryName] = new PluginOptions($this->handlerRegistriesOptions[$handlerRegistryName]);
0 ignored issues
show
Documentation introduced by
$this->handlerRegistries...s[$handlerRegistryName] is of type object<Nnx\JmsSerializer...\Options\PluginOptions>, but the function expects a array|object<Traversable>|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
282
283
        return $this->handlerRegistriesOptions[$handlerRegistryName];
284
    }
285
286
    /**
287
     * Устанавливает данные описывающие драйверы метаданных
288
     *
289
     * @param array $metadataDrivers
290
     *
291
     * @return $this
292
     */
293
    public function setMetadataDrivers(array $metadataDrivers)
294
    {
295
        $this->metadataDrivers = $metadataDrivers;
296
        $this->metadataDriversOptions = [];
297
298
        return $this;
299
    }
300
301
302
    /**
303
     * Проверяет есть ли драйвер метаданных с заданным именем
304
     *
305
     * @param string $metadataDriverName
306
     *
307
     * @return $this
308
     */
309
    public function hasMetadataDriver($metadataDriverName)
310
    {
311
        return array_key_exists($metadataDriverName, $this->metadataDrivers);
312
    }
313
314
    /**
315
     * Возвращает конфиг драйвера метаданных по заданному имени
316
     *
317
     * @param $metadataDriverName
318
     *
319
     * @return PluginOptions
320
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
321
     */
322 View Code Duplication
    public function getMetadataDriver($metadataDriverName)
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...
323
    {
324
        if (array_key_exists($metadataDriverName, $this->metadataDriversOptions)) {
325
            return $this->metadataDriversOptions[$metadataDriverName];
326
        }
327
328
        if (!$this->hasMetadataDriver($metadataDriverName)) {
329
            $errMsg = sprintf('Metadata driver %s not found', $metadataDriverName);
330
            throw new Exception\InvalidArgumentException($errMsg);
331
        }
332
333
        $this->metadataDriversOptions[$metadataDriverName] = new PluginOptions($this->metadataDrivers[$metadataDriverName]);
334
335
        return $this->metadataDriversOptions[$metadataDriverName];
336
    }
337
338
    /**
339
     * Устанавливает данные описывающие конструкторы объектов
340
     *
341
     * @param array $objectConstructors
342
     *
343
     * @return $this
344
     */
345
    public function setObjectConstructors(array $objectConstructors)
346
    {
347
        $this->objectConstructors = $objectConstructors;
348
        $this->objectConstructorsOptions = [];
349
350
        return $this;
351
    }
352
353
354
    /**
355
     * Проверяет есть конструктор объектов с заданным именем
356
     *
357
     * @param string $objectConstructorName
358
     *
359
     * @return $this
360
     */
361
    public function hasObjectConstructor($objectConstructorName)
362
    {
363
        return array_key_exists($objectConstructorName, $this->objectConstructors);
364
    }
365
366
    /**
367
     * Возвращает конструктор объектов по заданному имени
368
     *
369
     * @param $objectConstructorName
370
     *
371
     * @return PluginOptions
372
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
373
     */
374 View Code Duplication
    public function getObjectConstructor($objectConstructorName)
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...
375
    {
376
        if (array_key_exists($objectConstructorName, $this->objectConstructorsOptions)) {
377
            return $this->objectConstructorsOptions[$objectConstructorName];
378
        }
379
380
        if (!$this->hasObjectConstructor($objectConstructorName)) {
381
            $errMsg = sprintf('Object constructor %s not found', $objectConstructorName);
382
            throw new Exception\InvalidArgumentException($errMsg);
383
        }
384
385
        $this->objectConstructorsOptions[$objectConstructorName] = new PluginOptions($this->objectConstructors[$objectConstructorName]);
386
387
        return $this->objectConstructorsOptions[$objectConstructorName];
388
    }
389
390
    /**
391
     * Устанавливает набор плагинов используемх для сериализации
392
     *
393
     * @param array $serializationVisitors
394
     *
395
     * @return $this
396
     */
397
    public function setSerializationVisitors(array $serializationVisitors)
398
    {
399
        $this->serializationVisitors = $serializationVisitors;
400
401
        return $this;
402
    }
403
404
405
    /**
406
     * Проверяет по указанному имени, наличие набора плагинов используемых для сериализации данных
407
     *
408
     * @param string $serializationVisitorName
409
     *
410
     * @return $this
411
     */
412
    public function hasSerializationVisitor($serializationVisitorName)
413
    {
414
        return array_key_exists($serializationVisitorName, $this->serializationVisitors);
415
    }
416
417
418
    /**
419
     * Возвращает по указанному имени, набор плагинов используемых для сериализации данных
420
     *
421
     * @param $serializationVisitorName
422
     *
423
     * @return PluginOptions
424
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
425
     */
426
    public function getSerializationVisitor($serializationVisitorName)
427
    {
428
        if (!$this->hasSerializationVisitor($serializationVisitorName)) {
429
            $errMsg = sprintf('Invalid serialization visitor name %s not found', $serializationVisitorName);
430
            throw new Exception\InvalidArgumentException($errMsg);
431
        }
432
        return $this->serializationVisitors[$serializationVisitorName];
433
    }
434
435
    /**
436
     * Возвращает набор плагинов используемых для десериализации
437
     *
438
     * @param array $deserializationVisitors
439
     *
440
     * @return $this
441
     */
442
    public function setDeserializationVisitors(array $deserializationVisitors)
443
    {
444
        $this->deserializationVisitors = $deserializationVisitors;
445
446
        return $this;
447
    }
448
449
450
    /**
451
     * Проверяет по указанному имени, наличие набора плагинов используемых для десериализации данных
452
     *
453
     * @param string $deserializationVisitorName
454
     *
455
     * @return $this
456
     */
457
    public function hasDeserializationVisitor($deserializationVisitorName)
458
    {
459
        return array_key_exists($deserializationVisitorName, $this->deserializationVisitors);
460
    }
461
462
463
    /**
464
     * Возвращает по указанному имени, набор плагинов используемых для десериализации данных
465
     *
466
     * @param $deserializationVisitorName
467
     *
468
     * @return PluginOptions
469
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
470
     */
471
    public function getDeserializationVisitor($deserializationVisitorName)
472
    {
473
        if (!$this->hasDeserializationVisitor($deserializationVisitorName)) {
474
            $errMsg = sprintf('Invalid deserialization visitor name %s not found', $deserializationVisitorName);
475
            throw new Exception\InvalidArgumentException($errMsg);
476
        }
477
        return $this->deserializationVisitors[$deserializationVisitorName];
478
    }
479
480
    /**
481
     * Устанавливает набор данных описывающих диспетчеры событий
482
     *
483
     * @param array $eventDispatchers
484
     *
485
     * @return $this
486
     */
487
    public function setEventDispatchers(array $eventDispatchers)
488
    {
489
        $this->eventDispatchers = $eventDispatchers;
490
        $this->eventDispatchersOptions = [];
491
492
        return $this;
493
    }
494
495
    /**
496
     * Проверяет есть ли диспетчер событий с заданным именем
497
     *
498
     * @param string $eventDispatcherName
499
     *
500
     * @return $this
501
     */
502
    public function hasEventDispatcher($eventDispatcherName)
503
    {
504
        return array_key_exists($eventDispatcherName, $this->eventDispatchers);
505
    }
506
507
    /**
508
     * Возвращает диспетчер событий по заданному имени
509
     *
510
     * @param $eventDispatcherName
511
     *
512
     * @return PluginOptions
513
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
514
     */
515 View Code Duplication
    public function getEventDispatcher($eventDispatcherName)
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...
516
    {
517
        if (array_key_exists($eventDispatcherName, $this->eventDispatchersOptions)) {
518
            return $this->eventDispatchersOptions[$eventDispatcherName];
519
        }
520
521
        if (!$this->hasEventDispatcher($eventDispatcherName)) {
522
            $errMsg = sprintf('Event dispatcher %s not found', $eventDispatcherName);
523
            throw new Exception\InvalidArgumentException($errMsg);
524
        }
525
526
        $this->eventDispatchersOptions[$eventDispatcherName] = new PluginOptions($this->eventDispatchers[$eventDispatcherName]);
527
528
        return $this->eventDispatchersOptions[$eventDispatcherName];
529
    }
530
531
    /**
532
     * Устанавливает набор данных описывающих парсеры типов
533
     *
534
     * @param array $typeParsers
535
     *
536
     * @return $this
537
     */
538
    public function setTypeParsers(array $typeParsers)
539
    {
540
        $this->typeParsers = $typeParsers;
541
        $this->typeParsersOptions = [];
542
543
        return $this;
544
    }
545
546
547
    /**
548
     * Проверяет есть ли парсер типов  с заданным именем
549
     *
550
     * @param string $typeParserName
551
     *
552
     * @return $this
553
     */
554
    public function hasTypeParser($typeParserName)
555
    {
556
        return array_key_exists($typeParserName, $this->typeParsers);
557
    }
558
559
    /**
560
     * Возвращает парсер типов с заданным именем
561
     *
562
     * @param $typeParserName
563
     *
564
     * @return PluginOptions
565
     * @throws \Nnx\JmsSerializerModule\Options\Exception\InvalidArgumentException
566
     */
567 View Code Duplication
    public function getTypeParser($typeParserName)
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...
568
    {
569
        if (array_key_exists($typeParserName, $this->typeParsersOptions)) {
570
            return $this->typeParsersOptions[$typeParserName];
571
        }
572
573
        if (!$this->hasTypeParser($typeParserName)) {
574
            $errMsg = sprintf('Type parser %s not found', $typeParserName);
575
            throw new Exception\InvalidArgumentException($errMsg);
576
        }
577
578
        $this->typeParsersOptions[$typeParserName] = new PluginOptions($this->typeParsers[$typeParserName]);
579
580
        return $this->typeParsersOptions[$typeParserName];
581
    }
582
}
583