fluke/devops-service/db/validators/project/named_tasks.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

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