diff --git a/app/models/tag.rb b/app/models/tag.rb index da1147015..4ec127f22 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -52,6 +52,7 @@ class Tag < ActsAsTaggableOn::Tag validate :validate_name, if: :name? before_validation :evaluate_markdown + before_validation :tidy_short_summary before_validation :pound_it before_save :calculate_hotness_score @@ -131,6 +132,10 @@ class Tag < ActsAsTaggableOn::Tag private + def tidy_short_summary + self.short_summary = ActionController::Base.helpers.strip_tags(short_summary) + end + def evaluate_markdown self.rules_html = MarkdownProcessor::Parser.new(rules_markdown).evaluate_markdown self.wiki_body_html = MarkdownProcessor::Parser.new(wiki_body_markdown).evaluate_markdown diff --git a/lib/data_update_scripts/20220121114445_stripping_html_tags_from_tag_short_summary.rb b/lib/data_update_scripts/20220121114445_stripping_html_tags_from_tag_short_summary.rb new file mode 100644 index 000000000..faf0f95ec --- /dev/null +++ b/lib/data_update_scripts/20220121114445_stripping_html_tags_from_tag_short_summary.rb @@ -0,0 +1,11 @@ +module DataUpdateScripts + class StrippingHtmlTagsFromTagShortSummary + def run + Tag.where("short_summary LIKE '%<%'").find_each do |tag| + # Choosing to skip validations and mimic the newly added before_validation behavior. + new_short_summary = ActionController::Base.helpers.strip_tags(tag.short_summary) + tag.update_columns(short_summary: new_short_summary) + end + end + end +end diff --git a/spec/lib/data_update_scripts/stripping_html_tags_from_tag_short_summary_spec.rb b/spec/lib/data_update_scripts/stripping_html_tags_from_tag_short_summary_spec.rb new file mode 100644 index 000000000..cad38116b --- /dev/null +++ b/spec/lib/data_update_scripts/stripping_html_tags_from_tag_short_summary_spec.rb @@ -0,0 +1,13 @@ +require "rails_helper" +require Rails.root.join( + "lib/data_update_scripts/20220121114445_stripping_html_tags_from_tag_short_summary.rb", +) + +describe DataUpdateScripts::StrippingHtmlTagsFromTagShortSummary do + it "updates a tag that had HTML elements in it's short summary" do + tag = create(:tag) + tag.update_columns(short_summary: "
Welcome to the tag.
") + described_class.new.run + expect(tag.reload.short_summary).to eq("Welcome to the tag.") + end +end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 7e2303e13..8d40ff16d 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -111,6 +111,12 @@ RSpec.describe Tag, type: :model do end end + it "strips HTML tags from short_summary before saving" do + tag.short_summary = "Hello World.
" + tag.save + expect(tag.short_summary).to eq("Hello World.") + end + it "turns markdown into HTML before saving" do tag.rules_markdown = "Hello [Google](https://google.com)" tag.save