AshCommanded.Commanded.Transformers.GenerateEventModules (AshCommanded v0.1.0)

View Source

Generates 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.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

after?(arg1)

Specifies that this transformer should run after the command module transformer.

after_compile?()

Callback implementation for Spark.Dsl.Transformer.after_compile?/0.

before?(_)

Callback implementation for Spark.Dsl.Transformer.before?/1.

build_event_module(event, app_prefix)

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

build_event_module_ast(event, resource_name)

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, [...], [...]}]}, ...]}

transform(dsl_state)

Transforms the DSL state to generate event modules.

Examples

iex> transform(dsl_state)
{:ok, updated_dsl_state}