SuggestQueryHydrator   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
dl 0
loc 38
c 0
b 0
f 0
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A hydrate() 0 19 3
A __construct() 0 3 1
1
<?php
2
3
namespace Mdiyakov\DoctrineSolrBundle\Query\Hydrator;
4
5
use Mdiyakov\DoctrineSolrBundle\Exception\HydratorException;
6
use Mdiyakov\DoctrineSolrBundle\Query\Suggest\Result\FieldResult;
7
use Mdiyakov\DoctrineSolrBundle\Query\Suggest\Solarium\Result\Result;
8
use Mdiyakov\DoctrineSolrBundle\Query\Suggest\Solarium\Result\Term;
9
use Mdiyakov\DoctrineSolrBundle\Schema\Schema;
10
use Mdiyakov\DoctrineSolrBundle\Query\Suggest\Result\Result as SuggestQueryResult;
11
12
13
class SuggestQueryHydrator
14
{
15
    /**
16
     * @var Schema
17
     */
18
    private $schema;
19
20
    /**
21
     * @param Schema $schema
22
     */
23
    public function __construct(Schema $schema)
24
    {
25
        $this->schema = $schema;
26
    }
27
28
    /**
29
     * @param Result $solrResult
30
     * @return SuggestQueryResult
31
     */
32
    public function hydrate(Result $solrResult)
33
    {
34
        if (!$solrResult->count()) {
35
            throw new HydratorException('Result dataset is empty');
36
        }
37
38
        $result = new SuggestQueryResult();
39
40
        foreach ($solrResult->getResults() as $suggester => $termData) {
41
            $field = $this->schema->getFieldBySuggester($suggester);
42
43
            /** @var Term $term */
44
            $term = current($termData);
45
            $result->addFieldResult(
46
                new FieldResult($field->getEntityFieldName(), key($termData), $term->getSuggestions())
47
            );
48
        }
49
50
        return $result;
51
    }
52
}