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
 | 
