Completed
Push — master ( 00c081...e7017e )
by Jasper
24s queued 23s
created

ErrorsParser   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 88
ccs 27
cts 27
cp 1
rs 10
c 0
b 0
f 0
wmc 17

6 Methods

Rating   Name   Duplication   Size   Complexity  
A parse() 0 9 2
A buildMeta() 0 3 1
B buildError() 0 11 9
A buildLinks() 0 3 1
A __construct() 0 4 1
A buildErrorSource() 0 5 3
1
<?php
2
3
namespace Swis\JsonApi\Client\Parsers;
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\Error;
11
use Swis\JsonApi\Client\ErrorCollection;
12
use Swis\JsonApi\Client\ErrorSource;
13
use Swis\JsonApi\Client\Links;
14
use Swis\JsonApi\Client\Meta;
15
16
/**
17
 * @internal
18
 */
19
class ErrorsParser
20
{
21
    /**
22
     * @var \Swis\JsonApi\Client\Parsers\LinksParser
23
     */
24
    private $linksParser;
25
26
    /**
27
     * @var \Swis\JsonApi\Client\Parsers\MetaParser
28
     */
29
    private $metaParser;
30
31
    /**
32
     * @param \Swis\JsonApi\Client\Parsers\LinksParser $linksParser
33
     * @param \Swis\JsonApi\Client\Parsers\MetaParser  $metaParser
34
     */
35 85
    public function __construct(LinksParser $linksParser, MetaParser $metaParser)
36
    {
37 85
        $this->linksParser = $linksParser;
38 85
        $this->metaParser = $metaParser;
39 85
    }
40
41
    /**
42
     * @param \Art4\JsonApiClient\ErrorCollection $errorCollection
43
     *
44
     * @return \Swis\JsonApi\Client\ErrorCollection
45
     */
46 10
    public function parse(JsonApiErrorCollection $errorCollection): ErrorCollection
47
    {
48 10
        $errors = new ErrorCollection();
49
50 10
        foreach ($errorCollection->asArray() as $error) {
51 10
            $errors->push($this->buildError($error));
52
        }
53
54 10
        return $errors;
55
    }
56
57
    /**
58
     * @param \Art4\JsonApiClient\Error $error
59
     *
60
     * @return \Swis\JsonApi\Client\Error
61
     */
62 10
    private function buildError(JsonApiError $error): Error
63
    {
64 10
        return new Error(
65 10
            $error->has('id') ? $error->get('id') : null,
66 10
            $error->has('links') ? $this->buildLinks($error->get('links')) : null,
67 10
            $error->has('status') ? $error->get('status') : null,
68 10
            $error->has('code') ? $error->get('code') : null,
69 10
            $error->has('title') ? $error->get('title') : null,
70 10
            $error->has('detail') ? $error->get('detail') : null,
71 10
            $error->has('source') ? $this->buildErrorSource($error->get('source')) : null,
72 10
            $error->has('meta') ? $this->buildMeta($error->get('meta')) : null
73
        );
74
    }
75
76
    /**
77
     * @param \Art4\JsonApiClient\ErrorLink $errorLink
78
     *
79
     * @return \Swis\JsonApi\Client\Links
80
     */
81 5
    private function buildLinks(JsonApiErrorLink $errorLink): Links
82
    {
83 5
        return $this->linksParser->parse($errorLink->asArray());
84
    }
85
86
    /**
87
     * @param \Art4\JsonApiClient\ErrorSource $errorSource
88
     *
89
     * @return \Swis\JsonApi\Client\ErrorSource
90
     */
91 5
    private function buildErrorSource(JsonApiErrorSource $errorSource): ErrorSource
92
    {
93 5
        return new ErrorSource(
94 5
            $errorSource->has('pointer') ? $errorSource->get('pointer') : null,
95 5
            $errorSource->has('parameter') ? $errorSource->get('parameter') : null
96
        );
97
    }
98
99
    /**
100
     * @param \Art4\JsonApiClient\Meta $meta
101
     *
102
     * @return \Swis\JsonApi\Client\Meta
103
     */
104 5
    private function buildMeta(JsonApiMeta $meta): Meta
105
    {
106 5
        return $this->metaParser->parse($meta);
107
    }
108
}
109