ClassDefinitionMapLoader::load()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 9
c 1
b 0
f 1
dl 0
loc 18
rs 9.9666
cc 4
nc 3
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Jellyfish\Transfer\Definition;
6
7
use Jellyfish\Filesystem\FilesystemInterface;
8
use SplFileInfo;
9
10
class ClassDefinitionMapLoader implements ClassDefinitionMapLoaderInterface
11
{
12
    /**
13
     * @var \Jellyfish\Transfer\Definition\DefinitionFinderInterface
14
     */
15
    protected $definitionFinder;
16
17
    /**
18
     * @var \Jellyfish\Filesystem\FilesystemInterface
19
     */
20
    protected $filesystem;
21
22
    /**
23
     * @var \Jellyfish\Transfer\Definition\ClassDefinitionMapMapperInterface
24
     */
25
    protected $classDefinitionMapMapper;
26
27
    /**
28
     * @var \Jellyfish\Transfer\Definition\ClassDefinitionMapMergerInterface
29
     */
30
    protected $classDefinitionMapMerger;
31
32
    /**
33
     * @param \Jellyfish\Transfer\Definition\DefinitionFinderInterface $definitionFinder
34
     * @param \Jellyfish\Filesystem\FilesystemInterface $filesystem
35
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionMapMapperInterface $classDefinitionMapMapper
36
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionMapMergerInterface $classDefinitionMapMerger
37
     */
38
    public function __construct(
39
        DefinitionFinderInterface $definitionFinder,
40
        FilesystemInterface $filesystem,
41
        ClassDefinitionMapMapperInterface $classDefinitionMapMapper,
42
        ClassDefinitionMapMergerInterface $classDefinitionMapMerger
43
    ) {
44
        $this->definitionFinder = $definitionFinder;
45
        $this->classDefinitionMapMapper = $classDefinitionMapMapper;
46
        $this->classDefinitionMapMerger = $classDefinitionMapMerger;
47
        $this->filesystem = $filesystem;
48
    }
49
50
    /**
51
     * @return \Jellyfish\Transfer\Definition\ClassDefinitionInterface[]
52
     */
53
    public function load(): array
54
    {
55
        $classDefinitionMap = [];
56
57
        foreach ($this->definitionFinder->find() as $definitionFile) {
58
            if (!($definitionFile instanceof SplFileInfo) || !is_string($definitionFile->getRealPath())) {
59
                continue;
60
            }
61
62
            $definitionFileContent = $this->filesystem->readFromFile($definitionFile->getRealPath());
63
64
            $currentClassDefinitionMap = $this->classDefinitionMapMapper->from($definitionFileContent);
65
66
            $classDefinitionMap = $this->classDefinitionMapMerger
67
                ->merge($classDefinitionMap, $currentClassDefinitionMap);
68
        }
69
70
        return $classDefinitionMap;
71
    }
72
}
73