Packages

Simple key-value persistence for Hedwig responders, `Hedwig.Brain` stores lists of arbitrary terms under binary keys.

Current section

Files

Jump to
hedwig_brain lib brain process_store.ex
Raw

lib/brain/process_store.ex

defmodule Hedwig.Brain.ProcessStore do
@moduledoc """
A process-based storage mechanism for the Brain. Does not persist to disk.
"""
@behaviour Hedwig.Brain.Store
def start_link do
Agent.start_link(fn -> %{} end, name: __MODULE__)
end
@spec set(String.t, any) :: any
def set(key, value) do
Agent.update(__MODULE__, &Map.put(&1, key, value))
end
@spec get(String.t) :: any
def get(key) do
Agent.get(__MODULE__, &Map.get(&1, key, []))
end
@spec delete(String.t) :: any
def delete(key) do
Agent.update(__MODULE__, &Map.delete(&1, key))
end
@spec add(String.t, any) :: any
def add(key, item) do
Agent.update(__MODULE__, fn (state) ->
Map.update(state, key, [item], fn (list) ->
list ++ [item]
end)
end)
end
@spec remove(String.t, any) :: any
def remove(key, item) do
Agent.update(__MODULE__, fn (state) ->
Map.update(state, key, [], &List.delete(&1, item))
end)
end
@spec at_index(String.t, integer) :: any
def at_index(key, index) do
Agent.get(__MODULE__, fn (state) ->
state
|> Map.get(key)
|> Enum.at(index)
end)
end
end