Current section

Files

Jump to
mime lib mime.ex
Raw

lib/mime.ex

defmodule Mime do
@default "application/octet-stream"
@doc false
def __using__(_opts) do
quote do
import Mime
end
end
stream = File.stream! Path.expand("../priv/mime.types", __DIR__)
mapping = stream
|> Enum.reduce([], fn(line, acc) ->
if String.match?(line, ~r/^[#\n]/) do
acc
else
[type | exts] = line |> String.strip |> String.split
[{type, exts} | acc]
end
end)
|> Enum.reverse
def valid?(t) do
is_list entry(t)
end
def extensions(t) do
entry(t) || []
end
for {type, exts} <- mapping do
for ext <- exts do
def type(unquote(ext)), do: unquote(type)
end
end
def type(_), do: @default
for {type, exts} <- mapping do
defp entry(unquote(type)), do: unquote(exts)
end
defp entry(_), do: nil
def version do
Mix.Project.config[:version]
end
end