diff --git a/app/models/account.rb b/app/models/account.rb index 9999f05dd0077ab673dce3f58ef1ec189940e7c9..cb186b4659f8f9befc52fd4e0813a36d5c71fc18 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,7 +1,7 @@ class Account < ApplicationRecord include Targetable - MENTION_RE = /(?:^|\s|\.|>)@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i + MENTION_RE = /(?:^|[\s\.>*+])@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze # Local users diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index 8c68ce9898a6ab2b37333dd9b2fd90838ab5453f..df30f73ae86d5896f0c026e2a21f079105ca79b0 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -4,7 +4,7 @@ class ProcessHashtagsService < BaseService tags = status.text.scan(Tag::HASHTAG_RE).map(&:first) end - tags.map(&:downcase).each do |tag| + tags.map(&:downcase).uniq.each do |tag| status.tags << Tag.where(name: tag).first_or_initialize(name: tag) end end diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb index f433cf271c0c0ae2c8c086d772e1c268f416e80b..92e25e03b4fbed7f6d2d2029214ec91ca68908db 100644 --- a/spec/controllers/tags_controller_spec.rb +++ b/spec/controllers/tags_controller_spec.rb @@ -3,6 +3,10 @@ require 'rails_helper' RSpec.describe TagsController, type: :controller do describe 'GET #show' do + before do + Fabricate(:tag, name: 'test') + end + it 'returns http success' do get :show, params: { id: 'test' } expect(response).to have_http_status(:success)