defmodule Clip.Currents do use GenServer require Logger @purge_interval :timer.minutes(60) def start_link(_) do GenServer.start_link(__MODULE__, %{}, name: ClipCurrents) end def init(opts) do :ets.new(:users_clips, [:set, :named_table, :public]) state = %{ interval: opts[:purge_interval] || @purge_interval, timer: nil } {:ok, schedule_purge(state)} end def set(email_addr, value) do :ets.insert(:users_clips, {email_addr, value}) :ok end def get(email_addr) do cur_val = case :ets.lookup(:users_clips, email_addr) do [{^email_addr, value}] -> value [] -> "" end {:ok, cur_val} end def handle_info(:purge, state) do Logger.info("should purge old entries but doesn't, yet") {:noreply, schedule_purge(state)} end defp schedule_purge(state) do %{state | timer: Process.send_after(self(), :purge, state.interval)} end end