Fix only one middle dot being recognized in hashtags (#11345)
Fix #10934
This commit is contained in:
		
							parent
							
								
									4906cabc6b
								
							
						
					
					
						commit
						84e988479e
					
				
					 2 changed files with 38 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -17,7 +17,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:]_][[:word:]_]*[[:alpha:]_·]*[[:word:]_·]*[[:word:]_]'
 | 
			
		||||
  HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i
 | 
			
		||||
 | 
			
		||||
  validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,43 @@ RSpec.describe Tag, type: :model do
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches #aesthetic' do
 | 
			
		||||
      expect(subject.match('this is #aesthetic')).to_not be_nil
 | 
			
		||||
      expect(subject.match('this is #aesthetic').to_s).to eq ' #aesthetic'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches digits at the start' do
 | 
			
		||||
      expect(subject.match('hello #3d').to_s).to eq ' #3d'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches digits in the middle' do
 | 
			
		||||
      expect(subject.match('hello #l33ts35k').to_s).to eq ' #l33ts35k'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches digits at the end' do
 | 
			
		||||
      expect(subject.match('hello #world2016').to_s).to eq ' #world2016'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches underscores at the beginning' do
 | 
			
		||||
      expect(subject.match('hello #_test').to_s).to eq ' #_test'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches underscores at the end' do
 | 
			
		||||
      expect(subject.match('hello #test_').to_s).to eq ' #test_'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches underscores in the middle' do
 | 
			
		||||
      expect(subject.match('hello #one_two_three').to_s).to eq ' #one_two_three'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'matches middle dots' do
 | 
			
		||||
      expect(subject.match('hello #one·two·three').to_s).to eq ' #one·two·three'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'does not match middle dots at the start' do
 | 
			
		||||
      expect(subject.match('hello #·one·two·three')).to be_nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'does not match middle dots at the end' do
 | 
			
		||||
      expect(subject.match('hello #one·two·three·').to_s).to eq ' #one·two·three'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue