66 lines
1.5 KiB
Ruby
66 lines
1.5 KiB
Ruby
require_relative "base"
|
|
|
|
module Validators
|
|
module FieldValidator
|
|
class NamedTasks < Base
|
|
|
|
def valid?
|
|
@value.each do |named_task|
|
|
break unless check_name!(named_task)
|
|
break unless check_run_list!(named_task)
|
|
break unless check_additional_keys!(named_task)
|
|
end
|
|
@message.nil?
|
|
end
|
|
|
|
def message
|
|
@message
|
|
end
|
|
|
|
private
|
|
|
|
def check_name!(task)
|
|
if task.key?('name')
|
|
true
|
|
else
|
|
@message = "One of tasks doesn't have a name"
|
|
false
|
|
end
|
|
end
|
|
|
|
def check_run_list!(task)
|
|
if !task.key?('run_list')
|
|
@message = "Task #{task['name']} doesn't have run_list"
|
|
return false
|
|
end
|
|
|
|
if !task['run_list'].is_a?(Array)
|
|
@message = "Run list of #{task['name']} isn't an array"
|
|
return false
|
|
end
|
|
|
|
wrong_elements = task['run_list'].select do |element|
|
|
Validators::Helpers::RunList::RUN_LIST_REGEX.match(element).nil?
|
|
end
|
|
|
|
if wrong_elements.empty?
|
|
true
|
|
else
|
|
@message = "Invalid run list elements: '#{wrong_elements.join(', ')}' for task #{task['name']}."
|
|
false
|
|
end
|
|
end
|
|
|
|
def check_additional_keys!(task)
|
|
if task.keys.length > 2
|
|
@message = "Task hash should contain only name and run_list"
|
|
false
|
|
else
|
|
true
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|