Completed
Pull Request — master (#54)
by Jasper
14:39
created

LinksParser   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 54
ccs 16
cts 16
cp 1
rs 10
c 0
b 0
f 0
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A buildLink() 0 7 3
A buildMeta() 0 3 1
A __construct() 0 3 1
A parse() 0 8 1
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