search: clean up date range parsing.

This commit is contained in:
evazion
2020-04-19 13:48:07 -05:00
parent 6ca42947bd
commit 43067703b0

View File

@@ -91,17 +91,14 @@ class PostQueryBuilder
return relation if arr.nil? return relation if arr.nil?
case arr[0] case arr[0]
when :any
relation.where(["#{field} IS NOT NULL"])
when :none
relation.where(["#{field} IS NULL"])
when :eq when :eq
case arr[1] relation.where(["#{field} = ?", arr[1]])
when Time
relation.where("#{field} between ? and ?", arr[1].beginning_of_day, arr[1].end_of_day)
when :any
relation.where(["#{field} IS NOT NULL"])
when :none
relation.where(["#{field} IS NULL"])
else
relation.where(["#{field} = ?", arr[1]])
end
when :gt when :gt
relation.where(["#{field} > ?", arr[1]]) relation.where(["#{field} > ?", arr[1]])
@@ -1183,16 +1180,19 @@ class PostQueryBuilder
return [:in, range.split(/[, ]+/).map {|x| parse_cast(x, type)}] return [:in, range.split(/[, ]+/).map {|x| parse_cast(x, type)}]
when "any" when "any"
return [:eq, :any] return [:any]
when "none" when "none"
return [:eq, :none] return [:none]
else else
# add a 5% tolerance for float and filesize values # add a 5% tolerance for float and filesize values
if type == :float || (type == :filesize && range =~ /[km]b?\z/i) if type == :float || (type == :filesize && range =~ /[km]b?\z/i)
value = parse_cast(range, type) value = parse_cast(range, type)
[:between, value * 0.95, value * 1.05] [:between, value * 0.95, value * 1.05]
elsif type.in?([:date, :age])
value = parse_cast(range, type)
[:between, value.beginning_of_day, value.end_of_day]
else else
[:eq, parse_cast(range, type)] [:eq, parse_cast(range, type)]
end end