Passed
Push — feature/initial-implementation ( fae671...591f29 )
by Fike
02:37
created

Operations::merge()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
c 0
b 0
f 0
rs 8.8571
cc 5
eloc 13
nc 9
nop 1
1
<?php
2
3
namespace AmaTeam\ElasticSearch\Indexing;
4
5
use AmaTeam\ElasticSearch\API\Indexing;
6
use AmaTeam\ElasticSearch\API\Indexing\Analysis;
7
use AmaTeam\ElasticSearch\API\IndexingInterface;
8
use AmaTeam\ElasticSearch\Indexing\Analysis\Operations as AnalysisOperations;
9
10
class Operations
11
{
12
    public static function toMutable(IndexingInterface $indexing): Indexing
13
    {
14
        if ($indexing instanceof Indexing) {
15
            return $indexing;
16
        }
17
        return static::from($indexing);
18
    }
19
20
    public static function from(IndexingInterface $source): Indexing
21
    {
22
        return static::merge($source);
23
    }
24
25
    public static function merge(IndexingInterface ...$indexings): Indexing
26
    {
27
        $analysis = new Analysis();
28
        $target = (new Indexing())->setAnalysis($analysis);
29
        foreach ($indexings as $source) {
30
            $target->setType($source->getType());
31
            if (!empty($source->getReadIndices())) {
32
                $target->setReadIndices($source->getReadIndices());
33
            }
34
            if (!empty($source->getWriteIndices())) {
35
                $target->setWriteIndices($source->getWriteIndices());
36
            }
37
            foreach ($source->getOptions() as $option => $value) {
38
                $target->setOption($option, $value);
39
            }
40
            $analysis = AnalysisOperations::merge($target->getAnalysis(), $source->getAnalysis());
41
            $target->setAnalysis($analysis);
42
        }
43
        return $target;
44
    }
45
}
46