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