Completed
Push — master ( 993468...5fd9a9 )
by Markus
12s queued 10s
created

ClassDefinitionMapMerger::merge()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 12
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 2
1
<?php
2
3
namespace Jellyfish\Transfer\Definition;
4
5
class ClassDefinitionMapMerger implements ClassDefinitionMapMergerInterface
6
{
7
    /**
8
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface[] $classDefinitionMapA
9
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface[] $classDefinitionMapB
10
     *
11
     * @return \Jellyfish\Transfer\Definition\ClassDefinitionInterface[]
12
     */
13
    public function merge(array $classDefinitionMapA, array $classDefinitionMapB): array
14
    {
15
        foreach ($classDefinitionMapB as $classDefinitionName => $classDefinition) {
16
            if (!\array_key_exists($classDefinitionName, $classDefinitionMapA)) {
17
                $classDefinitionMapA[$classDefinitionName] = $classDefinition;
18
                continue;
19
            }
20
21
            $this->mergeProperties($classDefinitionMapA[$classDefinitionName], $classDefinition);
22
        }
23
24
        return $classDefinitionMapA;
25
    }
26
27
    /**
28
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface $classDefinitionA
29
     * @param \Jellyfish\Transfer\Definition\ClassDefinitionInterface $classDefinitionB
30
     *
31
     * @return \Jellyfish\Transfer\Definition\ClassDefinitionMapMergerInterface
32
     */
33
    protected function mergeProperties(
34
        ClassDefinitionInterface $classDefinitionA,
35
        ClassDefinitionInterface $classDefinitionB
36
    ): ClassDefinitionMapMergerInterface {
37
        $classPropertyDefinitionMapA = $classDefinitionA->getProperties();
38
39
        foreach ($classDefinitionB->getProperties() as $classPropertyDefinitionName => $classPropertyDefinition) {
40
            if (\array_key_exists($classPropertyDefinitionName, $classPropertyDefinitionMapA)) {
41
                continue;
42
            }
43
44
            $classPropertyDefinitionMapA[$classPropertyDefinitionName] = $classPropertyDefinition;
45
        }
46
47
        $classDefinitionA->setProperties($classPropertyDefinitionMapA);
48
49
        return $this;
50
    }
51
}
52