AshCommanded.Commanded.Transformers.GenerateEventModules (AshCommanded v0.1.0)
View SourceGenerates event modules based on the events defined in the DSL.
For each event defined in a resource, this transformer will generate a corresponding module with the event name as a struct with the specified fields.
This transformer should run after command modules have been generated.
Example
Given a resource with the following event:
event :user_registered do
fields [:id, :email, :name]
end
This transformer will generate a module like:
defmodule MyApp.Events.UserRegistered do
@moduledoc "Event representing when a user was registered"
@type t :: %__MODULE__{
id: String.t(),
email: String.t(),
name: String.t()
}
defstruct [:id, :email, :name]
end
Summary
Functions
Specifies that this transformer should run after the command module transformer.
Callback implementation for Spark.Dsl.Transformer.after_compile?/0
.
Callback implementation for Spark.Dsl.Transformer.before?/1
.
Builds the module name for an event.
Builds the AST (Abstract Syntax Tree) for an event module.
Transforms the DSL state to generate event modules.
Functions
Specifies that this transformer should run after the command module transformer.
Callback implementation for Spark.Dsl.Transformer.after_compile?/0
.
Callback implementation for Spark.Dsl.Transformer.before?/1
.
Builds the module name for an event.
Examples
iex> build_event_module(%Event{name: :user_registered}, MyApp)
MyApp.Events.UserRegistered
iex> build_event_module(%Event{name: :user_registered, event_name: :new_user}, MyApp)
MyApp.Events.NewUser
Builds the AST (Abstract Syntax Tree) for an event module.
Examples
iex> build_event_module_ast(%Event{name: :user_registered, fields: [:id]}, "User")
{:__block__, [], [{:@, [...], [{:moduledoc, [...], [...]}]}, ...]}
Transforms the DSL state to generate event modules.
Examples
iex> transform(dsl_state)
{:ok, updated_dsl_state}