documentation/dsls/DSL:-Ash.Notifier.PubSub.cheatmd

# DSL: Ash.Notifier.PubSub

A pubsub notifier extension.


## pub_sub
A section for configuring how resource actions are published over pubsub

See the [PubSub](/documentation/topics/pub_sub.md) and [Notifiers](/documentation/topics/notifiers.md) guide for more.


### Nested DSLs
 * [publish](#pub_sub-publish)
 * [publish_all](#pub_sub-publish_all)


### Examples
```
pub_sub do
  module MyEndpoint
  prefix "post"
  broadcast_type :phoenix_broadcast

  publish :destroy, ["foo", :id]
  publish :update, ["bar", :name] event: "name_change"
  publish_all :create, "created"
end

```




### Options
| Name | Type | Default | Docs |
| ---  | ---  | ---     | ---  |
| `module`* | `atom` |  | The module to call `broadcast/3` on e.g module.broadcast(topic, event, message). |
| `prefix` | `String.t` |  | A prefix for all pubsub messages, e.g `users`. A message with `created` would be published as `users:created` |
| `broadcast_type` | `:notification \| :phoenix_broadcast \| :broadcast` | `:notification` | What shape the event payloads will be in. See |
| `name` | `atom` |  | A named pub sub to pass as the first argument to broadcast. |



## pub_sub.publish
```elixir
publish action, topic
```


Configure a given action to publish its results over a given topic.

See the [PubSub](/documentation/topics/pub_sub.md) and [Notifiers](/documentation/topics/notifiers.md) guides for more.




### Examples
```
publish :create, "created"
```

```
publish :assign, "assigned"

```



### Arguments
| Name | Type | Default | Docs |
| ---  | ---  | ---     | ---  |
| `action`* | `atom` |  | The name of the action that should be published |
| `topic`* | ``any`` |  | The topic to publish |
### Options
| Name | Type | Default | Docs |
| ---  | ---  | ---     | ---  |
| `event` | `String.t` |  | The name of the event to publish. Defaults to the action name |
| `dispatcher` | `atom` |  | The module to use as a dispatcher. If none is set, the pubsub module provided is used. |





### Introspection

Target: `Ash.Notifier.PubSub.Publication`

## pub_sub.publish_all
```elixir
publish_all type, topic
```


Works just like `publish`, except that it takes a type
and publishes all actions of that type

See the [PubSub](/documentation/topics/pub_sub.md) and [Notifiers](/documentation/topics/notifiers.md) guides for more.




### Examples
```
publish_all :create, "created"
```



### Arguments
| Name | Type | Default | Docs |
| ---  | ---  | ---     | ---  |
| `type` | `:create \| :update \| :destroy` |  | Publish on all actions of a given type |
| `topic`* | ``any`` |  | The topic to publish |
### Options
| Name | Type | Default | Docs |
| ---  | ---  | ---     | ---  |
| `action` | `atom` |  | The name of the action that should be published |
| `event` | `String.t` |  | The name of the event to publish. Defaults to the action name |
| `dispatcher` | `atom` |  | The module to use as a dispatcher. If none is set, the pubsub module provided is used. |





### Introspection

Target: `Ash.Notifier.PubSub.Publication`