Packages
event_bus
0.3.1
1.7.0
1.6.2
1.6.1
1.6.0
retired
1.5.2
retired
1.5.1
retired
1.5.0
retired
1.4.4
retired
1.4.3
retired
1.4.2
retired
1.4.1
retired
1.4.0
retired
1.3.8
retired
1.3.7
retired
1.3.6
retired
1.3.5
retired
1.3.4
retired
1.3.3
retired
1.3.2
retired
1.3.1
retired
1.3.0
retired
1.2.0
retired
1.1.3
retired
1.1.2
retired
1.1.1
retired
1.1.0
retired
1.0.0
retired
1.0.0-beta4
retired
1.0.0-beta3
retired
1.0.0-beta2
retired
1.0.0-beta1
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.1
retired
0.6.0
retired
0.5.0
retired
0.4.1
retired
0.4.0
retired
0.3.1
retired
0.3.0
retired
0.2.1
retired
0.2.0
retired
0.1.0
retired
Traceable, extendable and minimalist event bus implementation for Elixir with built-in event store and event watcher based on ETS
Retired package: Deprecated
Current section
Files
Jump to
Current section
Files
README.md
# EventBus
[](https://travis-ci.org/mustafaturan/event_bus)
Simple event bus implementation using ETS as an event store.
## Installation
The package can be installed by adding `event_bus` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:event_bus, "~> 0.3.1"}]
end
```
## Usage
Register events in `config.exs` (recommended way)
In your config.exs you can register events
```elixir
config :event_bus, events: [:message_received, :another_event_occured]
```
Register events on demand
```elixir
EventBus.register_event(:my_test_event_occured)
```
Subscribe to the 'event bus' with listener and list of given topics, EventManager will match with Regex
```elixir
# to catch every event topic
EventBus.subscribe({MyEventListener, [".*"]})
# to catch specific topics
EventBus.subscribe({MyEventListener, ["purchase_", "booking_confirmed$", "flight_passed$"]})
```
Unsubscribe from the 'event bus'
```elixir
EventBus.unsubscribe(MyEventListener)
```
List subscribers
```elixir
EventBus.subscribers()
```
Notify all subscribers with any type of data
```elixir
EventBus.notify(:hello_received, %{message: "Hello"})
EventBus.notify(:bye_received, [user_id: 1, goal: "exit"])
```
Fetch event data
```elixir
EventBus.fetch_event_data({:bye_received, event_key})
```
Mark as completed on Event Watcher
```elixir
EventBus.mark_as_completed({MyEventListener, :bye_received, event_key})
```
Mark as skipped on Event Watcher
```elixir
EventBus.mark_as_skipped({MyEventListener, :bye_received, event_key})
```
### Sample Listener Implementation
```elixir
defmodule MyEventListener do
...
def process({topic, key} = event_shadow) do
GenServer.cast(__MODULE__, event_shadow)
:ok
end
...
def handle_cast({:bye_received, event_key}, state) do
event_data = EventBus.fetch_event_data({:bye_received, event_key})
# do sth with event_data
# update the watcher!
EventBus.mark_as_completed({__MODULE__, :bye_received, event_key})
...
{:noreply, state}
end
def handle_cast({:hello_received, event_key}, state) do
event_data = EventBus.fetch_event_data({:hello_received, event_key})
# do sth with event_data
# update the watcher!
EventBus.mark_as_completed({__MODULE__, :hello_received, event_key})
...
{:noreply, state}
end
def handle_cast({topic, key}, state) do
EventBus.mark_as_skipped({__MODULE__, topic, key})
{:noreply, state}
end
...
end
```
### Module Documentation
Module docs can be found at [https://hexdocs.pm/event_bus](https://hexdocs.pm/event_bus).
## Contributing
### Issues, Bugs, Documentation, Enhancements
1. Fork the project
2. Make your improvements and write your tests(make sure you covered all the cases).
3. Make a pull request.
## License
MIT