AshReqOpt
View SourceAn extension library for the Ash framework that provides clearer ways to define required and optional attributes and relationships in your resources.
Features
- Define required/optional attributes using
req
andopt
macros- Instead of
attribute :email, :string, allow_nil?: false
, usereq :email, :string
- Instead of
attribute :name, :string, allow_nil?: true
, useopt :name, :string
- You can still use the original
attribute
macro if you prefer
- Instead of
- Define required/optional relationships using
req_belongs_to
andopt_belongs_to
macros- Instead of
belongs_to :company, Company, allow_nil?: false
, usereq_belongs_to :company, Company
- Instead of
belongs_to :manager, User, allow_nil?: true
, useopt_belongs_to :manager, User
- You can still use the original
belongs_to
macro if you prefer
- Instead of
- Extends Ash resource DSL for more explicit intent
Installation
Add ash_req_opt
to your list of dependencies in mix.exs
:
def deps do
[
{:ash_req_opt, "~> 0.1.0"}
]
end
Usage Example
defmodule MyApp.User do
use Ash.Resource,
extensions: [AshReqOpt]
attributes do
uuid_primary_key :id
req :email, :string # Required attribute (equivalent to allow_nil?: false)
opt :name, :string # Optional attribute (equivalent to allow_nil?: true)
attribute :nickname, :string, allow_nil?: true # Original attribute macro still works
end
relationships do
req_belongs_to :company, Company # Required relationship (equivalent to allow_nil?: false)
opt_belongs_to :manager, User # Optional relationship (equivalent to allow_nil?: true)
belongs_to :department, Department, allow_nil?: true # Original belongs_to macro still works
end
end
License
MIT