# Prism
Prism is a simple local message broker.
## Installation
The package can be installed by adding `prism` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:prism, "~> 0.1"}
]
end
```
## Documentation
Please see [HexDocs](https://hexdocs.pm/prism) for additional documentation.
## Getting Started
With Prism, you can subscribe handlers to topics. When an event is published
to the broker - any subscriber of that topic will have its handler function called.
This permits simple event-driven mechanisms to be implemented within applications.
Prism avoids the use of processes when publishing events to subscribers. In that
sense - handlers are all invoked syncronously withinin the publishing process. If
you wish something to be done "out of band" from the publisher - you will be
resposibsle for the implementation.
```elixir
defmodule MyBroker do
# Adds the child_spec/1 callback required to use under a Supervisor
use Prism
def start_link(subscribers \\ []) do
Prism.start_link(name: __MODULE__, subscribers: subscribers)
end
def subscribe(handler_id, topic_or_topics, handler) do
Prism.subscribe(__MODULE__, handler_id, topic_or_topics, handler)
end
def publish(topic, event) do
Prism.publish(__MODULE__, topic, event)
end
end
defmodule Callback do
def call(topic, event) do
IO.inspect(topic)
IO.inspect(event)
:ok
end
end
# Start the broker
MyBroker.start_link()
# Subscribe a handler
MyBroker.subscribe("my_handler", [:my, :topic], &Callback.call/2)
# Publish to a topic
MyBroker.publish([:my, :topic], "hello")
```