Packages

Flex is a lightweight, Flask-inspired web framework for Elixir.

Current section

Files

Jump to
flex_web lib flex template_cache.ex
Raw

lib/flex/template_cache.ex

defmodule Flex.TemplateCache do
use GenServer
require Logger
def start_link(_opts) do
GenServer.start_link(__MODULE__, %{}, name: __MODULE__)
end
def init(state) do
{:ok, state}
end
def get_template(path) do
if Mix.env() == :dev do
# In development, always read from file
Logger.info("Reading template from file: #{path}")
File.read!(path)
else
GenServer.call(__MODULE__, {:get_template, path})
end
end
def invalidate(path) do
GenServer.cast(__MODULE__, {:invalidate, path})
end
def handle_call({:get_template, path}, _from, state) do
case Map.get(state, path) do
nil ->
Logger.info("Loading template: #{path}")
content = File.read!(path)
{:reply, content, Map.put(state, path, content)}
content ->
{:reply, content, state}
end
end
def handle_cast({:invalidate, path}, state) do
Logger.info("Invalidating template: #{path}")
{:noreply, Map.delete(state, path)}
end
end