Test Failed
Pull Request — master (#161)
by
unknown
06:47
created

SearchFactory::create()   B

Complexity

Conditions 7
Paths 16

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 13.125

Importance

Changes 3
Bugs 1 Features 0
Metric Value
cc 7
eloc 18
c 3
b 1
f 0
nc 16
nop 2
dl 0
loc 27
ccs 9
cts 18
cp 0.5
crap 13.125
rs 8.8333
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 2
    public static function create(Builder $builder, array $options = []): Search
20
    {
21 2
        $search = new Search();
22 2
        $query = new QueryStringQuery($builder->query);
23 2
        if (! empty($builder->wheres)) {
24
            $boolQuery = new BoolQuery();
25
            foreach ($builder->wheres as $field => $value) {
26
                $boolQuery->add(new TermQuery((string) $field, $value), BoolQuery::FILTER);
27
            }
28
            $boolQuery->add($query, BoolQuery::MUST);
29
            $search->addQuery($boolQuery);
30
        } else {
31 2
            $search->addQuery($query);
32
        }
33 2
        if (array_key_exists('from', $options)) {
34
            $search->setFrom($options['from']);
35
        }
36 2
        if (array_key_exists('size', $options)) {
37
            $search->setSize($options['size']);
38
        }
39 2
        if (! empty($builder->orders)) {
40
            foreach ($builder->orders as $order) {
41
                $search->addSort(new FieldSort($order['column'], $order['direction']));
42
            }
43
        }
44
45 2
        return $search;
46
    }
47
}
48