Packages
event_bus
1.1.2
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/store.ex
defmodule EventBus.Service.Store do
@moduledoc false
alias EventBus.Model.Event
alias :ets, as: Ets
@prefix "eb_es_"
@doc false
@spec register_topic(String.t() | atom()) :: no_return()
def register_topic(topic) do
table_name = table_name(topic)
all_tables = :ets.all()
unless Enum.any?(all_tables, fn table -> table == table_name end) do
opts = [:set, :public, :named_table, {:read_concurrency, true}]
Ets.new(table_name, opts)
end
end
@doc false
@spec unregister_topic(String.t() | atom()) :: no_return()
def unregister_topic(topic) do
table_name = table_name(topic)
all_tables = :ets.all()
if Enum.any?(all_tables, fn table -> table == table_name end) do
Ets.delete(table_name)
end
end
@doc false
@spec fetch({atom(), String.t() | integer()}) :: any()
def fetch({topic, id}) do
case Ets.lookup(table_name(topic), id) do
[{_, %Event{} = event}] -> event
_ -> nil
end
end
@doc false
@spec delete({atom(), String.t() | integer()}) :: no_return()
def delete({topic, id}) do
Ets.delete(table_name(topic), id)
end
@doc false
@spec save(Event.t()) :: no_return()
def save(%Event{id: id, topic: topic} = event) do
Ets.insert(table_name(topic), {id, event})
:ok
end
defp table_name(topic),
do: :"#{@prefix}#{topic}"
end