You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
651 B
32 lines
651 B
# 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
|
|
|