Passed
Push — develop ( 3b0ceb...9dc7fc )
by Brent
02:07
created

CollectionAdapter   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 99
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 97.96%

Importance

Changes 0
Metric Value
dl 0
loc 99
ccs 48
cts 49
cp 0.9796
rs 10
c 0
b 0
f 0
wmc 15
lcom 1
cbo 2

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 2
A make() 0 4 1
A transform() 0 13 2
A getEntries() 0 8 1
A createEntryConfiguration() 0 15 1
A createMetaVariable() 0 14 3
A getTitleMeta() 0 8 1
A getDescriptionMeta() 0 8 1
A isValidConfiguration() 0 4 3
1
<?php
2
3
namespace Stitcher\Page\Adapter;
4
5
use Stitcher\Page\Adapter;
6
use Stitcher\Exception\InvalidConfiguration;
7
use Stitcher\Configureable;
8
use Stitcher\Variable\VariableParser;
9
10
class CollectionAdapter implements Adapter, Configureable
11
{
12
    private $parameter;
13
    private $variable;
14
    private $variableParser;
15
16 9
    public function __construct(array $adapterConfiguration, VariableParser $variableParser)
17
    {
18 9
        if (! $this->isValidConfiguration($adapterConfiguration)) {
19
            throw InvalidConfiguration::invalidAdapterConfiguration('collection', '`variable` and `parameter`');
20
        }
21
22 9
        $this->variable = $adapterConfiguration['variable'];
23 9
        $this->parameter = $adapterConfiguration['parameter'];
24 9
        $this->variableParser = $variableParser;
25 9
    }
26
27 9
    public static function make(array $adapterConfiguration, VariableParser $variableParser)
28
    {
29 9
        return new self($adapterConfiguration, $variableParser);
30
    }
31
32 8
    public function transform(array $pageConfiguration): array
33
    {
34 8
        $entries = $this->getEntries($pageConfiguration);
35 8
        $collectionPageConfiguration = [];
36
37 8
        foreach ($entries as $entryId => $entry) {
38 8
            $entryConfiguration = $this->createEntryConfiguration($pageConfiguration, $entryId, $entry);
39
40 8
            $collectionPageConfiguration[$entryConfiguration['id']] = $entryConfiguration;
41
        }
42
43 8
        return $collectionPageConfiguration;
44
    }
45
46 9
    public function isValidConfiguration($subject): bool
47
    {
48 9
        return is_array($subject) && isset($subject['variable']) && isset($subject['parameter']);
49
    }
50
51 8
    protected function getEntries($pageConfiguration): ?array
52
    {
53 8
        $variable = $pageConfiguration['variables'][$this->variable] ?? null;
54
55 8
        $entries = $this->variableParser->parse($variable) ?? $variable;
56
57 8
        return $entries;
58
    }
59
60 8
    protected function createEntryConfiguration(array $pageConfiguration, $entryId, $entry): array
61
    {
62 8
        $entryConfiguration = $pageConfiguration;
63 8
        $parsedEntryId = str_replace('{' . $this->parameter . '}', $entryId, $pageConfiguration['id']);
64 8
        $entryConfiguration['id'] = $parsedEntryId;
65 8
        $entryConfiguration['variables'][$this->variable] = $entry;
66 8
        $entryConfiguration['variables']['meta'] = array_merge(
67 8
            $entryConfiguration['variables']['meta'] ?? [],
68 8
            $this->createMetaVariable($entryConfiguration)
69
        );
70
71 8
        unset($entryConfiguration['config']['collection']);
72
73 8
        return $entryConfiguration;
74
    }
75
76 8
    protected function createMetaVariable(array $entryConfiguration): array
77
    {
78 8
        $meta = [];
79
80 8
        if ($title = $this->getTitleMeta($entryConfiguration)) {
81 6
            $meta['title'] = $title;
82
        }
83
84 8
        if ($description = $this->getDescriptionMeta($entryConfiguration)) {
85 1
            $meta['description'] = $description;
86
        }
87
88 8
        return $meta;
89
    }
90
91 8
    protected function getTitleMeta(array $entryConfiguration): ?string
92
    {
93 8
        $title = $entryConfiguration['variables'][$this->variable]['meta']['title']
94 8
            ?? $entryConfiguration['variables'][$this->variable]['title']
95 8
            ?? null;
96
97 8
        return $title;
98
    }
99
100 8
    protected function getDescriptionMeta(array $entryConfiguration): ?string
101
    {
102 8
        $description = $entryConfiguration['variables'][$this->variable]['meta']['description']
103 8
            ?? $entryConfiguration['variables'][$this->variable]['description']
104 8
            ?? null;
105
106 8
        return $description;
107
    }
108
}
109