class Annotation < ApplicationRecord acts_as_list column: :rank, scope: %i[doctrine_id] belongs_to :doctrine, optional: false belongs_to :document, polymorphic: true, optional: false has_many :annotation_documents, inverse_of: :annotation, dependent: :destroy accepts_nested_attributes_for :annotation_documents, allow_destroy: true has_many :annotation_annomarks, dependent: :destroy has_many :annomarks, through: :annotation_annomarks validates :content, presence: true before_save :parse_content def documents annotation_documents.collect(&:document) end def add_document(document) record = annotation_documents.new record.document = document record.save end def remove_document(document) annotation_documents.find_by(document_id: document.id).destroy end def citing_document_ids documents.map(&:id) end def parse_content pr = phil_rep.gsub(/(PhilRep|Phil)\.?,?/i, "Phil") pr = pr.gsub(/(PhilRep|Phil)\.?,?/i, "Phil") annotated_doc_title = document.short_title || document.title annotated_doc_date = document.doc_date.present? ? document.doc_date.try(:strftime, "%B %d, %Y") : document.year contents = content.split(" citing ") contents[0] = [annotated_doc_title, document.clean_reference_number, annotated_doc_date, pr].join(", ") self.content = contents.join(" citing ") end searchable do integer :document_id integer :doctrine_id integer :library_rank do document.library.rank end integer :search_year do document.year.present? && document.year > 0 ? document.year : (document.doc_date.try :year) end date :search_doc_date do document.doc_date.presence || Date.new(year.presence || 0) end date :created_at date :updated_at text :phil_rep string :phil_rep end end