defmodule Plausible.ChangesetHelpers do @moduledoc "Helper function for working with Ecto changesets" def traverse_errors(changeset) do Ecto.Changeset.traverse_errors(changeset, fn {msg, opts} -> Regex.replace(~r"%{(\w+)}", msg, fn _, key -> opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string() end) end) end end