Completed
Pull Request — master (#6)
by Veaceslav
11:19
created

OperationResponsesBuilder   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 3
dl 0
loc 57
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A addResponses() 0 10 2
A createOperationResponses() 0 13 2
A setDefault() 0 6 1
A setResponse() 0 6 1
A getDefault() 0 4 1
A getResponses() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Aweapi\Openapi\Builders;
6
7
use Aweapi\Openapi\Objects;
8
9
final class OperationResponsesBuilder implements Objects\OperationResponsesFactory
10
{
11
    use Properties\OptionalExtensions;
12
13
    private $default;
14
15
    private $responses = [];
16
17
    public function addResponses(iterable $responses): self
18
    {
19
        foreach ($responses as $httpStatus => $response) {
20
            // Force cast to string, because of PHP juggling,
21
            // which converts HTTP status numbers into int.
22
            $this->setResponse((string) $httpStatus, $response);
23
        }
24
25
        return $this;
26
    }
27
28
    public function createOperationResponses(): Objects\OperationResponses
29
    {
30
        return new Objects\OperationResponses(
31
            array_map(
32
                static function (Objects\ResponseFactory $factory): Objects\Response {
33
                    return $factory->createResponse();
34
                },
35
                $this->getResponses()
36
            ),
37
            $this->getDefault() ? $this->getDefault()->createResponse() : null,
38
            $this->getExtensions()
39
        );
40
    }
41
42
    public function setDefault(Objects\ResponseFactory $response): self
43
    {
44
        $this->default = $response;
45
46
        return $this;
47
    }
48
49
    public function setResponse(string $httpStatus, Objects\ResponseFactory $response): self
50
    {
51
        $this->responses[$httpStatus] = $response;
52
53
        return $this;
54
    }
55
56
    private function getDefault(): ?Objects\ResponseFactory
57
    {
58
        return $this->default;
59
    }
60
61
    private function getResponses(): array
62
    {
63
        return $this->responses;
64
    }
65
}
66