Passed
Push — develop ( ec1e42...80559e )
by Brent
03:22
created

PageParser::parseAdapterConfiguration()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 3
nop 1
dl 0
loc 18
ccs 10
cts 10
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Stitcher\Page;
4
5
use Illuminate\Support\Collection;
6
use Stitcher\Page\Adapter\AdapterFactory;
7
8
class PageParser
9
{
10
    private $pageFactory;
11
    private $adapterFactory;
12
13 18
    public function __construct(PageFactory $pageFactory, AdapterFactory $adapterFactory)
14
    {
15 18
        $this->pageFactory = $pageFactory;
16 18
        $this->adapterFactory = $adapterFactory;
17 18
    }
18
19 17
    public static function make(PageFactory $factory, AdapterFactory $adapterFactory): PageParser
20
    {
21 17
        return new self($factory, $adapterFactory);
22
    }
23
24 17
    public function parse($inputConfiguration): Collection
25
    {
26 17
        $result = [];
27 17
        $adaptedInputConfiguration = $this->parseAdapterConfiguration($inputConfiguration);
28
29 17
        foreach ($adaptedInputConfiguration as $adaptedPageConfiguration) {
30 17
            $page = $this->parsePage($adaptedPageConfiguration);
31
32 17
            $result[$page->id()] = $page;
33
        }
34
35 17
        return collect($result);
36
    }
37
38 17
    private function parseAdapterConfiguration(array $pageConfiguration): array
39
    {
40 17
        $result = [$pageConfiguration];
41 17
        $adapterConfigurations = $pageConfiguration['config'] ?? $pageConfiguration['adapters'] ?? [];
42
43 17
        foreach ($adapterConfigurations as $adapterType => $adapterConfiguration) {
44 9
            $adapter = $this->adapterFactory->create($adapterType, $adapterConfiguration);
45 9
            $transformedPages = [];
46
47 9
            foreach ($result as $pageToTransform) {
48 9
                $transformedPages = array_merge($transformedPages, $adapter->transform($pageToTransform));
49
            }
50
51 9
            $result = $transformedPages;
52
        }
53
54 17
        return $result;
55
    }
56
57 17
    private function parsePage($inputConfiguration): Page
58
    {
59 17
        return $this->pageFactory->create($inputConfiguration);
60
    }
61
}
62