Add custom ColorValidator
This commit is contained in:
parent
b3200c8c44
commit
e48391b813
|
@ -16,12 +16,12 @@
|
|||
class BroadcastMessage < ActiveRecord::Base
|
||||
include Sortable
|
||||
|
||||
validates :message, presence: true
|
||||
validates :message, presence: true
|
||||
validates :starts_at, presence: true
|
||||
validates :ends_at, presence: true
|
||||
validates :ends_at, presence: true
|
||||
|
||||
validates :color, format: { with: /\A\#[0-9A-Fa-f]{3}{1,2}+\Z/ }, allow_blank: true
|
||||
validates :font, format: { with: /\A\#[0-9A-Fa-f]{3}{1,2}+\Z/ }, allow_blank: true
|
||||
validates :color, allow_blank: true, color: true
|
||||
validates :font, allow_blank: true, color: true
|
||||
|
||||
def self.current
|
||||
where("ends_at > :now AND starts_at < :now", now: Time.zone.now).last
|
||||
|
|
|
@ -27,9 +27,7 @@ class Label < ActiveRecord::Base
|
|||
has_many :label_links, dependent: :destroy
|
||||
has_many :issues, through: :label_links, source: :target, source_type: 'Issue'
|
||||
|
||||
validates :color,
|
||||
format: { with: /\A#[0-9A-Fa-f]{6}\Z/ },
|
||||
allow_blank: false
|
||||
validates :color, color: true, allow_blank: false
|
||||
validates :project, presence: true, unless: Proc.new { |service| service.template? }
|
||||
|
||||
# Don't allow '?', '&', and ',' for label titles
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# ColorValidator
|
||||
#
|
||||
# Custom validator for web color codes. It requires the leading hash symbol and
|
||||
# will accept RGB triplet or hexadecimal formats.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# class User < ActiveRecord::Base
|
||||
# validates :background_color, allow_blank: true, color: true
|
||||
# end
|
||||
#
|
||||
class ColorValidator < ActiveModel::EachValidator
|
||||
PATTERN = /\A\#[0-9A-Fa-f]{3}{1,2}+\Z/.freeze
|
||||
|
||||
def validate_each(record, attribute, value)
|
||||
unless value =~ PATTERN
|
||||
record.errors.add(attribute, "must be a valid color code")
|
||||
end
|
||||
end
|
||||
end
|
|
@ -71,7 +71,7 @@ class Spinach::Features::AdminIssuesLabels < Spinach::FeatureSteps
|
|||
|
||||
step 'I should see label color error message' do
|
||||
page.within '.label-form' do
|
||||
expect(page).to have_content 'Color is invalid'
|
||||
expect(page).to have_content 'Color must be a valid color code'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ class Spinach::Features::ProjectIssuesLabels < Spinach::FeatureSteps
|
|||
|
||||
step 'I should see label color error message' do
|
||||
page.within '.label-form' do
|
||||
expect(page).to have_content 'Color is invalid'
|
||||
expect(page).to have_content 'Color must be a valid color code'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -20,6 +20,21 @@ describe BroadcastMessage do
|
|||
|
||||
it { is_expected.to be_valid }
|
||||
|
||||
describe 'validations' do
|
||||
let(:triplet) { '#000' }
|
||||
let(:hex) { '#AABBCC' }
|
||||
|
||||
it { is_expected.to allow_value(nil).for(:color) }
|
||||
it { is_expected.to allow_value(triplet).for(:color) }
|
||||
it { is_expected.to allow_value(hex).for(:color) }
|
||||
it { is_expected.not_to allow_value('000').for(:color) }
|
||||
|
||||
it { is_expected.to allow_value(nil).for(:font) }
|
||||
it { is_expected.to allow_value(triplet).for(:font) }
|
||||
it { is_expected.to allow_value(hex).for(:font) }
|
||||
it { is_expected.not_to allow_value('000').for(:font) }
|
||||
end
|
||||
|
||||
describe :current do
|
||||
it "should return last message if time match" do
|
||||
broadcast_message = create(:broadcast_message, starts_at: Time.now.yesterday, ends_at: Time.now.tomorrow)
|
||||
|
|
|
@ -47,7 +47,7 @@ describe API::API, api: true do
|
|||
name: 'Foo',
|
||||
color: '#FFAA'
|
||||
expect(response.status).to eq(400)
|
||||
expect(json_response['message']['color']).to eq(['is invalid'])
|
||||
expect(json_response['message']['color']).to eq(['must be a valid color code'])
|
||||
end
|
||||
|
||||
it 'should return 400 for too long color code' do
|
||||
|
@ -55,7 +55,7 @@ describe API::API, api: true do
|
|||
name: 'Foo',
|
||||
color: '#FFAAFFFF'
|
||||
expect(response.status).to eq(400)
|
||||
expect(json_response['message']['color']).to eq(['is invalid'])
|
||||
expect(json_response['message']['color']).to eq(['must be a valid color code'])
|
||||
end
|
||||
|
||||
it 'should return 400 for invalid name' do
|
||||
|
@ -151,12 +151,12 @@ describe API::API, api: true do
|
|||
expect(json_response['message']['title']).to eq(['is invalid'])
|
||||
end
|
||||
|
||||
it 'should return 400 for invalid name' do
|
||||
it 'should return 400 when color code is too short' do
|
||||
put api("/projects/#{project.id}/labels", user),
|
||||
name: 'label1',
|
||||
color: '#FF'
|
||||
expect(response.status).to eq(400)
|
||||
expect(json_response['message']['color']).to eq(['is invalid'])
|
||||
expect(json_response['message']['color']).to eq(['must be a valid color code'])
|
||||
end
|
||||
|
||||
it 'should return 400 for too long color code' do
|
||||
|
@ -164,7 +164,7 @@ describe API::API, api: true do
|
|||
name: 'Foo',
|
||||
color: '#FFAAFFFF'
|
||||
expect(response.status).to eq(400)
|
||||
expect(json_response['message']['color']).to eq(['is invalid'])
|
||||
expect(json_response['message']['color']).to eq(['must be a valid color code'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue