ErrorParser::buildErrorSource()   B
last analyzed

Complexity

Conditions 8
Paths 4

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 8

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
eloc 9
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 15
ccs 10
cts 10
cp 1
crap 8
rs 8.4444
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Swis\JsonApi\Client\Parsers;
6
7
use Swis\JsonApi\Client\Error;
8
use Swis\JsonApi\Client\ErrorSource;
9
use Swis\JsonApi\Client\Exceptions\ValidationException;
10
11
/**
12
 * @internal
13
 */
14
class ErrorParser
15
{
16
    private LinksParser $linksParser;
17
18
    private MetaParser $metaParser;
19
20 372
    public function __construct(LinksParser $linksParser, MetaParser $metaParser)
21
    {
22 372
        $this->linksParser = $linksParser;
23 372
        $this->metaParser = $metaParser;
24 186
    }
25
26
    /**
27
     * @param  mixed  $data
28
     */
29 224
    public function parse($data): Error
30
    {
31 224
        if (! is_object($data)) {
32 24
            throw new ValidationException(sprintf('Error MUST be an object, "%s" given.', gettype($data)));
33
        }
34 200
        if (property_exists($data, 'id') && ! is_string($data->id)) {
35 24
            throw new ValidationException(sprintf('Error property "id" MUST be a string, "%s" given.', gettype($data->id)));
36
        }
37 176
        if (property_exists($data, 'status') && ! is_string($data->status)) {
38 24
            throw new ValidationException(sprintf('Error property "status" MUST be a string, "%s" given.', gettype($data->status)));
39
        }
40 152
        if (property_exists($data, 'code') && ! is_string($data->code)) {
41 24
            throw new ValidationException(sprintf('Error property "code" MUST be a string, "%s" given.', gettype($data->code)));
42
        }
43 128
        if (property_exists($data, 'title') && ! is_string($data->title)) {
44 24
            throw new ValidationException(sprintf('Error property "title" MUST be a string, "%s" given.', gettype($data->title)));
45
        }
46 104
        if (property_exists($data, 'detail') && ! is_string($data->detail)) {
47 24
            throw new ValidationException(sprintf('Error property "detail" MUST be a string, "%s" given.', gettype($data->detail)));
48
        }
49
50 80
        return new Error(
51 80
            property_exists($data, 'id') ? $data->id : null,
52 80
            property_exists($data, 'links') ? $this->linksParser->parse($data->links, LinksParser::SOURCE_ERROR) : null,
53 80
            property_exists($data, 'status') ? $data->status : null,
54 80
            property_exists($data, 'code') ? $data->code : null,
55 80
            property_exists($data, 'title') ? $data->title : null,
56 80
            property_exists($data, 'detail') ? $data->detail : null,
57 80
            property_exists($data, 'source') ? $this->buildErrorSource($data->source) : null,
58 44
            property_exists($data, 'meta') ? $this->metaParser->parse($data->meta) : null
59 40
        );
60
    }
61
62
    /**
63
     * @param  mixed  $data
64
     */
65 76
    private function buildErrorSource($data): ErrorSource
66
    {
67 76
        if (! is_object($data)) {
68 24
            throw new ValidationException(sprintf('ErrorSource MUST be an object, "%s" given.', gettype($data)));
69
        }
70 52
        if (property_exists($data, 'pointer') && ! is_string($data->pointer)) {
71 24
            throw new ValidationException(sprintf('ErrorSource property "pointer" MUST be a string, "%s" given.', gettype($data->pointer)));
72
        }
73 28
        if (property_exists($data, 'parameter') && ! is_string($data->parameter)) {
74 24
            throw new ValidationException(sprintf('ErrorSource property "parameter" MUST be a string, "%s" given.', gettype($data->parameter)));
75
        }
76
77 4
        return new ErrorSource(
78 4
            property_exists($data, 'pointer') ? $data->pointer : null,
79 4
            property_exists($data, 'parameter') ? $data->parameter : null
80 2
        );
81
    }
82
}
83