Passed
Push — master ( c3d608...c2b5ae )
by Yo
02:06 queued 46s
created

ServerDocNormalizer::normalize()   A

Complexity

Conditions 5
Paths 16

Size

Total Lines 29
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 5

Importance

Changes 0
Metric Value
cc 5
eloc 17
nc 16
nop 1
dl 0
loc 29
ccs 17
cts 17
cp 1
crap 5
rs 9.3888
c 0
b 0
f 0
1
<?php
2
namespace Yoanm\JsonRpcServerDoc\Infra\Normalizer;
3
4
use Yoanm\JsonRpcServerDoc\Domain\Model\ServerDoc;
5
6
/**
7
 * Class ServerDocNormalizer
8
 */
9
class ServerDocNormalizer
10
{
11
    /** @var MethodDocNormalizer */
12
    private $methodDocNormalizer;
13
    /** @var TagDocNormalizer */
14
    private $tagDocNormalizer;
15
    /** @var ErrorDocNormalizer */
16
    private $errorDocNormalizer;
17
18
    /**
19
     * @param MethodDocNormalizer $methodDocNormalizer
20
     * @param TagDocNormalizer    $tagDocNormalizer
21
     * @param ErrorDocNormalizer  $errorDocNormalizer
22
     */
23 6
    public function __construct(
24
        MethodDocNormalizer $methodDocNormalizer,
25
        TagDocNormalizer $tagDocNormalizer,
26
        ErrorDocNormalizer $errorDocNormalizer
27
    ) {
28 6
        $this->methodDocNormalizer = $methodDocNormalizer;
29 6
        $this->tagDocNormalizer = $tagDocNormalizer;
30 6
        $this->errorDocNormalizer = $errorDocNormalizer;
31 6
    }
32
33
    /**
34
     * @param ServerDoc $doc
35
     *
36
     * @return array
37
     */
38 6
    public function normalize(ServerDoc $doc) : array
39
    {
40
        // Info
41 6
        $rawInfo = $tagsDoc = $errorsDoc = [];
42 6
        if (null !== $doc->getName()) {
43 1
            $rawInfo['info']['name'] = $doc->getName();
44
        }
45 6
        if (null !== $doc->getVersion()) {
46 1
            $rawInfo['info']['version'] = $doc->getVersion();
47
        }
48
49
        // Tags
50 6
        $tagDocList = array_map([$this->tagDocNormalizer, 'normalize'], $doc->getTagList());
51 6
        if (count($tagDocList)) {
52 1
            $tagsDoc['tags'] = $tagDocList;
53
        }
54
55
        // Errors
56 6
        $serverErrorList = array_map([$this->errorDocNormalizer, 'normalize'], $doc->getServerErrorList());
57 6
        $globalErrorList = array_map([$this->errorDocNormalizer, 'normalize'], $doc->getGlobalErrorList());
58 6
        $errorList = array_merge($serverErrorList, $globalErrorList);
59 6
        if (count($errorList)) {
60 2
            $errorsDoc['errors'] = $errorList;
61
        }
62
63
        return $rawInfo
64 6
            + $tagsDoc
65 6
            + ['methods' => array_map([$this->methodDocNormalizer, 'normalize'], $doc->getMethodList())]
66 6
            + $errorsDoc;
67
    }
68
}
69