5
5
6
6
module Fulfil
7
7
class Query
8
+ OPERATOR_MAP = {
9
+ gte : '>=' ,
10
+ gt : '>' ,
11
+ lte : '<=' ,
12
+ lt : '<'
13
+ } . freeze
14
+
8
15
def initialize
9
- @matchers = [ ]
16
+ @query = [ ]
10
17
end
11
18
12
19
def query
13
- @matchers
20
+ @query
14
21
end
15
22
16
23
def search ( *args )
@@ -20,7 +27,7 @@ def search(*args)
20
27
arg . each do |field , value |
21
28
next if value == options
22
29
23
- @matchers . concat ( build_search_term ( field : field , value : value , options : options ) )
30
+ @query . concat ( build_search_term ( field : field , value : value , options : options ) )
24
31
end
25
32
end
26
33
@@ -39,9 +46,9 @@ def exclude(*args)
39
46
end
40
47
41
48
if terms . length > 1
42
- @matchers . push ( [ 'OR' ] . concat ( terms ) )
49
+ @query . push ( [ 'OR' ] . concat ( terms ) )
43
50
else
44
- @matchers . concat ( terms . first )
51
+ @query . concat ( terms . first )
45
52
end
46
53
47
54
self
@@ -98,16 +105,22 @@ def build_search_term(field:, value:, options:, prefix: nil)
98
105
end
99
106
100
107
def handle_hash ( field , key , value , options )
101
- if %i[ gte gt lte lt ] . any? { |op | value . key? ( op ) }
102
- value . map do |operator , val |
103
- op_map = { gte : '>=' , gt : '>' , lte : '<=' , lt : '<' }
104
- converted_value = Converter . date_or_datetime_as_object ( val )
105
- [ key , op_map [ operator ] , converted_value ]
106
- end
108
+ if OPERATOR_MAP . keys . any? { |op | value . key? ( op ) }
109
+ handle_operator_comparison ( key , value )
107
110
else
108
- value . flat_map do |nested_field , nested_value |
109
- build_search_term ( prefix : field , field : nested_field , value : nested_value , options : options )
110
- end
111
+ handle_nested_fields ( field , value , options )
112
+ end
113
+ end
114
+
115
+ def handle_operator_comparison ( key , value )
116
+ value . map do |operator , val |
117
+ [ key , OPERATOR_MAP [ operator ] , Converter . date_or_datetime_as_object ( val ) ]
118
+ end
119
+ end
120
+
121
+ def handle_nested_fields ( field , value , options )
122
+ value . flat_map do |nested_field , nested_value |
123
+ build_search_term ( prefix : field , field : nested_field , value : nested_value , options : options )
111
124
end
112
125
end
113
126
0 commit comments