Skip to content

Commit 188d127

Browse files
committed
Add operator map to fulfil query
1 parent a0a9ada commit 188d127

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

lib/fulfil/query.rb

+27-14
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55

66
module Fulfil
77
class Query
8+
OPERATOR_MAP = {
9+
gte: '>=',
10+
gt: '>',
11+
lte: '<=',
12+
lt: '<'
13+
}.freeze
14+
815
def initialize
9-
@matchers = []
16+
@query = []
1017
end
1118

1219
def query
13-
@matchers
20+
@query
1421
end
1522

1623
def search(*args)
@@ -20,7 +27,7 @@ def search(*args)
2027
arg.each do |field, value|
2128
next if value == options
2229

23-
@matchers.concat(build_search_term(field: field, value: value, options: options))
30+
@query.concat(build_search_term(field: field, value: value, options: options))
2431
end
2532
end
2633

@@ -39,9 +46,9 @@ def exclude(*args)
3946
end
4047

4148
if terms.length > 1
42-
@matchers.push(['OR'].concat(terms))
49+
@query.push(['OR'].concat(terms))
4350
else
44-
@matchers.concat(terms.first)
51+
@query.concat(terms.first)
4552
end
4653

4754
self
@@ -98,16 +105,22 @@ def build_search_term(field:, value:, options:, prefix: nil)
98105
end
99106

100107
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)
107110
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)
111124
end
112125
end
113126

0 commit comments

Comments
 (0)