diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 5f2babd..5924a3c 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -27,6 +27,7 @@ require "searchkick/relation" require "searchkick/relation_indexer" require "searchkick/results" require "searchkick/version" +require "searchkick/where" # integrations require "searchkick/railtie" if defined?(Rails) diff --git a/lib/searchkick/relation.rb b/lib/searchkick/relation.rb index 88d3a63..f9e2d3b 100644 --- a/lib/searchkick/relation.rb +++ b/lib/searchkick/relation.rb @@ -89,8 +89,12 @@ module Searchkick end # experimental - def where(value) - clone.where!(value) + def where(value = NO_DEFAULT_VALUE) + if value == NO_DEFAULT_VALUE + Where.new(self) + else + clone.where!(value) + end end # experimental diff --git a/lib/searchkick/where.rb b/lib/searchkick/where.rb new file mode 100644 index 0000000..2cb4298 --- /dev/null +++ b/lib/searchkick/where.rb @@ -0,0 +1,11 @@ +module Searchkick + class Where + def initialize(relation) + @relation = relation + end + + def not(value) + @relation.where(_not: value) + end + end +end diff --git a/test/where_test.rb b/test/where_test.rb index 05de1c8..828e783 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -97,6 +97,10 @@ class WhereTest < Minitest::Test # rewhere assert_search_relation ["Product A", "Product C"], Product.search("product").where(in_stock: true).rewhere(backordered: true) + + # not + assert_search_relation ["Product C", "Product D"], Product.search("product").where.not(in_stock: true) + assert_search_relation ["Product C"], Product.search("product").where.not(in_stock: true).where(backordered: true) end def test_where_string_operators -- libgit2 0.21.0