From c1f7b76bdbc1591adab1ef0030ef2787f4cb8af2 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 22 Feb 2020 01:37:12 -0600 Subject: [PATCH] dtext: refactor parsing of embedded BUR pseudo tags. --- app/logical/d_text.rb | 25 +++++++++++++------------ app/models/bulk_update_request.rb | 8 -------- app/models/tag_alias.rb | 8 -------- app/models/tag_implication.rb | 8 -------- app/models/tag_relationship.rb | 8 -------- 5 files changed, 13 insertions(+), 44 deletions(-) diff --git a/app/logical/d_text.rb b/app/logical/d_text.rb index 6650516f0..04de53969 100644 --- a/app/logical/d_text.rb +++ b/app/logical/d_text.rb @@ -7,7 +7,7 @@ class DText def self.format_text(text, data: nil, **options) return nil if text.nil? data = preprocess([text]) if data.nil? - text = parse_embedded_tag_request_text(text) + text = parse_embedded_tag_request(text) html = DTextRagel.parse(text, **options) html = postprocess(html, *data) html @@ -16,7 +16,7 @@ class DText end def self.preprocess(dtext_messages) - dtext_messages = dtext_messages.map { |message| parse_embedded_tag_request_text(message) } + dtext_messages = dtext_messages.map { |message| parse_embedded_tag_request(message) } names = dtext_messages.map { |message| parse_wiki_titles(message) }.flatten.uniq wiki_pages = WikiPage.where(title: names) tags = Tag.where(name: names) @@ -74,19 +74,20 @@ class DText "[quote]\n#{creator_name} said:\n\n#{stripped_body}\n[/quote]\n\n" end - def self.parse_embedded_tag_request_text(text) - [TagAlias, TagImplication, BulkUpdateRequest].each do |tag_request| - text = text.gsub(tag_request.embedded_pattern) do |match| - obj = tag_request.find($~[:id]) - tag_request_message(obj) || match - rescue ActiveRecord::RecordNotFound - match - end - end - + def self.parse_embedded_tag_request(text) + text = parse_embedded_tag_request_type(text, TagAlias, /\[ta:(?\d+)\]/m) + text = parse_embedded_tag_request_type(text, TagImplication, /\[ti:(?\d+)\]/m) + text = parse_embedded_tag_request_type(text, BulkUpdateRequest, /\[bur:(?\d+)\]/m) text end + def self.parse_embedded_tag_request_type(text, tag_request, pattern) + text.gsub(pattern) do |match| + obj = tag_request.find_by_id($~[:id]) + tag_request_message(obj) || match + end + end + def self.tag_request_message(obj) if obj.is_a?(TagRelationship) if obj.is_approved? diff --git a/app/models/bulk_update_request.rb b/app/models/bulk_update_request.rb index 70d64d85f..d2bfec01d 100644 --- a/app/models/bulk_update_request.rb +++ b/app/models/bulk_update_request.rb @@ -137,14 +137,6 @@ class BulkUpdateRequest < ApplicationRecord include ApprovalMethods include ValidationMethods - concerning :EmbeddedText do - class_methods do - def embedded_pattern - /\[bur:(?\d+)\]/m - end - end - end - def editable?(user) user_id == user.id || user.is_builder? end diff --git a/app/models/tag_alias.rb b/app/models/tag_alias.rb index 3cfeb3235..3c928a4f6 100644 --- a/app/models/tag_alias.rb +++ b/app/models/tag_alias.rb @@ -33,14 +33,6 @@ class TagAlias < TagRelationship include ApprovalMethods include ForumMethods - concerning :EmbeddedText do - class_methods do - def embedded_pattern - /\[ta:(?\d+)\]/m - end - end - end - def self.to_aliased(names) names = Array(names).map(&:to_s) return [] if names.empty? diff --git a/app/models/tag_implication.rb b/app/models/tag_implication.rb index 4b7730d4a..5f4cf73e7 100644 --- a/app/models/tag_implication.rb +++ b/app/models/tag_implication.rb @@ -191,14 +191,6 @@ class TagImplication < TagRelationship include ValidationMethods include ApprovalMethods - concerning :EmbeddedText do - class_methods do - def embedded_pattern - /\[ti:(?\d+)\]/m - end - end - end - def reload(options = {}) flush_cache super diff --git a/app/models/tag_relationship.rb b/app/models/tag_relationship.rb index be6827fe2..d5a98184e 100644 --- a/app/models/tag_relationship.rb +++ b/app/models/tag_relationship.rb @@ -177,14 +177,6 @@ class TagRelationship < ApplicationRecord end end - concerning :EmbeddedText do - class_methods do - def embedded_pattern - raise NotImplementedError - end - end - end - def antecedent_and_consequent_are_different if antecedent_name == consequent_name errors[:base] << "Cannot alias or implicate a tag to itself"