43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'db/validators/run_list_array'
 | |
| 
 | |
| class ProperNamedTasksFormatValidator < ActiveModel::Validator
 | |
| 
 | |
|   # should be an array of hashes like:
 | |
|   # {
 | |
|   #   'name' => 'restart',
 | |
|   #   'run_list' => [
 | |
|   #     'role[restart_service]'
 | |
|   #   ]
 | |
|   # }
 | |
|   def validate(record)
 | |
|     unless record.named_tasks
 | |
|       record.errors.add :named_tasks, "Tasks should not be nil"
 | |
|       return
 | |
|     end
 | |
|     record.named_tasks.each do |named_task|
 | |
|       check_name!(named_task, record)
 | |
|       check_run_list!(named_task, record)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def check_name!(task, record)
 | |
|     unless task.key?('name')
 | |
|       record.errors.add :named_tasks, "One of tasks doesn't have a name"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def check_run_list!(task, record)
 | |
|     RunListArrayValidator.validate_list(task['run_list'])
 | |
|   rescue Devops::Exception::ValidationError => e
 | |
|     if e.body[:elements]
 | |
|       wrong_elements = e.body[:elements]
 | |
|       record.errors.add :named_tasks, "Invalid run list elements: '#{wrong_elements.join(', ')}' for task #{task['name']}."
 | |
|     else
 | |
|       record.errors.add :named_tasks, "Task #{task['name']} has invalid run list."
 | |
|     end
 | |
|   end
 | |
| 
 | |
| end
 | 
