lib/mosql/store.ex

defmodule Mosql.Store do
  use Agent

  require Logger

  @moduledoc """
  Agent based key value store to store schema mapping between mongo collection and
  SQL table
  """
  def start_link(_) do
    Logger.info("Starting schema store using Agent")
    Agent.start_link(fn -> %{} end, name: __MODULE__)
  end

  def set(key, value) do
    Agent.update(__MODULE__, &Map.put(&1, key, value))
  end

  def get(key) do
    Agent.get(__MODULE__, fn state ->
      case Map.fetch(state, key) do
        {:ok, r} -> r
        :error -> nil
      end
    end)
  end

  def get_if_exists(key, default_val) do
    Agent.get(__MODULE__, &Map.get(&1, key, default_val))
  end

  def get_all_keys() do
    Agent.get(__MODULE__, &Map.keys/1)
  end
end