Completed
Pull Request — master (#47)
by Jasper
11:54
created

ErrorsParser::buildErrorSource()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
rs 10
c 0
b 0
f 0
ccs 0
cts 0
cp 0
cc 3
nc 1
nop 1
crap 12
1
<?php
2
3
namespace Swis\JsonApi\Client\JsonApi;
4
5
use Art4\JsonApiClient\Error as JsonApiError;
6
use Art4\JsonApiClient\ErrorCollection as JsonApiErrorCollection;
7
use Art4\JsonApiClient\ErrorLink as JsonApiErrorLink;
8
use Art4\JsonApiClient\ErrorSource as JsonApiErrorSource;
9
use Art4\JsonApiClient\Meta as JsonApiMeta;
10
use Swis\JsonApi\Client\Errors\Error;
11
use Swis\JsonApi\Client\Errors\ErrorCollection;
12
use Swis\JsonApi\Client\Errors\ErrorSource;
13
use Swis\JsonApi\Client\Links;
14
use Swis\JsonApi\Client\Meta;
15
16
class ErrorsParser
17
{
18
    /**
19
     * @var \Swis\JsonApi\Client\JsonApi\LinksParser
20
     */
21 5
    private $linksParser;
22
23 5
    /**
24 5
     * @param \Swis\JsonApi\Client\JsonApi\LinksParser $linksParser
25
     */
26
    public function __construct(LinksParser $linksParser)
27 5
    {
28
        $this->linksParser = $linksParser;
29
    }
30
31 5
    /**
32 5
     * @param \Art4\JsonApiClient\ErrorCollection $errorCollection
33
     *
34
     * @return \Swis\JsonApi\Client\Errors\ErrorCollection
35 5
     */
36
    public function parse(JsonApiErrorCollection $errorCollection)
37
    {
38
        $errors = new ErrorCollection();
39
40
        foreach ($errorCollection->asArray(false) as $error) {
41
            $errors->push($this->buildError($error));
42
        }
43 5
44
        return $errors;
45 5
    }
46 5
47 5
    /**
48 5
     * @param \Art4\JsonApiClient\Error $error
49 5
     *
50 5
     * @return \Swis\JsonApi\Client\Errors\Error
51 5
     */
52 5
    private function buildError(JsonApiError $error): Error
53
    {
54
        return new Error(
55
            $error->has('id') ? $error->get('id') : null,
56
            $error->has('links') ? $this->buildLinks($error->get('links')) : null,
57
            $error->has('status') ? $error->get('status') : null,
58
            $error->has('code') ? $error->get('code') : null,
59
            $error->has('title') ? $error->get('title') : null,
60
            $error->has('detail') ? $error->get('detail') : null,
61 5
            $error->has('source') ? $this->buildErrorSource($error->get('source')) : null,
62
            $error->has('meta') ? $this->buildMeta($error->get('meta')) : null
63 5
        );
64 5
    }
65 5
66
    /**
67
     * @param \Art4\JsonApiClient\ErrorLink $errorLink
68
     *
69
     * @return \Swis\JsonApi\Client\Links
70
     */
71
    private function buildLinks(JsonApiErrorLink $errorLink): Links
72
    {
73
        return $this->linksParser->parse($errorLink->asArray(false));
74
    }
75
76
    /**
77
     * @param \Art4\JsonApiClient\ErrorSource $errorSource
78
     *
79
     * @return \Swis\JsonApi\Client\Errors\ErrorSource
80
     */
81
    private function buildErrorSource(JsonApiErrorSource $errorSource): ErrorSource
82
    {
83
        return new ErrorSource(
84
            $errorSource->has('pointer') ? $errorSource->get('pointer') : null,
85
            $errorSource->has('parameter') ? $errorSource->get('parameter') : null
86
        );
87
    }
88
89
    /**
90
     * @param \Art4\JsonApiClient\Meta $meta
91
     *
92
     * @return \Swis\JsonApi\Client\Meta
93
     */
94
    private function buildMeta(JsonApiMeta $meta): Meta
95
    {
96
        return new Meta($meta->asArray(true));
97
    }
98
}
99