command_search 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2d4dc8f93128387f81a1db137c961877d7013fca4685708246313c631335844
4
- data.tar.gz: 1febafa4673817a5b339283d417b280fe9823d7185aed8e3acdf4f634ec0691a
3
+ metadata.gz: 3f2b041b01322aa1a4075fe249d11be0c2f09162e69004904c1c8f73bc55ef8e
4
+ data.tar.gz: 86b41dffb65a45e51301c3f83d8956c8788b53f62af0e070572154d07fe12785
5
5
  SHA512:
6
- metadata.gz: 61bf9662d85418432ec74454d501e37a64b15b3f1449e319628d2d262504e1c91809847281f6b85ac3812ceb6f59b496198b30b5a46ad6f9a564b50c7d31a0c6
7
- data.tar.gz: 0a7c487210b398beb48e1a03d12d10bb8948849eeca87616a724d4a6ee993266bef0f9bed8f95b50448ab4b218f5995586277f1f83e0a31d816b2449d56c0379
6
+ metadata.gz: 6cc6ad695a6655df003d5d0741c51e588e4ec11b875bfea45a9baf2695b33cee4e9fc8591f9cd2233f6112a5ff0765fc23370e73f0ad8871e4aee5c23c120f4d
7
+ data.tar.gz: 6a040c19da93e76992bbadb4a7e8d1adfdf786fd83a8fd0fd0818691ff5349f70531ac3eaf2374c48502b979652b6adafd9acd4f422c4c543bc3f1ac20082c73
@@ -29,7 +29,8 @@ module CommandSearch
29
29
  if cmd_search == cmd_search.to_i.to_s
30
30
  Time.new(cmd_search) <= item_time && item_time < Time.new(cmd_search.to_i + 1)
31
31
  else
32
- input_times = Chronic.parse(cmd_search, { guess: nil })
32
+ time_str = cmd_search.gsub(/[\._-]/, ' ')
33
+ input_times = Chronic.parse(time_str, { guess: nil }) || Chronic.parse(cmd_search, { guess: nil })
33
34
  input_times.first <= item_time && item_time < input_times.last
34
35
  end
35
36
  elsif val[1][:type] == :quoted_str
@@ -68,10 +69,9 @@ module CommandSearch
68
69
  }
69
70
  date_pick = date_start_map[node[:nest_op]]
70
71
  time_str = item_val.gsub(/[\._-]/, ' ')
71
-
72
72
  next Time.new(time_str) if time_str == time_str.to_i.to_s
73
73
 
74
- date = Chronic.parse(time_str, { guess: nil })
74
+ date = Chronic.parse(time_str, { guess: nil }) || Chronic.parse(item_val, { guess: nil })
75
75
  if date_pick == :start
76
76
  date.first
77
77
  else
@@ -4,7 +4,7 @@ module CommandSearch
4
4
  module Mongoer
5
5
  module_function
6
6
 
7
- def build_search(ast_node, fields)
7
+ def build_search(ast_node, fields, command_types)
8
8
  str = ast_node[:value] || ''
9
9
  fields = [fields] unless fields.is_a?(Array)
10
10
  if ast_node[:type] == :quoted_str
@@ -18,9 +18,22 @@ module CommandSearch
18
18
  regex = /#{Regexp.escape(str)}/i
19
19
  end
20
20
  if ast_node[:negate]
21
- forms = fields.map { |f| { f => { '$not' => regex } } }
21
+ forms = fields.map do |field|
22
+ if [Numeric, Integer].include?(command_types[field.to_sym])
23
+ { field => { '$ne' => str } }
24
+ else
25
+ { field => { '$not' => regex } }
26
+ end
27
+ end
22
28
  else
23
29
  forms = fields.map { |f| { f => regex } }
30
+ forms = fields.map do |field|
31
+ if [Numeric, Integer].include?(command_types[field.to_sym])
32
+ { field => str }
33
+ else
34
+ { field => regex }
35
+ end
36
+ end
24
37
  end
25
38
  return forms if forms.count < 2
26
39
  if ast_node[:negate]
@@ -106,7 +119,7 @@ module CommandSearch
106
119
  date_begin = Time.new(time_str)
107
120
  date_end = Time.new(time_str.to_i + 1).yesterday
108
121
  else
109
- date = Chronic.parse(time_str, guess: nil)
122
+ date = Chronic.parse(time_str, guess: nil) || Chronic.parse(raw_val, guess: nil)
110
123
  date_begin = date.begin
111
124
  date_end = date.end
112
125
  end
@@ -124,8 +137,9 @@ module CommandSearch
124
137
  key = '$and'
125
138
  end
126
139
  end
127
-
128
- if field_node[:negate] && (type == Numeric || type == String)
140
+ if field_node[:negate] && [Numeric, Integer].include?(type)
141
+ { key => { '$ne' => val } }
142
+ elsif field_node[:negate] && type == String
129
143
  { key => { '$not' => val } }
130
144
  else
131
145
  { key => val }
@@ -178,7 +192,7 @@ module CommandSearch
178
192
  key = '$' + key
179
193
  val = [key, val]
180
194
  key = '$expr'
181
- elsif type == Numeric
195
+ elsif [Numeric, Integer].include?(type)
182
196
  if val == val.to_i.to_s
183
197
  val = val.to_i
184
198
  else
@@ -201,7 +215,7 @@ module CommandSearch
201
215
  if time_str == time_str.to_i.to_s
202
216
  date = [Time.new(time_str), Time.new(time_str.to_i + 1).yesterday]
203
217
  else
204
- date = Chronic.parse(time_str, guess: nil)
218
+ date = Chronic.parse(time_str, guess: nil) || Chronic.parse(val, guess: nil)
205
219
  end
206
220
 
207
221
  if date_pick == :start
@@ -224,7 +238,7 @@ module CommandSearch
224
238
  build_searches!(x[:value], fields, command_types)
225
239
  x
226
240
  else
227
- build_search(x, fields)
241
+ build_search(x, fields, command_types)
228
242
  end
229
243
  end
230
244
  ast.flatten!
@@ -3,9 +3,9 @@ module CommandSearch
3
3
  module_function
4
4
 
5
5
  def parens_rindex(input)
6
- open_i = input.rindex { |x| x[:value] == '(' && x[:type] == :paren}
6
+ open_i = input.rindex { |x| x[:value] == '(' && x[:type] == :paren }
7
7
  return unless open_i
8
- close_offset = input.drop(open_i).index { |x| x[:value] == ')' && x[:type] == :paren}
8
+ close_offset = input.drop(open_i).index { |x| x[:value] == ')' && x[:type] == :paren }
9
9
  return unless close_offset
10
10
  [open_i, close_offset + open_i]
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - zumbalogy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-13 00:00:00.000000000 Z
11
+ date: 2019-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic