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

LinksParser::buildLink()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 3
nc 2
nop 1
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Swis\JsonApi\Client\Parsers;
4
5
use Art4\JsonApiClient\Meta as JsonApiMeta;
6
use Swis\JsonApi\Client\Link;
7
use Swis\JsonApi\Client\Links;
8
use Swis\JsonApi\Client\Meta;
9
10
/**
11
 * @internal
12
 */
13
class LinksParser
14
{
15
    /**
16
     * @var \Swis\JsonApi\Client\Parsers\MetaParser
17
     */
18
    private $metaParser;
19
20
    /**
21
     * @param \Swis\JsonApi\Client\Parsers\MetaParser $metaParser
22
     */
23 140
    public function __construct(MetaParser $metaParser)
24
    {
25 140
        $this->metaParser = $metaParser;
26 140
    }
27
28
    /**
29
     * @param array $links
30
     *
31
     * @return \Swis\JsonApi\Client\Links
32
     */
33 65
    public function parse(array $links): Links
34
    {
35 65
        return new Links(
36 65
            array_map(
37 26
                function ($link) {
38 65
                    return $this->buildLink($link);
39 65
                },
40 65
                $links
41
            )
42
        );
43
    }
44
45
    /**
46
     * @param \Art4\JsonApiClient\DocumentLink|\Art4\JsonApiClient\ErrorLink|\Art4\JsonApiClient\Link|\Art4\JsonApiClient\RelationshipLink|\Art4\JsonApiClient\ResourceItemLink|string $link
47
     *
48
     * @return \Swis\JsonApi\Client\Link
49
     */
50 65
    private function buildLink($link): Link
51
    {
52 65
        if (is_string($link)) {
53 65
            return new Link($link);
54
        }
55
56 10
        return new Link($link->get('href'), $link->has('meta') ? $this->buildMeta($link->get('meta')) : null);
57
    }
58
59
    /**
60
     * @param \Art4\JsonApiClient\Meta $meta
61
     *
62
     * @return \Swis\JsonApi\Client\Meta
63
     */
64 10
    private function buildMeta(JsonApiMeta $meta): Meta
65
    {
66 10
        return $this->metaParser->parse($meta);
67
    }
68
}
69