diff --git a/lib/searchkick/model.rb b/lib/searchkick/model.rb index ec0ef45..815b14e 100644 --- a/lib/searchkick/model.rb +++ b/lib/searchkick/model.rb @@ -43,21 +43,25 @@ module Searchkick class_variable_get(:@@searchkick_callbacks) && Searchkick.callbacks? end - def searchkick_reindex(options = {}) - unless options[:accept_danger] - if (respond_to?(:current_scope) && respond_to?(:default_scoped) && current_scope && current_scope.to_sql != default_scoped.to_sql) || - (respond_to?(:queryable) && queryable != unscoped.with_default_scope) - raise Searchkick::DangerousOperation, "Only call reindex on models, not relations. Pass `accept_danger: true` if this is your intention." + def searchkick_reindex(method_name = nil, **options) + if method_name + searchkick_index.import_scope(searchkick_klass, method_name: method_name) + searchkick_index.refresh + true + else + unless options[:accept_danger] + if (respond_to?(:current_scope) && respond_to?(:default_scoped) && current_scope && current_scope.to_sql != default_scoped.to_sql) || + (respond_to?(:queryable) && queryable != unscoped.with_default_scope) + raise Searchkick::DangerousOperation, "Only call reindex on models, not relations. Pass `accept_danger: true` if this is your intention." + end end + searchkick_index.reindex_scope(searchkick_klass, options) end - searchkick_index.reindex_scope(searchkick_klass, options) end alias_method :reindex, :searchkick_reindex unless method_defined?(:reindex) def searchkick_partial_reindex(method_name) - searchkick_index.import_scope(searchkick_klass, method_name: method_name) - searchkick_index.refresh - true + searchkick_reindex(method_name) end alias_method :partial_reindex, :searchkick_partial_reindex unless method_defined?(:partial_reindex) @@ -93,8 +97,12 @@ module Searchkick after_destroy callback_name, if: proc { self.class.search_callbacks? } end - def reindex(options = {}) - self.class.searchkick_index.reindex_record(self) + def reindex(method_name = nil, **options) + if method_name + self.class.searchkick_index.bulk_update([self], method_name) + else + self.class.searchkick_index.reindex_record(self) + end self.class.searchkick_index.refresh if options[:refresh] end unless method_defined?(:reindex) @@ -103,8 +111,7 @@ module Searchkick end unless method_defined?(:reindex_async) def partial_reindex(method_name) - self.class.searchkick_index.bulk_update([self], method_name) - self.class.searchkick_index.refresh + reindex(method_name, refresh: true) true end unless method_defined?(:partial_reindex) diff --git a/test/partial_reindex_test.rb b/test/partial_reindex_test.rb index a58d34d..78b9a79 100644 --- a/test/partial_reindex_test.rb +++ b/test/partial_reindex_test.rb @@ -22,7 +22,7 @@ class PartialReindexTest < Minitest::Test assert_search "blue", ["Hi"], fields: [:color], load: false # partial reindex - Product.partial_reindex(:search_name) + Product.reindex(:search_name) # name updated, but not color assert_search "bye", ["Bye"], fields: [:name], load: false @@ -49,7 +49,7 @@ class PartialReindexTest < Minitest::Test assert_search "hi", ["Hi"], fields: [:name], load: false assert_search "blue", ["Hi"], fields: [:color], load: false - product.partial_reindex(:search_name) + product.reindex(:search_name, refresh: true) # name updated, but not color assert_search "bye", ["Bye"], fields: [:name], load: false -- libgit2 0.21.0