From 873816e23a3de2904a4af24b725eb2a72d754b32 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 21 Feb 2022 18:48:35 -0800 Subject: [PATCH] Moved logic to index [skip ci] --- lib/searchkick/index.rb | 23 ++++++++++++++++++++++- lib/searchkick/model.rb | 11 ++--------- test/reindex_test.rb | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/lib/searchkick/index.rb b/lib/searchkick/index.rb index 62f0065..338ee49 100644 --- a/lib/searchkick/index.rb +++ b/lib/searchkick/index.rb @@ -209,7 +209,28 @@ module Searchkick # reindex - def reindex(relation, method_name, scoped:, full: false, **options) + def reindex(object, method_name: nil, full: false, **options) + if object.is_a?(Array) + mode = options.delete(:mode) + mode ||= Searchkick.callbacks_value || @options[:callbacks] || true + mode = :inline if mode == :bulk + + refresh = options.delete(:refresh) + + # note: always want full to be false here + result = RecordIndexer.new(self).reindex(object, mode: mode, method_name: method_name, full: false, **options) + self.refresh if refresh + return result + end + + if !object.respond_to?(:searchkick_klass) + raise Error, "Cannot reindex object" + end + + scoped = Searchkick.relation?(object) + # call searchkick_klass for inheritance + relation = scoped ? object.all : Searchkick.scope(object.searchkick_klass).all + refresh = options.fetch(:refresh, !scoped) options.delete(:refresh) diff --git a/lib/searchkick/model.rb b/lib/searchkick/model.rb index b09b134..c88f6c5 100644 --- a/lib/searchkick/model.rb +++ b/lib/searchkick/model.rb @@ -26,11 +26,7 @@ module Searchkick include(mod) mod.module_eval do def reindex(method_name = nil, mode: nil, refresh: false) - mode ||= Searchkick.callbacks_value || self.class.searchkick_index.options[:callbacks] || true - mode = :inline if mode == :bulk - result = RecordIndexer.new(self.class.searchkick_index).reindex([self], mode: mode, method_name: method_name, single: true) - self.class.searchkick_index.refresh if refresh - result + self.class.searchkick_index.reindex([self], method_name: method_name, mode: mode, refresh: refresh, single: true) end def similar(**options) @@ -76,10 +72,7 @@ module Searchkick alias_method :search_index, :searchkick_index unless method_defined?(:search_index) def searchkick_reindex(method_name = nil, **options) - scoped = Searchkick.relation?(self) - # call searchkick_klass for inheritance - relation = scoped ? all : Searchkick.scope(searchkick_klass).all - searchkick_index.reindex(relation, method_name, scoped: scoped, **options) + searchkick_index.reindex(self, method_name: method_name, **options) end alias_method :reindex, :searchkick_reindex unless method_defined?(:reindex) diff --git a/test/reindex_test.rb b/test/reindex_test.rb index 4d113d1..28cb160 100644 --- a/test/reindex_test.rb +++ b/test/reindex_test.rb @@ -47,6 +47,14 @@ class ReindexTest < Minitest::Test assert_search "product", ["Product A"] end + def test_record_index + store_names ["Product A", "Product B"], reindex: false + + product = Product.find_by!(name: "Product A") + assert_equal true, Product.search_index.reindex([product], refresh: true) + assert_search "product", ["Product A"] + end + def test_relation_inline store_names ["Product A"] store_names ["Product B", "Product C"], reindex: false @@ -142,6 +150,13 @@ class ReindexTest < Minitest::Test assert_search "product", ["Product A", "Product B"] end + def test_relation_index + store_names ["Product A"] + store_names ["Product B", "Product C"], reindex: false + Product.search_index.reindex(Product.where(name: "Product B"), refresh: true) + assert_search "product", ["Product A", "Product B"] + end + def test_full_async store_names ["Product A"], reindex: false reindex = nil @@ -290,6 +305,13 @@ class ReindexTest < Minitest::Test Searchkick::ProcessQueueJob.perform_now(class_name: "Product") end + def test_object_index + error = assert_raises(Searchkick::Error) do + Product.search_index.reindex(Object.new) + end + assert_equal "Cannot reindex object", error.message + end + def test_transaction skip unless activerecord? -- libgit2 0.21.0