Commit 2e750b98613d0f0a42b321919a495a3d34b72fec

Authored by Andrew
1 parent e5531222

Cache indexes on model [skip ci]

Showing 1 changed file with 15 additions and 6 deletions   Show diff stats
lib/searchkick/model.rb
@@ -19,14 +19,22 @@ module Searchkick @@ -19,14 +19,22 @@ module Searchkick
19 raise ArgumentError, "Invalid value for callbacks" 19 raise ArgumentError, "Invalid value for callbacks"
20 end 20 end
21 21
  22 + index_name =
  23 + if options[:index_name]
  24 + options[:index_name]
  25 + elsif options[:index_prefix].respond_to?(:call)
  26 + -> { [options[:index_prefix].call, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_") }
  27 + else
  28 + [options.key?(:index_prefix) ? options[:index_prefix] : Searchkick.index_prefix, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_")
  29 + end
  30 +
22 class_eval do 31 class_eval do
23 cattr_reader :searchkick_options, :searchkick_klass 32 cattr_reader :searchkick_options, :searchkick_klass
24 33
25 class_variable_set :@@searchkick_options, options.dup 34 class_variable_set :@@searchkick_options, options.dup
26 class_variable_set :@@searchkick_klass, self 35 class_variable_set :@@searchkick_klass, self
27 - class_variable_set :@@searchkick_index, options[:index_name] ||  
28 - (options[:index_prefix].respond_to?(:call) && proc { [options[:index_prefix].call, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_") }) ||  
29 - [options.key?(:index_prefix) ? options[:index_prefix] : Searchkick.index_prefix, model_name.plural, Searchkick.env, Searchkick.index_suffix].compact.join("_") 36 + class_variable_set :@@searchkick_index, index_name
  37 + class_variable_set :@@searchkick_index_cache, {}
30 38
31 class << self 39 class << self
32 def searchkick_search(term = "*", **options, &block) 40 def searchkick_search(term = "*", **options, &block)
@@ -35,9 +43,10 @@ module Searchkick @@ -35,9 +43,10 @@ module Searchkick
35 alias_method Searchkick.search_method_name, :searchkick_search if Searchkick.search_method_name 43 alias_method Searchkick.search_method_name, :searchkick_search if Searchkick.search_method_name
36 44
37 def searchkick_index 45 def searchkick_index
38 - index = class_variable_get :@@searchkick_index  
39 - index = index.call if index.respond_to? :call  
40 - Searchkick::Index.new(index, searchkick_options) 46 + index = class_variable_get(:@@searchkick_index)
  47 + index = index.call if index.respond_to?(:call)
  48 + index_cache = class_variable_get(:@@searchkick_index_cache)
  49 + index_cache[name] ||= Searchkick::Index.new(index, searchkick_options)
41 end 50 end
42 alias_method :search_index, :searchkick_index unless method_defined?(:search_index) 51 alias_method :search_index, :searchkick_index unless method_defined?(:search_index)
43 52