From dd7164aac2e26426dbc82f213aa30249aae5638b Mon Sep 17 00:00:00 2001 From: multiple creatures Date: Tue, 21 May 2019 21:20:42 -0500 Subject: handle tags with the old `:` scope delimiter but translate those to `.` --- app/lib/activitypub/activity/create.rb | 2 +- app/models/tag.rb | 4 ++-- app/services/process_hashtags_service.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index a0cf03686..263dbbb87 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -179,7 +179,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def process_hashtag(tag) return if tag['name'].blank? - hashtag = tag['name'].gsub(/\A#/, '').mb_chars.downcase + hashtag = tag['name'].gsub(/\A#/, '').gsub(':', '.').mb_chars.downcase return if !@options[:imported] && hashtag.starts_with?('self.', '_self.', 'local.', '_local.') diff --git a/app/models/tag.rb b/app/models/tag.rb index a6a1445a3..d3511a54e 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -19,7 +19,7 @@ class Tag < ApplicationRecord has_many :featured_tags, dependent: :destroy, inverse_of: :tag has_one :account_tag_stat, dependent: :destroy - HASHTAG_NAME_RE = '[[:word:]._\-]*[[:alpha:]._·\-][[:word:]._\-]*' + HASHTAG_NAME_RE = '[[:word:]:._\-]*[[:alpha:]:._·\-][[:word:]:._\-]*' HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i } @@ -82,7 +82,7 @@ class Tag < ApplicationRecord end def find_normalized(name) - find_by(name: name.mb_chars.gsub(':', '.').downcase.to_s) + find_by(name: name.gsub(':', '.').mb_chars.downcase.to_s) end def find_normalized!(name) diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index e8c2c95bb..07806b4a7 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -8,7 +8,7 @@ class ProcessHashtagsService < BaseService records = [] tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name| - name = name.gsub(/\.\.+/, '.') + name = name.gsub(/[:.]+/, '.') next if name.blank? component_indices = name.size.times.select {|i| name[i] == '.'} component_indices << name.size - 1 -- cgit