AshDispatch.Context (AshDispatch v0.5.1)
View SourceEvent context passed to all event callbacks and transports.
The context contains:
- Event data (resources, user, etc.)
- Metadata (event_id, source, timestamp)
- Configuration (locale, base_url)
- Computed values from enrichment
Example
%Context{
event_id: "orders.created",
data: %{
order: %ProductOrder{...},
user: %User{...}
},
user: %User{...},
locale: "sv",
base_url: "https://myapp.com",
now: ~U[2025-01-15 10:00:00Z],
resource_key: :order
}
Summary
Functions
Recursively atomizes string keys in maps.
Enriches context with additional data.
Merges metadata into context.
Creates a new context.
Gets all assigns for template rendering by merging data and variables.
Types
@type t() :: %AshDispatch.Context{ base_url: String.t(), data: map(), event_id: String.t(), locale: String.t(), metadata: map(), now: DateTime.t(), opts: map(), priority: :urgent | :standard | :informational, resource_key: atom() | nil, source: String.t() | nil, user: struct() | nil, variables: map() }
Functions
Recursively atomizes string keys in maps.
Skips structs to preserve Ash resources.
Examples
iex> Context.atomize_keys(%{"user" => %{"email" => "test@example.com"}})
%{user: %{email: "test@example.com"}}
iex> Context.atomize_keys(%User{email: "test@example.com"})
%User{email: "test@example.com"}
Enriches context with additional data.
Used by Dispatcher to auto-populate common fields like admins.
Example
context
|> Context.enrich(:admins, list_of_admins)
|> Context.enrich(:metadata, %{custom: "value"})
Merges metadata into context.
Creates a new context.
Options
:event_id- Event identifier:data- Event data map (resources, domain objects):variables- Variables map (tokens, simple values, template data):resource_key- Hint for nested user lookup:locale- Locale for i18n:user- Actor/user triggering the event:base_url- Base URL for link building:metadata- Additional metadata:opts- Additional options
Example
Context.new(
event_id: "orders.created",
data: %{order: order, user: user},
variables: %{confirmation_token: token},
user: user,
locale: "sv"
)
Gets all assigns for template rendering by merging data and variables.
Variables take precedence over data in case of key conflicts.
Example
context = %Context{
data: %{user: user, order: order},
variables: %{confirmation_token: "abc123"}
}
Context.template_assigns(context)
# => %{user: user, order: order, confirmation_token: "abc123"}