Add custom validation message for chronic duration attribute
This commit is contained in:
parent
c6c21dd456
commit
519d1054bc
5 changed files with 12 additions and 5 deletions
|
@ -114,7 +114,8 @@ module Ci
|
|||
|
||||
cached_attr_reader :version, :revision, :platform, :architecture, :ip_address, :contacted_at
|
||||
|
||||
chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout
|
||||
chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout,
|
||||
error_message: 'Maximum job timeout has a value which could not be accepted'
|
||||
|
||||
validates :maximum_timeout, allow_nil: true,
|
||||
numericality: { greater_than_or_equal_to: 600,
|
||||
|
|
|
@ -24,7 +24,7 @@ module ChronicDurationAttribute
|
|||
end
|
||||
end
|
||||
|
||||
validates virtual_attribute, allow_nil: true, duration: true
|
||||
validates virtual_attribute, allow_nil: true, duration: { message: parameters[:error_message] }
|
||||
end
|
||||
|
||||
alias_method :chronic_duration_attr, :chronic_duration_attr_writer
|
||||
|
|
|
@ -384,7 +384,8 @@ class Project < ActiveRecord::Base
|
|||
|
||||
enum auto_cancel_pending_pipelines: { disabled: 0, enabled: 1 }
|
||||
|
||||
chronic_duration_attr :build_timeout_human_readable, :build_timeout, default: 3600
|
||||
chronic_duration_attr :build_timeout_human_readable, :build_timeout,
|
||||
default: 3600, error_message: 'Maximum job timeout has a value which could not be accepted'
|
||||
|
||||
validates :build_timeout, allow_nil: true,
|
||||
numericality: { greater_than_or_equal_to: 10.minutes,
|
||||
|
|
|
@ -14,6 +14,10 @@ class DurationValidator < ActiveModel::EachValidator
|
|||
def validate_each(record, attribute, value)
|
||||
ChronicDuration.parse(value)
|
||||
rescue ChronicDuration::DurationParseError
|
||||
if options[:message]
|
||||
record.errors.add(:base, options[:message])
|
||||
else
|
||||
record.errors.add(attribute, "is not a correct duration")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -54,7 +54,8 @@ shared_examples 'ChronicDurationAttribute writer' do
|
|||
subject.send("#{virtual_field}=", '-10m')
|
||||
|
||||
expect(subject.valid?).to be_falsey
|
||||
expect(subject.errors&.messages).to include(virtual_field => ['is not a correct duration'])
|
||||
expect(subject.errors&.messages)
|
||||
.to include(base: ['Maximum job timeout has a value which could not be accepted'])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue