Current section
Files
Jump to
Current section
Files
lib/db.ex
defmodule AcmeEx.Db do
use GenServer
def start_link(_), do: GenServer.start_link(__MODULE__, nil, name: __MODULE__)
def init(_) do
:ets.new(__MODULE__, [:named_table, :public, read_concurrency: true, write_concurrency: true])
{:ok, nil}
end
def create(key, obj \\ nil) do
case :ets.insert_new(__MODULE__, {key, obj}) do
true -> key
false -> raise "Unable to store #{key |> Kernel.inspect()}"
end
end
def reset(), do: :ets.delete_all_objects(__MODULE__)
def store(key, obj), do: :ets.insert(__MODULE__, {key, obj})
def fetch(key), do: :ets.lookup(__MODULE__, key) |> clean(key)
def pop(key), do: :ets.take(__MODULE__, key) |> clean(key)
defp clean(answer, key) do
case answer do
[{^key, value}] -> {:ok, value}
_ -> {:error, "Unable to locate #{key |> Kernel.inspect()}"}
end
end
end