From eca9be0b2a335db0b57b26b09157fc3e97a1a54c Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 2 Mar 2018 11:12:04 -0800 Subject: [PATCH] Renamed RecordIndexer to RecordData [skip ci] --- lib/searchkick.rb | 2 +- lib/searchkick/index.rb | 10 +++++----- lib/searchkick/record_data.rb | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/searchkick/record_indexer.rb | 125 ----------------------------------------------------------------------------------------------------------------------------- 4 files changed, 131 insertions(+), 131 deletions(-) create mode 100644 lib/searchkick/record_data.rb delete mode 100644 lib/searchkick/record_indexer.rb diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 3479234..63d4306 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -11,7 +11,7 @@ require "searchkick/model" require "searchkick/multi_search" require "searchkick/query" require "searchkick/reindex_queue" -require "searchkick/record_indexer" +require "searchkick/record_data" require "searchkick/results" require "searchkick/version" diff --git a/lib/searchkick/index.rb b/lib/searchkick/index.rb index 48faaf4..62f1d30 100644 --- a/lib/searchkick/index.rb +++ b/lib/searchkick/index.rb @@ -110,11 +110,11 @@ module Searchkick end def search_id(record) - RecordIndexer.new(self, record).search_id + RecordData.new(self, record).search_id end def document_type(record) - RecordIndexer.new(self, record).document_type + RecordData.new(self, record).document_type end def reindex_record(record) @@ -432,15 +432,15 @@ module Searchkick end def bulk_index_helper(records) - Searchkick.indexer.queue(records.map { |r| RecordIndexer.new(self, r).index_data }) + Searchkick.indexer.queue(records.map { |r| RecordData.new(self, r).index_data }) end def bulk_delete_helper(records) - Searchkick.indexer.queue(records.reject { |r| r.id.blank? }.map { |r| RecordIndexer.new(self, r).delete_data }) + Searchkick.indexer.queue(records.reject { |r| r.id.blank? }.map { |r| RecordData.new(self, r).delete_data }) end def bulk_update_helper(records, method_name) - Searchkick.indexer.queue(records.map { |r| RecordIndexer.new(self, r).update_data(method_name) }) + Searchkick.indexer.queue(records.map { |r| RecordData.new(self, r).update_data(method_name) }) end def batches_key diff --git a/lib/searchkick/record_data.rb b/lib/searchkick/record_data.rb new file mode 100644 index 0000000..cab8d9c --- /dev/null +++ b/lib/searchkick/record_data.rb @@ -0,0 +1,125 @@ +module Searchkick + class RecordData + EXCLUDED_ATTRIBUTES = ["_id", "_type"] + + attr_reader :index, :record + + def initialize(index, record) + @index = index + @record = record + end + + def index_data + data = record_data + data[:data] = search_data + {index: data} + end + + def update_data(method_name) + data = record_data + data[:data] = {doc: search_data(method_name)} + {update: data} + end + + def delete_data + {delete: record_data} + end + + def search_id + id = record.respond_to?(:search_document_id) ? record.search_document_id : record.id + id.is_a?(Numeric) ? id : id.to_s + end + + def document_type(ignore_type = false) + index.klass_document_type(record.class, ignore_type) + end + + private + + def record_data + data = { + _index: index.name, + _id: search_id, + _type: document_type + } + data[:_routing] = record.search_routing if record.respond_to?(:search_routing) + data + end + + def search_data(method_name = nil) + partial_reindex = !method_name.nil? + options = record.class.searchkick_options + + # remove _id since search_id is used instead + source = record.send(method_name || :search_data).each_with_object({}) { |(k, v), memo| memo[k.to_s] = v; memo }.except(*EXCLUDED_ATTRIBUTES) + + # conversions + if options[:conversions] + Array(options[:conversions]).map(&:to_s).each do |conversions_field| + if source[conversions_field] + source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} } + end + end + end + + # hack to prevent generator field doesn't exist error + if options[:suggest] + options[:suggest].map(&:to_s).each do |field| + source[field] = nil if !source[field] && !partial_reindex + end + end + + # locations + if options[:locations] + options[:locations].map(&:to_s).each do |field| + if source[field] + if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash)) + # multiple locations + source[field] = source[field].map { |a| location_value(a) } + else + source[field] = location_value(source[field]) + end + end + end + end + + if !source.key?("type") && record.class.searchkick_klass.searchkick_options[:inheritance] + source["type"] = document_type(true) + end + + cast_big_decimal(source) + + source + end + + def location_value(value) + if value.is_a?(Array) + value.map(&:to_f).reverse + elsif value.is_a?(Hash) + {lat: value[:lat].to_f, lon: value[:lon].to_f} + else + value + end + end + + # change all BigDecimal values to floats due to + # https://github.com/rails/rails/issues/6033 + # possible loss of precision :/ + def cast_big_decimal(obj) + case obj + when BigDecimal + obj.to_f + when Hash + obj.each do |k, v| + obj[k] = cast_big_decimal(v) + end + when Enumerable + obj.map do |v| + cast_big_decimal(v) + end + else + obj + end + end + end +end diff --git a/lib/searchkick/record_indexer.rb b/lib/searchkick/record_indexer.rb deleted file mode 100644 index dd8cd67..0000000 --- a/lib/searchkick/record_indexer.rb +++ /dev/null @@ -1,125 +0,0 @@ -module Searchkick - class RecordIndexer - EXCLUDED_ATTRIBUTES = ["_id", "_type"] - - attr_reader :index, :record - - def initialize(index, record) - @index = index - @record = record - end - - def index_data - data = record_data - data[:data] = search_data - {index: data} - end - - def update_data(method_name) - data = record_data - data[:data] = {doc: search_data(method_name)} - {update: data} - end - - def delete_data - {delete: record_data} - end - - def document_type(ignore_type = false) - index.klass_document_type(record.class, ignore_type) - end - - def search_id - id = record.respond_to?(:search_document_id) ? record.search_document_id : record.id - id.is_a?(Numeric) ? id : id.to_s - end - - private - - def record_data - data = { - _index: index.name, - _id: search_id, - _type: document_type - } - data[:_routing] = record.search_routing if record.respond_to?(:search_routing) - data - end - - def search_data(method_name = nil) - partial_reindex = !method_name.nil? - options = record.class.searchkick_options - - # remove _id since search_id is used instead - source = record.send(method_name || :search_data).each_with_object({}) { |(k, v), memo| memo[k.to_s] = v; memo }.except(*EXCLUDED_ATTRIBUTES) - - # conversions - if options[:conversions] - Array(options[:conversions]).map(&:to_s).each do |conversions_field| - if source[conversions_field] - source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} } - end - end - end - - # hack to prevent generator field doesn't exist error - if options[:suggest] - options[:suggest].map(&:to_s).each do |field| - source[field] = nil if !source[field] && !partial_reindex - end - end - - # locations - if options[:locations] - options[:locations].map(&:to_s).each do |field| - if source[field] - if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash)) - # multiple locations - source[field] = source[field].map { |a| location_value(a) } - else - source[field] = location_value(source[field]) - end - end - end - end - - if !source.key?("type") && record.class.searchkick_klass.searchkick_options[:inheritance] - source["type"] = document_type(true) - end - - cast_big_decimal(source) - - source - end - - def location_value(value) - if value.is_a?(Array) - value.map(&:to_f).reverse - elsif value.is_a?(Hash) - {lat: value[:lat].to_f, lon: value[:lon].to_f} - else - value - end - end - - # change all BigDecimal values to floats due to - # https://github.com/rails/rails/issues/6033 - # possible loss of precision :/ - def cast_big_decimal(obj) - case obj - when BigDecimal - obj.to_f - when Hash - obj.each do |k, v| - obj[k] = cast_big_decimal(v) - end - when Enumerable - obj.map do |v| - cast_big_decimal(v) - end - else - obj - end - end - end -end -- libgit2 0.21.0