handle tags with the old `:` scope delimiter but translate those to `.`

staging
multiple creatures 2019-05-21 21:20:42 -05:00
parent 9abf1ce535
commit dd7164aac2
4 changed files with 8 additions and 8 deletions

View File

@ -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.')

View File

@ -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)

View File

@ -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

View File

@ -78,7 +78,7 @@ Rails.application.routes.draw do
get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
get '/@:username/media', to: 'accounts#show', as: :short_account_media
get '/@:username/reblogs', to: 'accounts#show', as: :short_account_reblogs
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag, constraints: { tag: /[\w._·\-]+/ }
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag, constraints: { tag: /[\w:._·\-]+/ }
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
@ -86,7 +86,7 @@ Rails.application.routes.draw do
post '/interact/:id', to: 'remote_interaction#create'
get '/explore', to: 'directories#index', as: :explore
get '/explore/:id', to: 'directories#show', as: :explore_hashtag, constraints: { id: /[\w._·\-]+/ }
get '/explore/:id', to: 'directories#show', as: :explore_hashtag, constraints: { id: /[\w:._·\-]+/ }
namespace :settings do
resource :profile, only: [:show, :update]
@ -124,7 +124,7 @@ Rails.application.routes.draw do
resource :migration, only: [:show, :update]
resources :sessions, only: [:destroy]
resources :featured_tags, only: [:index, :create, :destroy], constraints: { id: /[\w._·\-]+/ }
resources :featured_tags, only: [:index, :create, :destroy], constraints: { id: /[\w:._·\-]+/ }
end
resources :media, only: [:show] do
@ -293,7 +293,7 @@ Rails.application.routes.draw do
resource :direct, only: :show, controller: :direct
resource :home, only: :show, controller: :home
resource :public, only: :show, controller: :public
resources :tag, only: :show, constraints: { id: /[\w._·\-]+/ }
resources :tag, only: :show, constraints: { id: /[\w:._·\-]+/ }
resources :list, only: :show
end