Slide 32
Slide 32 text
defmodule Provided.Parse do
defexception Error, form: [] do
def message(exception) do
"Amrita could not understand your `provided`:\n" <>
" " <> Macro.to_string(exception.form) <> "\n" <>
" Make sure it uses this format: [Module.fun |> :return_value]"
end
end
def prerequisites(forms) do
prerequisites = Enum.map(forms, fn form -> extract(form) end)
Provided.Prerequisites.new(prerequisites)
end
defp extract({:|>, _, [{fun, _, args}, value]}) do
{ module_name, function_name } = extract(fun)
{ module_name, function_name, args, value }
end
defp extract({:., _, [ns, method_name]}) do
{ extract(ns), method_name }
end
defp extract({:__aliases__, _, ns}) do
Module.concat ns
end
defp extract(form) do
raise Error.new(form: form)
end
end