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 |