From c9265a220bf4467feef1c0e7b2b76bb226f1a539 Mon Sep 17 00:00:00 2001 From: Will Cosgrove Date: Mon, 8 Nov 2021 13:17:05 -0600 Subject: [PATCH] Support beginless ranges in where queries (#1527) --- lib/searchkick/query.rb | 18 ++++++++++++------ test/where_test.rb | 5 +++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index ceea8ac..487a35c 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -904,12 +904,7 @@ module Searchkick else # expand ranges if value.is_a?(Range) - # infinite? added in Ruby 2.4 - if value.end.nil? || (value.end.respond_to?(:infinite?) && value.end.infinite?) - value = {gte: value.first} - else - value = {gte: value.first, (value.exclude_end? ? :lt : :lte) => value.last} - end + value = expand_range(value) end value = {in: value} if value.is_a?(Array) @@ -1138,6 +1133,17 @@ module Searchkick end end + def expand_range(range) + expanded = {} + expanded[:gte] = range.begin if range.begin + + if range.end && !(range.end.respond_to?(:infinite?) && range.end.infinite?) + expanded[range.exclude_end? ? :lt : :lte] = range.end + end + + expanded + end + def base_field(k) k.sub(/\.(analyzed|word_start|word_middle|word_end|text_start|text_middle|text_end|exact)\z/, "") end diff --git a/test/where_test.rb b/test/where_test.rb index a6e4521..f41fd62 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -46,6 +46,11 @@ class WhereTest < Minitest::Test # use eval to prevent parse error assert_search "product", ["Product C", "Product D"], where: {store_id: eval("3..")} end + if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.7.0") + # use eval to prevent parse error + assert_search "product", ["Product A", "Product B"], where: {store_id: eval("..2")} + assert_search "product", ["Product A", "Product B"], where: {store_id: eval("...3")} + end # or assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]} -- libgit2 0.21.0