diff options
author | masarakki <masaki182@gmail.com> | 2017-07-14 18:02:49 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-07-14 11:02:49 +0200 |
commit | a49be27145a858a51e1b9104b0ebc5f63a03b81b (patch) | |
tree | 8337aa515bdf3aea8124e6404eb4fb1177ba5c2c | |
parent | 27b2355738482a2e470281136bfe902ad6c78db8 (diff) |
add validation to tag name (#4194)
-rw-r--r-- | app/models/tag.rb | 5 | ||||
-rw-r--r-- | spec/models/tag_spec.rb | 18 |
2 files changed, 21 insertions, 2 deletions
diff --git a/app/models/tag.rb b/app/models/tag.rb index a14e2cc98..0fa08e157 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -12,9 +12,10 @@ class Tag < ApplicationRecord has_and_belongs_to_many :statuses - HASHTAG_RE = /(?:^|[^\/\)\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i + HASHTAG_NAME_RE = '[[:word:]_]*[[:alpha:]_][[:word:]_]*' + HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i - validates :name, presence: true, uniqueness: true + validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i } def to_param name diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 555474c44..f727fa1dd 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -1,6 +1,24 @@ require 'rails_helper' RSpec.describe Tag, type: :model do + describe 'validations' do + it 'invalid with #' do + expect(Tag.new(name: '#hello_world')).to_not be_valid + end + + it 'invalid with .' do + expect(Tag.new(name: '.abcdef123')).to_not be_valid + end + + it 'invalid with spaces' do + expect(Tag.new(name: 'hello world')).to_not be_valid + end + + it 'valid with aesthetic' do + expect(Tag.new(name: 'aesthetic')).to be_valid + end + end + describe 'HASHTAG_RE' do subject { Tag::HASHTAG_RE } |