Ash.Notifier.PubSub (ash v1.37.2) View Source
A pubsub notifier extension
Table of Contents
- pub_sub
- publish
- publish_all
pub_sub
A section for configuring how resource actions are published over pubsub
Examples:
pub_sub do
module MyEndpoint
prefix "post"
publish :destroy, ["foo", :id]
publish :update, ["bar", :name] event: "name_change"
publish_all :create, "created"
end
:module
- Required. The module to callbroadcast/3
on e.g module.broadcast(topic, event, message).:prefix
- A prefix for all pubsub messages, e.gusers
. A message withcreated
would be published asusers:created
publish
Configure a given action to publish its results over a given topic.
If you have multiple actions with the same name (only possible if they have different types),
use the type
option, to specify which type you are referring to. Otherwise the message will
be broadcast for all actions with that name.
To include attribute values of the resource in the message, pass a list
of strings and attribute names. They will ultimately be joined with :
.
For example:
prefix "user"
publish :create, ["created", :user_id]
This might publish a message to "user:created:1"" for example.
For updates, if the field in the template is being changed, a message is sent
to both values. So if you change user 1
to user 2
, the same message would
be published to user:updated:1
and user:updated:2
. If there are multiple
attributes in the template, and they are all being changed, a message is sent for
every combination of substitutions.
Template parts
Templates may contain lists, in which case all combinations of values in the list will be used. Add
nil
to the list if you want to produce a pattern where that entry is ommitted.
The atom :_tenant
may be used. If the changeset has a tenant set on it, that
value will be used, otherwise that combination of values is ignored. For example:
The atom :_skip
may be used. It only makes sense to use it in the context of a list of alternatives,
and adds a pattern where that part is skipped.
publish :updated, [[:team_id, :_tenant], "updated", [:id, nil]]
Would produce the following messages, given a team_id
of 1, a tenant
of org_1
, and an id
of 50
:
"1:updated:50"
"1:updated"
"org_1:updated:50"
"org_1:updated"
Introspection Target:
Ash.Notifier.PubSub.Publication
Examples:
publish :create, "created"
publish :assign, "assigned"
:action
- Required. The name of the action that should be published:topic
- Required. The topic to publish:event
- The name of the event to publish. Defaults to the action name
publish_all
Works just like publish
, except that it takes a type
and publishes all actions of that type
Introspection Target:
Ash.Notifier.PubSub.Publication
Examples:
publish_all :create, "created"
:type
- In the case of multiple actions with the same name, you may need to provide the action type as well.:action
- The name of the action that should be published:topic
- Required. The topic to publish:event
- The name of the event to publish. Defaults to the action name