Passed
Push — master ( 02b4c6...8eef8d )
by Yo
46s
created

OperationDocNormalizer   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 81
ccs 28
cts 28
cp 1
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A normalize() 0 51 3
1
<?php
2
namespace Yoanm\JsonRpcHttpServerOpenAPIDoc\App\Normalizer\Component;
3
4
use Yoanm\JsonRpcHttpServerOpenAPIDoc\App\Resolver\DefinitionRefResolver;
5
use Yoanm\JsonRpcServerDoc\Domain\Model\ErrorDoc;
6
use Yoanm\JsonRpcServerDoc\Domain\Model\MethodDoc;
7
use Yoanm\JsonRpcServerDoc\Domain\Model\ServerDoc;
8
9
/**
10
 * Class OperationDocNormalizer
11
 */
12
class OperationDocNormalizer
13
{
14
    /** @var RequestDocNormalizer */
15
    private $requestDocTransformer;
16
    /** @var ResponseDocNormalizer */
17
    private $responseDocNormalizer;
18
    /** @var DefinitionRefResolver */
19
    private $definitionRefResolver;
20
21
    /**
22
     * @param DefinitionRefResolver $definitionRefResolver
23
     * @param RequestDocNormalizer  $requestDocTransformer
24
     * @param ResponseDocNormalizer $responseDocNormalizer
25
     */
26 5
    public function __construct(
27
        DefinitionRefResolver $definitionRefResolver,
28
        RequestDocNormalizer $requestDocTransformer,
29
        ResponseDocNormalizer $responseDocNormalizer
30
    ) {
31 5
        $this->requestDocTransformer = $requestDocTransformer;
32 5
        $this->responseDocNormalizer = $responseDocNormalizer;
33 5
        $this->definitionRefResolver = $definitionRefResolver;
34 5
    }
35
36
    /**
37
     * @param MethodDoc $method
38
     * @param ServerDoc $serverDoc
39
     *
40
     * @return array
41
     */
42 5
    public function normalize(MethodDoc $method, ServerDoc $serverDoc) : array
43
    {
44 5
        $self = $this;
45
46 5
        $extraErrorDefinitionIdRefList = array_map(
47
            function (ErrorDoc $errorDoc) use ($self) {
48
                return [
49 1
                    '$ref' => $self->definitionRefResolver->getDefinitionRef(
50 1
                        $self->definitionRefResolver->getErrorDefinitionId(
51 1
                            $errorDoc,
52 1
                            DefinitionRefResolver::SERVER_ERROR_DEFINITION_TYPE
53
                        )
54
                    )
55
                ];
56 5
            },
57 5
            $serverDoc->getServerErrorList()
58
        );
59
60 5
        $docDescription = $docTags = [];
61
62 5
        if (null !== $method->getDescription()) {
63 2
            $docDescription['description'] = $method->getDescription();
64
        }
65
66 5
        if (count($method->getTagList())) {
67 2
            $docTags['tags'] = $method->getTagList();
68
        }
69
70
        return [
71 5
                'summary' => sprintf('"%s" json-rpc method', $method->getMethodName()),
72
            ]
73 5
            + $docDescription
74 5
            + $docTags
75
            + [
76 5
                'operationId' => $method->getIdentifier(),
77
                'requestBody' => [
78
                    'required' => true,
79
                    'content' => [
80
                        'application/json' => [
81 5
                            'schema' => $this->requestDocTransformer->normalize($method)
82
                        ]
83
                    ]
84
                ],
85
                'responses' => [
86
                    '200' => [
87 5
                        'description' => 'JSON-RPC response',
88
                        'content' => [
89
                            'application/json' => [
90 5
                                'schema' => $this->responseDocNormalizer->normalize(
91 5
                                    $method,
92 5
                                    $extraErrorDefinitionIdRefList
93
                                )
94
                            ],
95
                        ]
96
                    ]
97
                ]
98
            ]
99
        ;
100
    }
101
}
102