Ash.Domain

View Source

domain

General domain configuration

Examples

domain do
  description """
  Resources related to the flux capacitor.
  """
end

Options

NameTypeDefaultDocs
descriptionString.tA description for the domain.

resources

List the resources of this domain

Nested DSLs

  • resource
    • define
      • custom_input
        • transform
    • define_calculation
      • custom_input
        • transform

Examples

resources do
  resource MyApp.Tweet
  resource MyApp.Comment
end

Options

NameTypeDefaultDocs
allowmfaSupport a dynamic resource list by providing a callback that checks whether or not the resource should be allowed.
allow_unregistered?booleanfalseWhether the domain will support only registered entries or not.

resources.resource

resource resource

A resource present in the domain

Nested DSLs

Examples

resource Foo

Arguments

NameTypeDefaultDocs
resourcemodule

resources.resource.define

define name

Defines a function with the corresponding name and arguments. See the code interface guide for more.

Nested DSLs

Examples

define :get_user_by_id, action: :get_by_id, args: [:id], get?: true

Arguments

NameTypeDefaultDocs
nameatomThe name of the function that will be defined

Options

NameTypeDefaultDocs
actionatomThe name of the action that will be called. Defaults to the same name as the function.
argslist(atom | {:optional, atom})Map specific arguments to named inputs. Can provide any argument/attributes that the action allows.
not_found_error?booleantrueIf the action or interface is configured with get?: true, this determines whether or not an error is raised or nil is returned.
require_reference?booleantrueFor update and destroy actions, require a resource or identifier to be passed in as the first argument. Not relevant for other action types.
exclude_inputslist(atom)[]A list of action inputs to not accept in the defined interface
get?booleanfalseExpects to only receive a single result from a read action or a bulk update/destroy, and returns a single result instead of a list. Sets require_reference? to false automatically.
get_byatom | list(atom)Takes a list of fields and adds those fields as arguments, which will then be used to filter. Sets get? to true and require_reference? to false automatically. Adds filters for read, update and destroy actions, replacing the record first argument.
get_by_identityatomTakes an identity, gets its field list, and performs the same logic as get_by with those fields. Adds filters for read, update and destroy actions, replacing the record first argument.
default_optionskeyword[]Default options to be merged with client-provided options. These can override domain or action defaults. :load, :bulk_options, and :page options will be deep merged.

resources.resource.define.custom_input

custom_input name, type

Define or customize an input to the action.

See the code interface guide for more.

Nested DSLs

Examples

custom_input :artist, :struct do
  transform to: :artist_id, using: &(&1.id)

  constraints instance_of: Artist
end

Arguments

NameTypeDefaultDocs
nameatomThe name of the argument
typemoduleThe type of the argument. See Ash.Type for more.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description for the argument.
constraintskeyword[]Constraints to provide to the type when casting the value. For more information, see Ash.Type.
allow_nil?booleantrueWhether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
sensitive?booleanfalseWhether or not the argument value contains sensitive information, like PII(Personally Identifiable Information). See the security guide for more.
defaultanyThe default value for the argument to take. It can be a zero argument function e.g &MyMod.my_fun/0 or a value

resources.resource.define.custom_input.transform

A transformation to be applied to the custom input.

Examples

transform do
  to :artist_id
  using &(&1.id)
end
transform do
  to :points
  using &try_parse_integer/1
end

Options

NameTypeDefaultDocs
toatomA key to rewrite the argument to. If the custom input is also a required positional argument, then the to is automatically added to the exclude_inputs list.
using(any -> any)A function to use to transform the value. Must return value or nil

Introspection

Target: Ash.Resource.Interface.CustomInput.Transform

Introspection

Target: Ash.Resource.Interface.CustomInput

Introspection

Target: Ash.Resource.Interface

resources.resource.define_calculation

define_calculation name

Defines a function with the corresponding name and arguments, that evaluates a calculation. Use :_record to take an instance of a record. See the code interface guide for more.

Nested DSLs

Examples

define_calculation :referral_link, User, args: [:id]
define_calculation :referral_link, User, args: [{:arg, :id}, {:ref, :id}]

Arguments

NameTypeDefaultDocs
nameatomThe name of the function that will be defined

Options

NameTypeDefaultDocs
calculationatomThe name of the calculation that will be evaluated. Defaults to the same name as the function.
exclude_inputslist(atom)[]A list of calculation inputs to not accept in the defined interface
argsany[]Supply field or argument values referenced by the calculation, in the form of :name, {:arg, :name} and/or {:ref, :name}. See the code interface guide for more.

resources.resource.define_calculation.custom_input

custom_input name, type

Define or customize an input to the action.

See the code interface guide for more.

Nested DSLs

Examples

custom_input :artist, :struct do
  transform to: :artist_id, using: &(&1.id)

  constraints instance_of: Artist
end

Arguments

NameTypeDefaultDocs
nameatomThe name of the argument
typemoduleThe type of the argument. See Ash.Type for more.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description for the argument.
constraintskeyword[]Constraints to provide to the type when casting the value. For more information, see Ash.Type.
allow_nil?booleantrueWhether or not the argument value may be nil (or may be not provided). If nil value is given error is raised.
sensitive?booleanfalseWhether or not the argument value contains sensitive information, like PII(Personally Identifiable Information). See the security guide for more.
defaultanyThe default value for the argument to take. It can be a zero argument function e.g &MyMod.my_fun/0 or a value

resources.resource.define_calculation.custom_input.transform

A transformation to be applied to the custom input.

Examples

transform do
  to :artist_id
  using &(&1.id)
end
transform do
  to :points
  using &try_parse_integer/1
end

Options

NameTypeDefaultDocs
toatomA key to rewrite the argument to. If the custom input is also a required positional argument, then the to is automatically added to the exclude_inputs list.
using(any -> any)A function to use to transform the value. Must return value or nil

Introspection

Target: Ash.Resource.Interface.CustomInput.Transform

Introspection

Target: Ash.Resource.Interface.CustomInput

Introspection

Target: Ash.Resource.CalculationInterface

Introspection

Target: Ash.Domain.Dsl.ResourceReference

execution

Options for how requests are executed using this domain

Examples

execution do
  timeout :timer.seconds(30)
end

Options

NameTypeDefaultDocs
timeouttimeout:infinityThe default timeout in milliseconds to use for requests using this domain. See the timeouts guide for more.
trace_nameString.tThe name to use in traces. Defaults to the last part of the module. See the monitoring guide for more

authorization

Options for how requests are authorized using this domain. See the Sensitive Data guide for more.

Examples

authorization do
  authorize :always
end

Options

NameTypeDefaultDocs
require_actor?booleanfalseRequires that an actor has been supplied.
authorize:always | :by_default | :when_requested:by_defaultWhen to run authorization for a given request.