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

PageParser   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 54
ccs 25
cts 25
cp 1
rs 10
c 0
b 0
f 0
wmc 8
lcom 1
cbo 3

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A make() 0 4 1
A parse() 0 13 2
A parseAdapterConfiguration() 0 18 3
A parsePage() 0 4 1
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