32 lines
		
	
	
	
		
			651 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			32 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
 |