Passed
Pull Request — master (#8)
by Nikolay
02:45
created

BotApiLegacyNormalizer::normalize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 2.0811

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 17
c 1
b 0
f 0
dl 0
loc 26
ccs 16
cts 22
cp 0.7272
rs 9.7
cc 2
nc 2
nop 1
crap 2.0811
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TgBotApi\BotApiBase;
6
7
use Symfony\Component\Serializer\Exception\ExceptionInterface;
8
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
9
use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer;
10
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
11
use Symfony\Component\Serializer\Serializer;
12
use TgBotApi\BotApiBase\Normalizer\AnswerInlineQueryNormalizer;
13
use TgBotApi\BotApiBase\Normalizer\InputFileNormalizer;
14
use TgBotApi\BotApiBase\Normalizer\InputMediaNormalizer;
15
use TgBotApi\BotApiBase\Normalizer\JsonSerializableNormalizer;
16
use TgBotApi\BotApiBase\Normalizer\LegacyObjectNormalizer;
17
use TgBotApi\BotApiBase\Normalizer\MediaGroupNormalizer;
18
19
/**
20
 * This normalizer need to correctly normalize objects for symfony 3.4
21
 * Class BotApiNormalizer.
22
 */
23
class BotApiLegacyNormalizer extends BotApiNormalizer
24
{
25
    /**
26
     * @param $method
27
     *
28
     * @throws ExceptionInterface
29
     */
30 94
    public function normalize($method): BotApiRequestInterface
31
    {
32 94
        if (\defined(AbstractObjectNormalizer::class . '::SKIP_NULL_VALUES')) {
33
            $message = 'Please use BotApiNormalizer class as normalizer. BotApiLegacyNormalizer is legacy.';
34
            throw new \RuntimeException($message);
35
        }
36
37 94
        $files = [];
38
39 94
        $objectNormalizer = new LegacyObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
40 94
        $serializer = new Serializer([
41 94
            new InputFileNormalizer($files),
42 94
            new MediaGroupNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer),
43 94
            new JsonSerializableNormalizer($objectNormalizer),
44 94
            new AnswerInlineQueryNormalizer($objectNormalizer),
45 94
            new DateTimeNormalizer(),
46 94
            $objectNormalizer,
47
        ]);
48
49 94
        $data = $serializer->normalize(
50 94
            $method,
51 94
            null,
52 94
            [DateTimeNormalizer::FORMAT_KEY => 'U']
53
        );
54
55 94
        return new BotApiRequest($data, $files);
56
    }
57
}
58