33 lines
		
	
	
		
			651 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			651 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class ValidationErrorFormatter
 | |
|   def initialize(error, aliases = {})
 | |
|     @error   = error
 | |
|     @aliases = aliases
 | |
|   end
 | |
| 
 | |
|   def as_json
 | |
|     { error: @error.to_s, details: details }
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def details
 | |
|     h = {}
 | |
| 
 | |
|     errors.details.each_pair do |attribute_name, attribute_errors|
 | |
|       messages = errors.messages[attribute_name]
 | |
| 
 | |
|       h[@aliases[attribute_name] || attribute_name] = attribute_errors.map.with_index do |error, index|
 | |
|         { error: "ERR_#{error[:error].to_s.upcase}", description: messages[index] }
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     h
 | |
|   end
 | |
| 
 | |
|   def errors
 | |
|     @errors ||= @error.record.errors
 | |
|   end
 | |
| end
 |