Passed
Pull Request — master (#129)
by Serhii
13:55
created

SearchFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 1 Features 0
Metric Value
eloc 19
dl 0
loc 34
ccs 18
cts 18
cp 1
rs 10
c 3
b 1
f 0
wmc 7

1 Method

Rating   Name   Duplication   Size   Complexity  
B create() 0 27 7
1
<?php
2
3
namespace Matchish\ScoutElasticSearch\ElasticSearch;
4
5
use Laravel\Scout\Builder;
6
use ONGR\ElasticsearchDSL\Query\Compound\BoolQuery;
7
use ONGR\ElasticsearchDSL\Query\FullText\QueryStringQuery;
8
use ONGR\ElasticsearchDSL\Query\TermLevel\TermQuery;
9
use ONGR\ElasticsearchDSL\Search;
10
use ONGR\ElasticsearchDSL\Sort\FieldSort;
11
12
final class SearchFactory
13
{
14
    /**
15
     * @param Builder $builder
16
     * @param array $options
17
     * @return Search
18
     */
19 7
    public static function create(Builder $builder, array $options = []): Search
20
    {
21 7
        $search = new Search();
22 7
        $query = new QueryStringQuery($builder->query);
23 7
        if (! empty($builder->wheres)) {
24 1
            $boolQuery = new BoolQuery();
25 1
            foreach ($builder->wheres as $field => $value) {
26 1
                $boolQuery->add(new TermQuery((string) $field, $value), BoolQuery::FILTER);
27
            }
28 1
            $boolQuery->add($query, BoolQuery::MUST);
29 1
            $search->addQuery($boolQuery);
30
        } else {
31 6
            $search->addQuery($query);
32
        }
33 7
        if (array_key_exists('from', $options)) {
34 1
            $search->setFrom($options['from']);
35
        }
36 7
        if (array_key_exists('size', $options)) {
37 1
            $search->setSize($options['size']);
38
        }
39 7
        if (! empty($builder->orders)) {
40 1
            foreach ($builder->orders as $order) {
41 1
                $search->addSort(new FieldSort($order['column'], $order['direction']));
42
            }
43
        }
44
45 7
        return $search;
46
    }
47
}
48