Implement ayufan validator
This commit is contained in:
parent
0c9795a7b6
commit
1acaf75d9f
3 changed files with 3 additions and 44 deletions
|
@ -15,11 +15,7 @@ module Ci
|
|||
validates :cron_timezone, cron_timezone: true, presence: { unless: :importing? }
|
||||
validates :ref, presence: { unless: :importing? }
|
||||
validates :description, presence: true
|
||||
validates :variables, uniqueness_of_in_memory: {
|
||||
:collection => :variables,
|
||||
:attrs => [:pipeline_schedule_id, :key],
|
||||
:message => ['variables.key', 'keys are duplicated']
|
||||
}
|
||||
validates :variables, variable_duplicates: true
|
||||
|
||||
before_save :set_next_run_at
|
||||
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
# UniquenessOfInMemoryValidator
|
||||
#
|
||||
# This validtor is designed for especially the following condition
|
||||
# - Use `accepts_nested_attributes_for :xxx` in a parent model
|
||||
# - Use `validates :xxx, uniqueness: { scope: :xxx_id }` in a child model
|
||||
#
|
||||
# Inspired by https://stackoverflow.com/a/2883129/2522666
|
||||
module ActiveRecord
|
||||
class Base
|
||||
# Validate that the the objects in +collection+ are unique
|
||||
# when compared against all their non-blank +attrs+. If not
|
||||
# add +message+ to the base errors.
|
||||
def validate_uniqueness_of_in_memory(collection, attrs, message)
|
||||
hashes = collection.inject({}) do |hash, record|
|
||||
key = attrs.map { |a| record.send(a).to_s }.join
|
||||
if key.blank? || record.marked_for_destruction?
|
||||
key = record.object_id
|
||||
end
|
||||
hash[key] = record unless hash[key]
|
||||
hash
|
||||
end
|
||||
|
||||
if collection.length > hashes.length
|
||||
self.errors.add(*message)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class UniquenessOfInMemoryValidator < ActiveModel::Validator
|
||||
def validate(record)
|
||||
record.validate_uniqueness_of_in_memory(
|
||||
record.public_send(options[:collection]),
|
||||
options[:attrs],
|
||||
options[:message])
|
||||
end
|
||||
end
|
|
@ -171,7 +171,7 @@ describe Projects::PipelineSchedulesController do
|
|||
.to change { Ci::PipelineSchedule.count }.by(0)
|
||||
.and change { Ci::PipelineScheduleVariable.count }.by(0)
|
||||
|
||||
expect(assigns(:schedule).errors['variables.key']).not_to be_empty
|
||||
expect(assigns(:schedule).errors['variables']).not_to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -269,7 +269,7 @@ describe Projects::PipelineSchedulesController do
|
|||
it 'returns an error that variables are duplciated' do
|
||||
go
|
||||
|
||||
expect(assigns(:schedule).errors['variables.key']).not_to be_empty
|
||||
expect(assigns(:schedule).errors['variables']).not_to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue