Completed
Push — master ( 6972d7...5fe147 )
by Jasper
05:44
created

ErrorsParser::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
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
    private $linksParser;
22
23
    /**
24
     * @param \Swis\JsonApi\Client\JsonApi\LinksParser $linksParser
25
     */
26 5
    public function __construct(LinksParser $linksParser)
27
    {
28 5
        $this->linksParser = $linksParser;
29 5
    }
30
31
    /**
32
     * @param \Art4\JsonApiClient\ErrorCollection $errorCollection
33
     *
34
     * @return \Swis\JsonApi\Client\Errors\ErrorCollection
35
     */
36 5
    public function parse(JsonApiErrorCollection $errorCollection)
37
    {
38 5
        $errors = new ErrorCollection();
39
40 5
        foreach ($errorCollection->asArray(false) as $error) {
41 5
            $errors->push($this->buildError($error));
42
        }
43
44 5
        return $errors;
45
    }
46
47
    /**
48
     * @param \Art4\JsonApiClient\Error $error
49
     *
50
     * @return \Swis\JsonApi\Client\Errors\Error
51
     */
52 5
    private function buildError(JsonApiError $error): Error
53
    {
54 5
        return new Error(
55 5
            $error->has('id') ? $error->get('id') : null,
56 5
            $error->has('links') ? $this->buildLinks($error->get('links')) : null,
57 5
            $error->has('status') ? $error->get('status') : null,
58 5
            $error->has('code') ? $error->get('code') : null,
59 5
            $error->has('title') ? $error->get('title') : null,
60 5
            $error->has('detail') ? $error->get('detail') : null,
61 5
            $error->has('source') ? $this->buildErrorSource($error->get('source')) : null,
62 5
            $error->has('meta') ? $this->buildMeta($error->get('meta')) : null
63
        );
64
    }
65
66
    /**
67
     * @param \Art4\JsonApiClient\ErrorLink $errorLink
68
     *
69
     * @return \Swis\JsonApi\Client\Links
70
     */
71 5
    private function buildLinks(JsonApiErrorLink $errorLink): Links
72
    {
73 5
        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 5
    private function buildErrorSource(JsonApiErrorSource $errorSource): ErrorSource
82
    {
83 5
        return new ErrorSource(
84 5
            $errorSource->has('pointer') ? $errorSource->get('pointer') : null,
85 5
            $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 5
    private function buildMeta(JsonApiMeta $meta): Meta
95
    {
96 5
        return new Meta($meta->asArray(true));
97
    }
98
}
99