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

Operations   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
dl 0
loc 34
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A toMutable() 0 6 2
B merge() 0 19 5
A from() 0 3 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