Packages
event_bus
1.4.0
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 - Please prefer always latest minor
Current section
Files
Jump to
Current section
Files
lib/event_bus/services/topic.ex
defmodule EventBus.Service.Topic do
@moduledoc false
alias EventBus.Manager.Observation, as: ObservationManager
alias EventBus.Manager.Store, as: StoreManager
alias EventBus.Manager.Subscription, as: SubscriptionManager
@app :event_bus
@namespace :topics
@modules [StoreManager, SubscriptionManager, ObservationManager]
@doc false
@spec all() :: list(atom())
def all do
Application.get_env(:event_bus, :topics, [])
end
@doc false
@spec exist?(atom()) :: boolean()
def exist?(topic) do
Enum.member?(all(), topic)
end
@doc false
@spec register_from_config() :: no_return()
def register_from_config do
for topic <- all() do
Enum.each(@modules, fn mod -> mod.register_topic(topic) end)
end
end
@doc false
@spec register(atom()) :: no_return()
def register(topic) do
unless exist?(topic) do
Application.put_env(@app, @namespace, [topic | all()], persistent: true)
Enum.each(@modules, fn mod -> mod.register_topic(topic) end)
end
end
@doc false
@spec unregister(atom()) :: no_return()
def unregister(topic) do
if exist?(topic) do
Enum.each(@modules, fn mod -> mod.unregister_topic(topic) end)
topics = List.delete(all(), topic)
Application.put_env(@app, @namespace, topics, persistent: true)
end
end
end