Add `details` to error response for `POST /api/v1/accounts` in REST API (#15803)
parent
b4cb8c3c83
commit
9aa37b32c3
@ -0,0 +1,32 @@ |
|||||||
|
# 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 |
Loading…
Reference in new issue