lib/exvcr/adapter/hackney/store.ex

defmodule ExVCR.Adapter.Hackney.Store do
  @moduledoc """
  Provides a datastore for temporary saving client key (Reference) and body relationship.
  """

  @doc """
  Initialize the datastore.
  """
  def start do
    if :ets.info(table()) == :undefined do
      :ets.new(table(), [:set, :public, :named_table])
    end
    :ok
  end

  @doc """
  Returns value (body) from the key (client key).
  """
  def get(key) do
    start()
    :ets.lookup(table(), key)[key]
  end

  @doc """
  Set value (body) with the key (client key).
  """
  def set(key, value) do
    start()
    :ets.insert(table(), {key, value})
    value
  end

  @doc """
  Set key (client key).
  """
  def delete(key) do
    start()
    :ets.delete(table(), key)
  end

  defp table do
    "exvcr_hackney#{inspect self()}" |> String.to_atom
  end
end