AshReqOpt
View SourceShortcut DSL for attributes and relationships in Ash resources.
For attribute
DSL | allow_nil? | public? |
---|---|---|
attribute (Ash) | true | false |
req | false | true |
req_prv | false | false |
opt | true | true |
opt_prv | true | false |
For belongs_to
DSL | allow_nil? | public? |
---|---|---|
belongs_to (Ash) | true | false |
req_belongs_to | false | true |
req_prv_belongs_to | false | false |
opt_belongs_to | true | true |
opt_prv_belongs_to | true | false |
Usage Example
defmodule MyApp.User do
use Ash.Resource, extensions: [AshReqOpt]
attributes do
uuid_primary_key :id
# Required attributes
req :email, :string # allow_nil?: false, public?: true
req_prv :password_hash, :string # allow_nil?: false, public?: false
# Optional attributes
opt :name, :string # allow_nil?: true, public?: true
opt_prv :last_login_at, :utc_datetime # allow_nil?: true, public?: false
# Original attribute macro still works
attribute :nickname, :string, allow_nil?: true
end
relationships do
# Required relationships
req_belongs_to :company, Company # allow_nil?: false, public?: true
req_prv_belongs_to :created_by, User # allow_nil?: false, public?: false
# Optional relationships
opt_belongs_to :manager, User # allow_nil?: true, public?: true
opt_prv_belongs_to :updated_by, User # allow_nil?: true, public?: false
# Original belongs_to macro still works
belongs_to :department, Department, allow_nil?: true
end
end
Installation
Add ash_req_opt
to your list of dependencies in mix.exs
:
def deps do
[
{:ash_req_opt, "~> 0.2.0"}
]
end
License
MIT