class ParseLinkableContentJob < ActiveJob::Base queue_as :default def perform(annotation) content = "" document = annotation.document citing_docs = annotation.documents if annotation.content.present? content = annotation.content.gsub("
", "").gsub("
", "") contents = content.split(" citing ") contents.each_with_index do |content, i| linkable_content = nil if i.eql?(0) linkable_content = add_linkable_content(document.id, [content[i], clean_phil_rep(annotation)].reject(&:blank?).join(", ")) else citing_docs.each do |citing_doc| old_content = contents[i] next if !old_content.include?(citing_doc.clean_reference_number) linkable_content = add_linkable_content(citing_doc.id, old_content) end end contents[i] = linkable_content end content = contents.join(" citing ") else contents = [] doc_title = document.short_title || document.title doc_date_or_year = document.doc_date.present? ? document.doc_date.strftime("%B %d, %Y") : document.year doc_ref_num = document.clean_reference_number contents << add_linkable_content(document.id, [doc_title, doc_ref_num, doc_date_or_year, clean_phil_rep(annotation)].reject(&:blank?).join(", ")) if citing_docs.present? citing_docs.each do |citing_doc| citing_doc_title = citing_doc.short_title || citing_doc.title citing_doc_date_or_year = citing_doc.doc_date.present? ? citing_doc.doc_date.strftime("%B %d, %Y") : citing_doc.year citing_doc_ref_num = citing_doc.clean_reference_number citing_content = [citing_doc_title, citing_doc_date_or_year, citing_doc_ref_num].join(", ") contents << ["citing", add_linkable_content(citing_doc, citing_content)].join(" ") end end content = contents.join(", ") end annotation.update_column(:content, content) if content.present? annotation.index! end private def add_linkable_content(document_id, content) document_route = Rails.application.routes.url_helpers.document_path(document_id) " #{content} " end def clean_phil_rep(annotation) return if annotation.phil_rep.blank? annotation.phil_rep.gsub(/(PhilRep|Phil)\.?,?/i, "Phil") end end