Packages
mazurka
0.3.14
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
hypermedia api toolkit
Current section
Files
Jump to
Current section
Files
lib/mazurka/resource/validation.ex
defmodule Mazurka.Resource.Validation.Failure do
defexception [:message]
end
defmodule Mazurka.Resource.Validation do
defmacro validation(block, error_handler \\ nil)
defmacro validation([do: block], error_handler) do
Mazurka.Compiler.Utils.register(__MODULE__, block, error_handler)
end
defmacro validation(block, error_handler) do
Mazurka.Compiler.Utils.register(__MODULE__, block, error_handler)
end
def compile(conditions) do
conditions = Enum.map(conditions || [], &(handle_condition(&1)))
quote do
conditions = unquote(conditions)
^Mazurka.Resource.Validation.handle_error(conditions)
end
end
def compile(conditions, _) do
conditions
end
defp handle_condition({block, {error_handler, _, _}}) when is_atom(error_handler) do
compile_condition(block, error_handler)
end
defp handle_condition({block, nil}) do
compile_condition(block, :error)
end
defp compile_condition(block, error_handler) do
code = Macro.to_string(block)
message = "Validation failure of #{inspect(code)}"
quote do
condition = unquote(block)
if !condition do
error = %Mazurka.Resource.Validation.Failure{message: unquote(message)}
message = %__MODULE__.unquote(error_handler){error: error}
%Mazurka.Resource.Error{
message: message
}
end
end
end
def handle_error(errors) do
Enum.find(errors, fn
(nil) -> false
(_) -> true
end)
end
end