From aaf41f0e4b0e100aae6993b1c28076d615d8f164 Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 2 Mar 2018 12:56:06 -0800 Subject: [PATCH] Moved more logic out of model [skip ci] --- lib/searchkick.rb | 1 + lib/searchkick/model.rb | 56 +++++++------------------------------------------------- lib/searchkick/record_indexer.rb | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 49 deletions(-) create mode 100644 lib/searchkick/record_indexer.rb diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 46e66d5..63f0790 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -13,6 +13,7 @@ require "searchkick/multi_search" require "searchkick/query" require "searchkick/reindex_queue" require "searchkick/record_data" +require "searchkick/record_indexer" require "searchkick/results" require "searchkick/version" diff --git a/lib/searchkick/model.rb b/lib/searchkick/model.rb index 1a0ba57..ad358fe 100644 --- a/lib/searchkick/model.rb +++ b/lib/searchkick/model.rb @@ -14,6 +14,11 @@ module Searchkick options[:_type] ||= -> { searchkick_index.klass_document_type(self, true) } + callbacks = options.key?(:callbacks) ? options[:callbacks] : true + unless [true, false, :async, :queue].include?(callbacks) + raise ArgumentError, "Invalid value for callbacks" + end + class_eval do cattr_reader :searchkick_options, :searchkick_klass @@ -49,11 +54,6 @@ module Searchkick end end - callbacks = options.key?(:callbacks) ? options[:callbacks] : true - unless [true, false, :async, :queue].include?(callbacks) - raise ArgumentError, "Invalid value for callbacks" - end - if callbacks if respond_to?(:after_commit) after_commit :reindex @@ -63,50 +63,8 @@ module Searchkick end end - def reindex(method_name = nil, refresh: false, mode: nil) - return unless Searchkick.callbacks? - - unless [true, nil, :async, :queue].include?(mode) - raise ArgumentError, "Invalid value for mode" - end - - klass_options = self.class.searchkick_index.options - - if mode.nil? - mode = - if Searchkick.callbacks_value - Searchkick.callbacks_value - else - klass_options[:callbacks] - end - end - - case mode - when :queue - if method_name - raise Searchkick::Error, "Partial reindex not supported with queue option" - else - self.class.searchkick_index.reindex_queue.push(id.to_s) - end - when :async - if method_name - # TODO support Mongoid and NoBrainer and non-id primary keys - Searchkick::BulkReindexJob.perform_later( - class_name: self.class.name, - record_ids: [id.to_s], - method_name: method_name ? method_name.to_s : nil - ) - else - self.class.searchkick_index.reindex_record_async(self) - end - else - if method_name - self.class.searchkick_index.update_record(self, method_name) - else - self.class.searchkick_index.reindex_record(self) - end - self.class.searchkick_index.refresh if refresh - end + def reindex(method_name = nil, **options) + RecordIndexer.new(self).reindex(method_name, **options) end unless method_defined?(:reindex) def similar(options = {}) diff --git a/lib/searchkick/record_indexer.rb b/lib/searchkick/record_indexer.rb new file mode 100644 index 0000000..05126c6 --- /dev/null +++ b/lib/searchkick/record_indexer.rb @@ -0,0 +1,57 @@ +module Searchkick + class RecordIndexer + attr_reader :record + + def initialize(record) + @record = record + end + + def reindex(method_name = nil, refresh: false, mode: nil) + return unless Searchkick.callbacks? + + unless [true, nil, :async, :queue].include?(mode) + raise ArgumentError, "Invalid value for mode" + end + + index = record.class.searchkick_index + + klass_options = index.options + + if mode.nil? + mode = + if Searchkick.callbacks_value + Searchkick.callbacks_value + else + klass_options[:callbacks] + end + end + + case mode + when :queue + if method_name + raise Searchkick::Error, "Partial reindex not supported with queue option" + else + index.reindex_queue.push(record.id.to_s) + end + when :async + if method_name + # TODO support Mongoid and NoBrainer and non-id primary keys + Searchkick::BulkReindexJob.perform_later( + class_name: record.class.name, + record_ids: [record.id.to_s], + method_name: method_name ? method_name.to_s : nil + ) + else + index.reindex_record_async(record) + end + else + if method_name + index.update_record(record, method_name) + else + index.reindex_record(record) + end + index.refresh if refresh + end + end + end +end -- libgit2 0.21.0