lib/ident/email/lib.ex

defmodule Rivet.Ident.Email.Lib do
  alias Rivet.Ident
  use Rivet.Ecto.Collection.Context, model: Ident.Email

  ##############################################################################
  @doc """
  Helper function which accepts either user_id or user, and calls the passed
  function with the user model loaded including any preloads.  Send preloads
  as [] if none are desired.
  """
  def with_email(%Ident.Email{} = email, preloads, func) do
    with {:ok, email} <- Ident.Email.preload(email, preloads) do
      func.(email)
    end
  end

  def with_email(email, preloads, func) when is_binary(email) do
    case Ident.Email.one([address: email], preloads) do
      {:error, _} = pass ->
        pass

      {:ok, %Ident.Email{} = email} ->
        func.(email)
    end
  end
end