Sha256: 8ad095b79793ce1bcac035414938718a6ead96a1692fdd48bbf80402f9e20efd
Contents?: true
Size: 1.6 KB
Versions: 6
Compression:
Stored size: 1.6 KB
Contents
# frozen_string_literal: true module PagesCore module SearchableDocument extend ActiveSupport::Concern included do has_many :search_documents, as: :searchable, dependent: :destroy after_save :update_search_documents! end class Indexer attr_reader :record def initialize(record) @record = record end class << self def index_all!(scope) scope.find_each { |r| new(r).index! } end end def index! SearchDocument.transaction do record.search_documents.where.not(locale: locales).destroy_all locales.each do |locale| update_index( locale, localized_record(locale).search_document_attributes ) end end end private def locales if record.respond_to?(:locales) record.locales elsif PagesCore.config.locales PagesCore.config.locales.keys else [I18n.default_locale] end end def localized_record(locale) return record unless record.respond_to?(:localize) record.localize(locale) end def update_index(locale, attrs) record.search_documents.create_or_find_by!(locale:).update(attrs) end end def search_document_attributes return {} unless respond_to?(:localized_attributes) content = localized_attributes.keys.map { |a| localizer.get(a) }.join(" ") { content: } end def update_search_documents! PagesCore::SearchableDocument::Indexer.new(self).index! end end end
Version data entries
6 entries across 6 versions & 1 rubygems