fluke/devops-service/db/validators/field_validators/named_tasks.rb

66 lines
1.5 KiB
Ruby
Raw Normal View History

2016-03-01 22:05:25 +03:00
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