Packages
tableau
0.23.0
0.30.0
0.29.0
0.28.0
0.27.1
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
Static site generator for elixir
Current section
Files
Jump to
Current section
Files
lib/tableau_dev_server/index_html.ex
defmodule TableauDevServer.IndexHtml do
@moduledoc false
@behaviour Plug
@doc ~S"""
Initialize plug options
- at: The request path to reach for static assets, defaults to "/"
- default_file: Filename to serve when request path is a directory, defaults to "index.html"
## Example
iex> Plug.Static.IndexHtml.init(at: "/doc")
[matcher: ~r|^/doc/(.*/)?$|, default_file: "index.html"]
"""
def init(opts), do: Keyword.merge([default_file: "index.html"], opts)
@doc """
Invokes the plug, adding default_file to request_path and path_info for directory paths
## Example
iex> opts = Plug.Static.IndexHtml.init(at: "/doc")
iex> conn = %Plug.Conn{request_path: "/doc/a/", path_info: ["doc", "a"]}
iex> Plug.Static.IndexHtml.call(conn, opts) |> Map.take([:request_path, :path_info])
%{path_info: ["doc", "a", "index.html"], request_path: "/doc/a/index.html"}
"""
def call(conn, default_file: filename) do
case Path.extname(conn.request_path) do
"" ->
%{
conn
| request_path: String.replace_suffix(conn.request_path, "/", "") <> "/#{filename}",
path_info: conn.path_info ++ [filename]
}
_ ->
conn
end
end
end