22 lines
		
	
	
		
			831 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			831 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'exceptions/validation_error'
 | |
| class RunListArrayValidator < ActiveModel::EachValidator
 | |
| 
 | |
|   RUN_LIST_REGEX = /\A(role|recipe)\[[\w-]+(::[\w-]+)?\]\Z/
 | |
| 
 | |
|   def validate_each(record, attribute, valueArray)
 | |
|     unless valueArray.empty?
 | |
|       invalid_elements = valueArray.select {|l| (RUN_LIST_REGEX =~ l).nil?}
 | |
|       record.errors.add attribute, (options[:message] || "Invalid values: '#{invalid_elements.join("', '")}'") unless invalid_elements.empty?
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def self.validate_list list
 | |
|     raise Devops::Exception::ValidationError.new nil, {type: "Is not an array"} unless list.is_a?(Array)
 | |
|     unless list.empty?
 | |
|       invalid_elements = list.select{|l| (RUN_LIST_REGEX =~ l).nil?}
 | |
|       raise Devops::Exception::ValidationError.new(nil, elements: invalid_elements) unless invalid_elements.empty?
 | |
|     end
 | |
|   end
 | |
| 
 | |
| end
 | 
