diff options
author | Claire <claire.github-309c@sitedethib.com> | 2021-03-02 12:06:58 +0100 |
---|---|---|
committer | Claire <claire.github-309c@sitedethib.com> | 2021-03-02 12:06:58 +0100 |
commit | d8fdbb054e30f6e8e505bce63e5f150bf117cd8e (patch) | |
tree | 0a671ee6c8a7644e6613dd87798f661f4703e8fe /app/lib/validation_error_formatter.rb | |
parent | 4aa860b65bd796b09dc0ceffa1fdd7de31060a34 (diff) | |
parent | 65db2625508c220fd3c0a1f37cdd2e13b6e02987 (diff) |
Merge branch 'main' into glitch-soc/merge-upstream
Conflicts: - `app/validators/status_length_validator.rb`: Upstream changes too close to glitch-soc MAX_CHARS changes, but not a real conflict. Applied upstream changes. - `package.json`: glitch-soc-only dependency textually too close to a dependency updated upstream, not a real conflict. Applied upstream changes.
Diffstat (limited to 'app/lib/validation_error_formatter.rb')
-rw-r--r-- | app/lib/validation_error_formatter.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/lib/validation_error_formatter.rb b/app/lib/validation_error_formatter.rb new file mode 100644 index 000000000..3f964f739 --- /dev/null +++ b/app/lib/validation_error_formatter.rb @@ -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 |