Commit e50570a41c36ce7b6e6fb84a22b664a4bc2bde87

Authored by Andrew Kane
1 parent 2ca8cbd4

Added support for endless ranges

1 ## 3.1.3 [unreleased] 1 ## 3.1.3 [unreleased]
2 2
  3 +- Added support for endless ranges
3 - Added `prefix` to `where` 4 - Added `prefix` to `where`
4 - Fixed error with some language stemmers and Elasticsearch 6.5 5 - Fixed error with some language stemmers and Elasticsearch 6.5
5 6
lib/searchkick/query.rb
@@ -843,7 +843,12 @@ module Searchkick @@ -843,7 +843,12 @@ module Searchkick
843 else 843 else
844 # expand ranges 844 # expand ranges
845 if value.is_a?(Range) 845 if value.is_a?(Range)
846 - value = {gte: value.first, (value.exclude_end? ? :lt : :lte) => value.last} 846 + # infinite? added in Ruby 2.4
  847 + if value.end.nil? || (value.end.respond_to?(:infinite?) && value.end.infinite?)
  848 + value = {gte: value.first}
  849 + else
  850 + value = {gte: value.first, (value.exclude_end? ? :lt : :lte) => value.last}
  851 + end
847 end 852 end
848 853
849 value = {in: value} if value.is_a?(Array) 854 value = {in: value} if value.is_a?(Array)
test/where_test.rb
@@ -35,6 +35,11 @@ class WhereTest < Minitest::Test @@ -35,6 +35,11 @@ class WhereTest < Minitest::Test
35 assert_search "product", ["Product C", "Product D"], where: {store_id: {not: [1, 2]}} 35 assert_search "product", ["Product C", "Product D"], where: {store_id: {not: [1, 2]}}
36 assert_search "product", ["Product C", "Product D"], where: {store_id: {_not: [1, 2]}} 36 assert_search "product", ["Product C", "Product D"], where: {store_id: {_not: [1, 2]}}
37 assert_search "product", ["Product A"], where: {user_ids: {lte: 2, gte: 2}} 37 assert_search "product", ["Product A"], where: {user_ids: {lte: 2, gte: 2}}
  38 + assert_search "product", ["Product C", "Product D"], where: {store_id: 3..Float::INFINITY}
  39 + if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.6.0")
  40 + # use eval to prevent parse error
  41 + assert_search "product", ["Product C", "Product D"], where: {store_id: 3..eval("0..")}
  42 + end
38 43
39 # or 44 # or
40 assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]} 45 assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]}