Current section
Files
Jump to
Current section
Files
lib/plug/pagecache/adapter/agent.ex
defmodule Plug.PageCache.Adapter.Agent do
@moduledoc """
PageCache adapter for agent style storage.
"""
use Plug.PageCache.Adapter
# Adapter lifecycle
def init(opts) do
{ :ok, %{ auto_expire: opts[:auto_expire] || 0,
entries: %{} }}
end
# Adapter methods
def clean(state) do
{ %{ state | entries: %{} }, :ok }
end
def load(state, path) do
{ state, load_unexpired(path, state) }
end
def remove(state, path) do
{ %{ state | entries: Map.delete(state.entries, path) }, :ok }
end
def save(state, path, page) do
entry = { page, :os.system_time(:seconds) + state.auto_expire }
{ %{ state | entries: Map.put(state.entries, path, entry) }, :ok }
end
# Internal methods
defp load_unexpired(path, %{ auto_expire: 0 } = state) do
{ page, _ } = Map.get(state.entries, path, { nil, 0 })
page
end
defp load_unexpired(path, state) do
{ page, expire_after } = Map.get(state.entries, path, { nil, 0 })
case :os.system_time(:seconds) <= expire_after do
true -> page
false -> nil
end
end
end