Current section

Files

Jump to
live_navigator lib navigator storage.ex
Raw

lib/navigator/storage.ex

defmodule Navigator.Storage do
@moduledoc """
Navigator storage behaviour
"""
alias Navigator.Page
@type cleanup_key :: {Navigator.session_id, Navigator.tab}
@callback update([Navigator.t | Page.t]) :: :ok
@callback select(Navigator) :: [Navigator.t]
@callback select(Page) :: [Page.t]
@callback cleanup([cleanup_key]) :: :ok
@callback touch(Navigator | Page, list) :: :ok
@app :navigator
@storage Application.compile_env(@app, :storage)
if is_nil(@storage) do
@spec update([Navigator.t | Page.t]) :: :ok
def update(_entities), do: :ok
@spec select(Navigator) :: [Navigator.t]
@spec select(Page) :: [Page.t]
def select(_table), do: []
@spec cleanup([cleanup_key]) :: :ok
def cleanup(_keys), do: :ok
@spec touch(Navigator | Page, list) :: :ok
def touch(_table, _keys), do: :ok
else
@spec update([Navigator.t | Page.t]) :: :ok
defdelegate update(entities), to: @storage
@spec select(Navigator) :: [Navigator.t]
@spec select(Page) :: [Page.t]
defdelegate select(table), to: @storage
@spec cleanup([cleanup_key]) :: :ok
defdelegate cleanup(keys), to: @storage
@spec touch(Navigator | Page, list) :: :ok
defdelegate touch(table, keys), to: @storage
end
end