Passed
Pull Request — master (#177)
by
unknown
07:50 queued 10s
created

SearchFactory::hasWhereIns()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 1
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 2
rs 10
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\Query\TermLevel\TermsQuery;
10
use ONGR\ElasticsearchDSL\Search;
11
use ONGR\ElasticsearchDSL\Sort\FieldSort;
12
13
final class SearchFactory
14
{
15
    /**
16
     * @param Builder $builder
17
     * @param array $options
18
     * @return Search
19
     */
20 7
    public static function create(Builder $builder, array $options = []): Search
21
    {
22 7
        $search = new Search();
23 7
        $query = new QueryStringQuery($builder->query);
24 7
        if (static::hasWhereFilters($builder)) {
25 1
            $boolQuery = new BoolQuery();
26 1
            $boolQuery = static::addWheres($builder, $boolQuery);
27 1
            $boolQuery = static::addWhereIns($builder, $boolQuery);
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
    /**
49
     * @param Builder $builder
50
     * @return bool
51
     */
52 7
    private static function hasWhereFilters($builder): bool
53
    {
54 7
        return static::hasWheres($builder) || static::hasWhereIns($builder);
55
    }
56
57
    /**
58
     * @param Builder $builder
59
     * @param BoolQuery $boolQuery
60
     * @return BoolQuery
61
     */
62 1
    private static function addWheres($builder, $boolQuery): BoolQuery
63
    {
64 1
        if (static::hasWheres($builder)) {
65 1
            foreach ($builder->wheres as $field => $value) {
66 1
                $boolQuery->add(new TermQuery((string) $field, $value), BoolQuery::FILTER);
67
            }
68
        }
69
70 1
        return $boolQuery;
71
    }
72
73
    /**
74
     * @param Builder $builder
75
     * @param BoolQuery $boolQuery
76
     * @return BoolQuery
77
     */
78 1
    private static function addWhereIns($builder, $boolQuery): BoolQuery
79
    {
80 1
        if (static::hasWhereIns($builder)) {
81 1
            foreach ($builder->whereIns as $field => $arrayOfValues) {
82 1
                $boolQuery->add(new TermsQuery((string) $field, $arrayOfValues), BoolQuery::FILTER);
83
            }
84
        }
85
86 1
        return $boolQuery;
87
    }
88
89
    /**
90
     * @param Builder $builder
91
     * @return bool
92
     */
93 7
    private static function hasWheres($builder): bool
94
    {
95 7
        return ! empty($builder->wheres);
96
    }
97
98
    /**
99
     * @param Builder $builder
100
     * @return bool
101
     */
102 7
    private static function hasWhereIns($builder): bool
103
    {
104 7
        return isset($builder->whereIns) && ! empty($builder->whereIns);
105
    }
106
}
107