Current section
Files
Jump to
Current section
Files
lib/liquid/file_system.ex
defmodule Liquid.BlankFileSystem do
def read_template_file(_, _, _) do
{ :error, "This liquid context does not allow includes." }
end
end
defmodule Liquid.LocalFileSystem do
def read_template_file(_, _, _) do
{ :ok, "" }
end
def full_path(root, template_path) do
full_path = if Regex.match?(~r/\//, template_path) do
root |> Path.join(template_path |> Path.dirname)
|> Path.join("_#{template_path |> Path.basename}.liquid")
else
root |> Path.join("_#{template_path}.liquid")
end
cond do
!Regex.match?(~r/^[^.\/][a-zA-Z0-9_\/]+$/, template_path) ->
{ :error, "Illegal template name '#{template_path}'" }
!Regex.match?(~r/^#{Path.expand(root)}/, Path.expand(full_path)) ->
{ :error, "Illegal template path '#{Path.expand(full_path)}'" }
true -> { :ok, full_path }
end
end
end
defmodule Liquid.FileSystem do
@moduledoc """
Allows to set up the file system and read the template file from it
"""
@doc """
Get full file system path
"""
def full_path(path) do
case lookup do
nil -> { :error, "No file system defined" }
{ mod, root } -> mod.full_path(root, path)
end
end
def read_template_file(path, options \\ []) do
case lookup do
nil -> { :error, "No file system defined" }
{ mod, root } -> mod.read_template_file(root, path, options)
end
end
def register(module, path \\ "") do
Application.put_env(:liquid, :file_system, {module, path})
end
def lookup do
Application.get_env(:liquid, :file_system)
end
end