Passed
Push — master ( f51d93...08b37c )
by Mike
02:59
created

ResultSetConverter   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 94.74%

Importance

Changes 0
Metric Value
eloc 17
dl 0
loc 52
ccs 18
cts 19
cp 0.9474
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A convertResult() 0 15 1
A loopFormatterPlugins() 0 8 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Xervice\Elasticsearch\Business\Model\Search\Result;
5
6
7
use DataProvider\ElasticSearchRawResultDataProvider;
8
use DataProvider\ElasticsearchResultSetDataProvider;
9
use Elastica\ResultSet;
10
use Xervice\Elasticsearch\Dependency\Plugin\ResultFormatterPluginInterface;
11
12
class ResultSetConverter implements ResultSetConverterInterface
13
{
14
    /**
15
     * @var \Xervice\Elasticsearch\Dependency\Plugin\ResultFormatterPluginInterface[]
16
     */
17
    private $formatterPlugins;
18
19
    /**
20
     * ResultSetConverter constructor.
21
     *
22
     * @param array $formatterPlugins
23
     */
24 1
    public function __construct(array $formatterPlugins)
25
    {
26 1
        $this->formatterPlugins = $formatterPlugins;
27 1
    }
28
29
    /**
30
     * @param \Elastica\ResultSet $resultSet
31
     *
32
     * @return \DataProvider\ElasticsearchResultSetDataProvider
33
     */
34 1
    public function convertResult(ResultSet $resultSet): ElasticsearchResultSetDataProvider
35
    {
36 1
        $result = (new ElasticsearchResultSetDataProvider())
37 1
            ->setTotalHits($resultSet->getTotalHits())
38 1
            ->setTotalTime($resultSet->getTotalTime())
39 1
            ->setMaxScore($resultSet->getMaxScore())
40 1
            ->setRawResults(
41 1
                (new ElasticSearchRawResultDataProvider())
42 1
                    ->setDocuments($resultSet->getDocuments())
43 1
                    ->setAggregations($resultSet->getAggregations())
44 1
                    ->setSuggests($resultSet->getSuggests())
45 1
                    ->setResults($resultSet->getResults())
46
            );
47
48 1
        return $this->loopFormatterPlugins($result);
49
    }
50
51
    /**
52
     * @param \DataProvider\ElasticsearchResultSetDataProvider $resultSetDataProvider
53
     *
54
     * @return \DataProvider\ElasticsearchResultSetDataProvider
55
     */
56 1
    protected function loopFormatterPlugins(
57
        ElasticsearchResultSetDataProvider $resultSetDataProvider
58
    ): ElasticsearchResultSetDataProvider {
59 1
        foreach ($this->formatterPlugins as $formatterPlugin) {
60
            $resultSetDataProvider = $formatterPlugin->formatResult($resultSetDataProvider);
61
        }
62
63 1
        return $resultSetDataProvider;
64
    }
65
}