Packages
plug
0.4.2
1.20.3
1.20.2
1.20.1
retired
1.20.0
retired
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.6
1.15.5
1.15.4
1.15.3
1.15.2
1.15.1
1.15.0
1.14.2
1.14.1
1.14.0
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
retired
1.13.0
retired
1.12.1
1.12.0
1.11.1
1.11.0
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.0
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
Compose web applications with functions
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/plug/mime.ex
defmodule Plug.MIME do
@moduledoc """
Maps MIME types to file extensions and vice versa.
"""
@default_type "application/octet-stream"
stream = File.stream! Path.expand("mime.types", __DIR__)
mapping = Enum.flat_map(stream, fn (line) ->
if String.match?(line, ~r/^[#\n]/) do
[]
else
[type|exts] = String.split(String.strip(line))
[{type, exts}]
end
end)
@doc """
Returns whether a MIME type is registered.
iex> Plug.MIME.valid?("text/plain")
true
"""
@spec valid?(String.t) :: boolean
def valid?(type) do
is_list entry(type)
end
@doc """
Returns the extensions associated with a MIME type.
iex> Plug.MIME.extensions("text/html")
["html", "htm"]
"""
@spec extensions(String.t) :: [String.t]
def extensions(type) do
entry(type) || []
end
@doc """
Returns the MIME type associated with a file extension.
iex> Plug.MIME.type("txt")
"text/plain"
"""
@spec type(String.t) :: String.t
lc { type, exts } inlist mapping do
lc ext inlist exts do
def type(unquote(ext)), do: unquote(type)
end
end
def type(_ext), do: @default_type
@doc """
Guesses the MIME type based on the path's extension.
iex> Plug.MIME.path("index.html")
"text/html"
"""
@spec path(Path.r) :: String.t
def path(path) do
case Path.extname(path) do
"." <> ext -> type(ext)
_ -> @default_type
end
end
# entry/1
lc { type, exts } inlist mapping do
defp entry(unquote(type)), do: unquote(exts)
end
defp entry(_type), do: nil
end