lib/spike.ex

defmodule Spike do
  def valid?(struct) do
    errors(struct) == %{}
  end

  defdelegate errors(struct), to: Spike.FormData
  defdelegate human_readable_errors(struct), to: Spike.FormData
  defdelegate dirty_fields(struct), to: Spike.FormData
  defdelegate make_dirty(struct), to: Spike.FormData
  defdelegate make_pristine(struct), to: Spike.FormData
  defdelegate update(struct, ref, params), to: Spike.FormData
  defdelegate append(struct, ref, field, params), to: Spike.FormData
  defdelegate delete(struct, ref), to: Spike.FormData
  defdelegate set_private(struct, ref, key, value), to: Spike.FormData
  defdelegate has_errors?(struct, ref, key), to: Spike.ErrorHelpers
  defdelegate has_errors?(struct, ref, key, message), to: Spike.ErrorHelpers

  def validation_context(struct) do
    struct
    |> Spike.FormData.ValidationContext.get_validation_context()
    |> case do
      list when list != [] > 0 ->
        list |> Enum.reverse() |> tl() |> Enum.reverse()

      otherwise ->
        otherwise
    end
  end
end