lib/ash/resource/preparation/builtins.ex

defmodule Ash.Resource.Preparation.Builtins do
  @moduledoc "Builtin query preparations"

  @doc """
  Merges the given query context.

  If an MFA is provided, it will be called with the changeset.
  The MFA should return `{:ok, context_to_be_merged}` or `{:error, term}`

  ## Examples

      change set_context(%{something_used_internally: true})
      change set_context({MyApp.Context, :set_context, []})
  """
  @spec set_context(context :: map | mfa) ::
          Ash.Resource.Preparation.ref()
  def set_context(context) do
    {Ash.Resource.Preparation.SetContext, context: context}
  end

  @doc """
  Passes the given keyword list to `Ash.Query.build/2` with the query being prepared.

  This allows declaring simple query modifications in-line.

  To see the available options, see `Ash.Query.build/2`

  ## Examples

      prepare build(sort: [song_rank: :desc], limit: 10)
      prepare build(load: [:friends])
  """

  @spec build(Keyword.t()) :: Ash.Resource.Preparation.ref()
  def build(options) do
    {Ash.Resource.Preparation.Build, options: options}
  end
end