You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
671 B
Elixir
29 lines
671 B
Elixir
7 years ago
|
defmodule Asciinema.TrailingFormat do
|
||
|
@known_extensions ["json", "png", "gif"]
|
||
|
|
||
|
def init(opts), do: opts
|
||
|
|
||
|
def call(conn, _opts) do
|
||
|
case conn.path_info do
|
||
|
[] ->
|
||
|
conn
|
||
|
path_info ->
|
||
|
%{conn | path_info: rewrite_path_info(path_info)}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp rewrite_path_info(path_info) do
|
||
|
path_info
|
||
|
|> List.last
|
||
|
|> String.split(".")
|
||
|
|> Enum.reverse
|
||
|
|> case do
|
||
|
[format | fragments] when format in @known_extensions ->
|
||
|
id = fragments |> Enum.reverse |> Enum.join(".")
|
||
|
path_info |> List.replace_at(-1, id) |> List.insert_at(-1, format)
|
||
|
_ ->
|
||
|
path_info
|
||
|
end
|
||
|
end
|
||
|
end
|