commit: a49be27145a858a51e1b9104b0ebc5f63a03b81b
parent: 27b2355738482a2e470281136bfe902ad6c78db8
Author: masarakki <masaki182@gmail.com>
Date: Fri, 14 Jul 2017 18:02:49 +0900
add validation to tag name (#4194)
Diffstat:
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git 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
@@ -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 }