Current section

13 Versions

Jump to

Compare versions

4 files changed
+19 additions
-19 deletions
  @@ -16,7 +16,7 @@ It can be used both in test and production environments.
16 16 ```elixir
17 17 def deps do
18 18 [
19 - {:plumbapius, "~> 0.14.0"}
19 + {:plumbapius, "~> 0.15.0"}
20 20 ]
21 21 end
22 22 ```
  @@ -55,4 +55,4 @@
55 55 {<<"optional">>,false},
56 56 {<<"repository">>,<<"hexpm">>},
57 57 {<<"requirement">>,<<"~> 0.1.9">>}]]}.
58 - {<<"version">>,<<"0.14.1">>}.
58 + {<<"version">>,<<"0.15.0">>}.
  @@ -45,30 +45,30 @@ defmodule Plumbapius.Request do
45 45 end
46 46 end
47 47
48 - defmodule NotFoundSchemaForReqestBodyError do
49 - defexception []
50 -
51 - @impl true
52 - def message(_exception) do
53 - "not found schema for reqest body"
54 - end
55 - end
56 -
57 48 alias Plumbapius.Request
58 49
59 - @spec validate_body(Request.Schema.t(), map()) :: :ok | {:error, list()}
50 + @spec validate_body(Request.Schema.t(), map()) ::
51 + :ok | {:error, %{ExJsonSchema.Schema.Root.t() => ExJsonSchema.Validator.errors()}}
60 52 def validate_body(request_schema, request_body) do
61 53 validate_request_body(request_schema.bodies, request_body)
62 54 end
63 55
64 - defp validate_request_body([], _request_body) do
65 - {:error, %NotFoundSchemaForReqestBodyError{}}
56 + defp validate_request_body(bodies, request_body) do
57 + do_validate_request_body(bodies, request_body, %{})
66 58 end
67 59
68 - defp validate_request_body([body_schema | body_schemes], request_body) do
69 - case ExJsonSchema.Validator.validate(body_schema, request_body) do
70 - :ok -> :ok
71 - {:error, _} -> validate_request_body(body_schemes, request_body)
60 + defp do_validate_request_body([], _request_body, errors) do
61 + {:error, errors}
62 + end
63 +
64 + defp do_validate_request_body([body_schema | body_schemes], request_body, errors) do
65 + case ExJsonSchema.Validator.validate(body_schema, request_body, error_formatter: false) do
66 + :ok ->
67 + :ok
68 +
69 + {:error, validation_errors} ->
70 + errors = Map.put(errors, body_schema, validation_errors)
71 + do_validate_request_body(body_schemes, request_body, errors)
72 72 end
73 73 end
  @@ -4,7 +4,7 @@ defmodule Plumbapius.MixProject do
4 4 def project do
5 5 [
6 6 app: :plumbapius,
7 - version: "0.14.1",
7 + version: "0.15.0",
8 8 elixir: "~> 1.10",
9 9 deps: deps(),
10 10 start_permanent: Mix.env() == :prod,