Packages

Plug for full page response caching

Current section

Files

Jump to
plug_pagecache lib plug pagecache adapter ets.ex
Raw

lib/plug/pagecache/adapter/ets.ex

defmodule Plug.PageCache.Adapter.ETS do
@moduledoc """
PageCache adapter for ETS storage.
"""
use Plug.PageCache.Adapter
require Logger
def init(opts) do
ets_tid = case opts[:table] do
nil ->
Logger.warn "No ETS table configured for cache '#{ opts[:name] }'." <>
" Cache will be noop!"
nil
table -> :ets.new(table, [ :protected, :named_table, :set ])
end
{ :ok, %{ ets_tid: ets_tid }}
end
def clean(state) do
_ = :ets.delete_all_objects(state.ets_tid)
{ state, :ok }
end
def load(state, path) do
case :ets.lookup(state.ets_tid, path) do
[{ ^path, page }] -> { state, page }
_ -> { state, nil }
end
end
def remove(state, path) do
_ = :ets.delete(state.ets_tid, path)
{ state, :ok }
end
def save(state, path, page) do
_ = :ets.insert(state.ets_tid, { path, page })
{ state, :ok }
end
end