Current section
13 Versions
Jump to
Current section
13 Versions
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, |