Created
August 5, 2021 16:27
-
-
Save ConradSulzer/fc7247579eff105f08003cd2bdb0a979 to your computer and use it in GitHub Desktop.
error refactor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Fillogic.Helpers.ErrorHelpers do | |
@moduledoc """ | |
A module for general error helpers | |
""" | |
import Ecto.Changeset, only: [traverse_errors: 2] | |
def error_message_builder(errors) do | |
errors | |
|> find_errors() | |
|> format_errors() | |
end | |
def find_errors(errors_changeset) do | |
traverse_errors(errors_changeset, fn {msg, opts} -> | |
Enum.reduce(opts, msg, fn {key, value}, _acc -> | |
String.replace(msg, "[#{key}]", to_string(value)) | |
end) | |
end) | |
end | |
defp format_errors(errors_map) do | |
List.flatten( | |
Enum.reduce(errors_map, [], fn {schema, error_msg}, acc -> | |
process_error_mesage(error_msg) | |
end) | |
) | |
end | |
defp process_error_message(error_msg) when is_list(error_msg) do | |
["#{Atom.to_string(schema)} #{List.first(error_msg)}" | acc] | |
end | |
defp process_error_message(error_msg) when is_map(error_msg) do | |
formatted_error_msg = | |
for {key, value} <- error_msg do | |
parse_error_msg(key, value) | |
end | |
|> Enum.map(&"#{&1} in #{Atom.to_string(schema)}") | |
[formatted_error_msg | acc] | |
end | |
defp process_error_message(error_msg) do | |
[error_msg | acc] | |
end | |
defp parse_error_msg(key, [head | _tail] = value) when is_map(head) do | |
for {key2, value2} <- List.first(value) do | |
"-#{Atom.to_string(key2)} #{List.first(value2)}" | |
end | |
end | |
defp parse_error_msg(key, [head | _tail] = value) do | |
"#{Atom.to_string(key)} #{List.first(value)}" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment