Current section
Files
Jump to
Current section
Files
lib/swiss/ecto.ex
defmodule Swiss.Ecto do
@moduledoc """
Generic helper functions related with Ecto.
"""
@doc """
Given an association field, returns whether it's preloaded.
### Examples
iex> Swiss.Ecto.assoc_present?(nil)
false
iex> Swiss.Ecto.assoc_present?(nil, true)
true
iex> Swiss.Ecto.assoc_present?(%Ecto.Association.NotLoaded{})
false
iex> Swiss.Ecto.assoc_present?([])
true
iex> Swiss.Ecto.assoc_present?(MapSet.new())
true
"""
@spec assoc_present?(assoc :: term(), accept_nil? :: boolean) :: boolean()
def assoc_present?(assoc, accept_nil? \\ false)
def assoc_present?(nil, accept_nil?), do: accept_nil?
def assoc_present?(%module{}, _), do: module !== Ecto.Association.NotLoaded
def assoc_present?(assoc, _) when is_list(assoc), do: true
def assoc_present?(assoc, _), do: raise("unexpected assoc type: #{inspect(assoc)}")
end