about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-11-05 22:09:51 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-11-05 22:09:51 +0100
commit7bb28bf7804eadbaeac05e7adb8123a8fb6c5d02 (patch)
tree9bc9bf1fe93f36f169b903d930c69fbaf624ed1d
parent262adb9791f32162340cec23e3b571655225a3da (diff)
Improve @mention regex
-rw-r--r--app/models/account.rb2
-rw-r--r--app/services/process_hashtags_service.rb2
-rw-r--r--spec/controllers/tags_controller_spec.rb4
3 files changed, 6 insertions, 2 deletions
diff --git a/app/models/account.rb b/app/models/account.rb
index 9999f05dd..cb186b465 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 8c68ce989..df30f73ae 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 f433cf271..92e25e03b 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)