include Targetable
include PgSearch
- MENTION_RE = /(?:^|[^\/\w])@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i
+ MENTION_RE = /(?:^|[^\/\w])@([a-z0-9_]+(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
# Local users
class Tag < ApplicationRecord
has_and_belongs_to_many :statuses
- HASHTAG_RE = /(?:^|[^\/\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i
+ HASHTAG_RE = /(?:^|[^\/\)\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i
validates :name, presence: true, uniqueness: true
end
end
-
describe 'MENTION_RE' do
subject { Account::MENTION_RE }
expect(subject.match('@alice Hey how are you?')[1]).to eq 'alice'
end
+ it 'matches full usernames' do
+ expect(subject.match('@alice@example.com')[1]).to eq 'alice@example.com'
+ end
+
+ it 'matches full usernames with a dot at the end' do
+ expect(subject.match('Hello @alice@example.com.')[1]).to eq 'alice@example.com'
+ end
+
it 'matches dot-prepended usernames' do
expect(subject.match('.@alice I want everybody to see this')[1]).to eq 'alice'
end
require 'rails_helper'
RSpec.describe Tag, type: :model do
+ describe 'HASHTAG_RE' do
+ subject { Tag::HASHTAG_RE }
+ it 'does not match URLs with anchors with non-hashtag characters' do
+ expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil
+ end
+
+ it 'does not match URLs with hashtag-like anchors' do
+ expect(subject.match('https://en.wikipedia.org/wiki/Ghostbusters_(song)#Lawsuit')).to be_nil
+ end
+ end
end