OnePiece.Commanded.ValueObject (OnePiece.Commanded v0.26.0)
View SourceDefines "Value Object" modules.
Summary
Functions
Converts the module into an Ecto.Schema and add factory functions to create structs.
Returns an Ecto.Changeset.t/0 for a given value object struct.
Functions
@spec __using__(opts :: []) :: any()
Converts the module into an Ecto.Schema and add factory functions to create structs.
Using
Derives
Usage
defmodule MyValueObject do
use OnePiece.Commanded.ValueObject
embedded_schema do
field :title, :string
# ...
end
endOverridable
validate/2to add custom validation to the existingchangeset/2without overriding the wholechangeset/2function.defmodule MyValueObject do use OnePiece.Commanded.ValueObject embedded_schema do field :amount, :integer end def validate(changeset, attrs) do changeset |> Changeset.validate_number(:amount, greater_than: 0) end endchangeset/2returns anEcto.Changeset.t/0for a given value object struct.Overriding Changeset
Be careful when overriding
changeset/2because the default implementation takes care ofcast,validate_requiredthe@enforced_keysand nested embeds. You may want to callOnePiece.Commanded.ValueObject.changeset/2to have such features.If you only need to extend the changeset, you can override the
validate/2function instead.
Returns an Ecto.Changeset.t/0 for a given value object struct.
It reads the @enforced_keys from the struct and validates the required
fields. Also, it casts the embeds. It is useful when you override the
changeset/2 function in your value object.
Examples
defmodule MyValueObject do
use OnePiece.Commanded.ValueObject
@enforce_keys [:title, :amount]
embedded_schema do
field :title, :string
field :amount, :integer
end
def changeset(message, attrs) do
message
|> ValueObject.changeset(attrs)
|> Changeset.validate_number(:amount, greater_than: 0)
end
end