38 lines
820 B
Ruby
38 lines
820 B
Ruby
module DataSync
|
|
module Elasticsearch
|
|
class Article < Base
|
|
RELATED_DOCS = %i[
|
|
reactions
|
|
].freeze
|
|
|
|
SHARED_FIELDS = %i[
|
|
body_markdown
|
|
path
|
|
published
|
|
reading_time
|
|
tag_list
|
|
title
|
|
].freeze
|
|
|
|
private
|
|
|
|
def sync_related_documents
|
|
RELATED_DOCS.each do |relation_name|
|
|
if updated_record.published
|
|
send(relation_name).find_each(&:index_to_elasticsearch)
|
|
elsif updated_fields.key?(:published)
|
|
send(relation_name).find_each(&:remove_from_elasticsearch)
|
|
end
|
|
end
|
|
end
|
|
|
|
def sync_needed?
|
|
updated_fields.slice(*SHARED_FIELDS).any? && reactions.any?
|
|
end
|
|
|
|
def reactions
|
|
updated_record.reactions.readinglist
|
|
end
|
|
end
|
|
end
|
|
end
|