zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

result.ex (1338B)


      1 defmodule Absinthe.Phase.Document.Validation.Result do
      2   @moduledoc false
      3 
      4   # Collects validation errors into the result.
      5 
      6   alias Absinthe.{Blueprint, Phase}
      7 
      8   use Absinthe.Phase
      9 
     10   @doc """
     11   Run the validation.
     12   """
     13   @spec run(Blueprint.t(), Keyword.t()) :: Phase.result_t()
     14   def run(input, options \\ []) do
     15     do_run(input, Map.new(options))
     16   end
     17 
     18   @spec do_run(Blueprint.t(), %{result_phase: Phase.t(), jump_phases: boolean}) ::
     19           Phase.result_t()
     20   def do_run(input, %{result_phase: abort_phase, jump_phases: jump}) do
     21     {input, errors} = Blueprint.prewalk(input, [], &handle_node/2)
     22     errors = :lists.reverse(errors)
     23     result = put_in(input.execution.validation_errors, errors)
     24 
     25     case {errors, jump} do
     26       {[], _} ->
     27         {:ok, result}
     28 
     29       {_, false} ->
     30         {:error, result}
     31 
     32       _ ->
     33         {:jump, result, abort_phase}
     34     end
     35   end
     36 
     37   # Collect the validation errors from nodes
     38   @spec handle_node(Blueprint.node_t(), [Phase.Error.t()]) ::
     39           {Blueprint.node_t(), [Phase.Error.t()]}
     40   defp handle_node(%{errors: errs} = node, errors) do
     41     {node, :lists.reverse(errs) ++ errors}
     42   end
     43 
     44   defp handle_node(%{raw: raw} = node, errors) do
     45     {_, errors} = Blueprint.prewalk(raw, errors, &handle_node/2)
     46     {node, errors}
     47   end
     48 
     49   defp handle_node(node, acc), do: {node, acc}
     50 end