Passed
Pull Request — master (#82)
by Joao
01:44
created

OpenApiResponseBody   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 9
eloc 15
c 2
b 0
f 0
dl 0
loc 29
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B match() 0 24 9
1
<?php
2
3
namespace ByJG\ApiTools\OpenApi;
4
5
use ByJG\ApiTools\Base\Body;
6
use ByJG\ApiTools\Exception\NotMatchedException;
7
8
class OpenApiResponseBody extends Body
9
{
10
    /**
11
     * @inheritDoc
12
     */
13
    public function match(mixed $body): bool
14
    {
15
        if (empty($this->structure['content']) && !isset($this->structure['$ref'])) {
16
            if (!empty($body)) {
17
                throw new NotMatchedException("Expected empty body for " . $this->name);
18
            }
19
            return true;
20
        }
21
        
22
        if(!isset($this->structure['content']) && isset($this->structure['$ref'])){
23
            $definition = $this->schema->getDefinition($this->structure['$ref']);
24
            return $this->matchSchema($this->name, $definition, $body) ?? false;
25
        }
26
27
        foreach ($this->structure['content'] as $contentType => $schema) {
28
            if ($contentType === 'application/json') {
29
                if (!isset($schema['schema'])) {
30
                    throw new NotMatchedException("Content type " . $contentType . " does not have schema");
31
                }
32
                return $this->matchSchema($this->name, $schema['schema'], $body) ?? false;
33
            }
34
        }
35
36
        return true;
37
    }
38
}
39