json-schema_builder 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4fe5462595486f84e355404b11e92a99f03a564
|
4
|
+
data.tar.gz: 3f0940bd48c40ddf384e7456f6c47dab2a8b77ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b73789a2efa50e9780bcd9b2f88d84456ff74e02a380d25c69c01506e81d41195025583314407208fce6cfb6ea38542e0834cd7d2379f7b2482563f585a7ed5c
|
7
|
+
data.tar.gz: 3b6a8c0bc16cd8561398682e6485802c3b839e7a3c7a6771b7bf29ca3a25a09ba19bc3eb50bc75a71178565ecacf5d755fb9b9e9c893c450ac581cf9338ef5e8
|
@@ -27,7 +27,7 @@ module JSON
|
|
27
27
|
|
28
28
|
def _customize_errors(error_objects)
|
29
29
|
_flatten_errors(error_objects).each do |error|
|
30
|
-
entities =
|
30
|
+
entities = _entities_handling(error)
|
31
31
|
entities.each do |entity|
|
32
32
|
handler = entity.error
|
33
33
|
case handler
|
@@ -47,6 +47,16 @@ module JSON
|
|
47
47
|
[error_object, _flatten_errors(sub_errors)]
|
48
48
|
end.flatten
|
49
49
|
end
|
50
|
+
|
51
|
+
def _entities_handling(error)
|
52
|
+
entities = Array(fragments[error[:fragment]]).select(&:error)
|
53
|
+
if error[:failed_attribute] == "Required"
|
54
|
+
property = error[:message].match(/required property of '([^']+?)'/)[1]
|
55
|
+
property_fragment = "#{error[:fragment]}/#{property}".gsub(%r(//), "/")
|
56
|
+
entities |= Array(fragments[property_fragment]).select(&:error)
|
57
|
+
end
|
58
|
+
entities
|
59
|
+
end
|
50
60
|
end
|
51
61
|
end
|
52
62
|
end
|
@@ -19,6 +19,29 @@ RSpec.describe Examples::CustomErrors, type: :integration do
|
|
19
19
|
expect(errors).to include hash_including(message: %q(#/settings requires properties ["name"]))
|
20
20
|
end
|
21
21
|
|
22
|
+
context "with property-specific required errors" do
|
23
|
+
let(:schema) { klass.example3 }
|
24
|
+
|
25
|
+
it "customizes required object errors" do
|
26
|
+
errors = schema.fully_validate({ }, customize_errors: true)
|
27
|
+
expect(errors.length).to eq(1)
|
28
|
+
expect(errors).to include hash_including(message: "Settings is required")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "customizes required object errors" do
|
32
|
+
errors = schema.fully_validate({ settings: {} }, customize_errors: true)
|
33
|
+
expect(errors.length).to eq(2)
|
34
|
+
expect(errors).to include hash_including(message: "Name is required")
|
35
|
+
expect(errors).to include hash_including(message: "Other is required")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "customizes required object errors" do
|
39
|
+
errors = schema.fully_validate({ settings: { name: "name" } }, customize_errors: true)
|
40
|
+
expect(errors.length).to eq(1)
|
41
|
+
expect(errors).to include hash_including(message: "Other is required")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
22
45
|
it "merges error handlers" do
|
23
46
|
schema = klass.example.schema.merge(klass.example2.schema)
|
24
47
|
errors = schema.fully_validate({ settings: { other: 123 } }, customize_errors: true)
|
@@ -5,23 +5,25 @@ module Examples
|
|
5
5
|
def required_error
|
6
6
|
lambda do |entities, error|
|
7
7
|
if error[:failed_attribute] == "Required"
|
8
|
-
required = entities.map(&:required).inject(:+).uniq
|
8
|
+
required = entities.map(&:required).compact.inject(:+).uniq
|
9
9
|
error[:message] = "#{error[:fragment]} requires properties #{required.map(&:to_s).inspect}"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def type_error(message)
|
15
15
|
lambda do |entities, error|
|
16
|
-
error[:
|
16
|
+
if error[:failed_attribute].start_with?("Type")
|
17
|
+
error[:message] = message
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
def example
|
21
23
|
object error: required_error do
|
22
|
-
object :user, required: true, error:
|
24
|
+
object :user, required: true, error: type_error("Custom object error")
|
23
25
|
object :settings, error: required_error do
|
24
|
-
string :name, required: true, error: "Custom name error"
|
26
|
+
string :name, required: true, error: type_error("Custom name error")
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -29,7 +31,16 @@ module Examples
|
|
29
31
|
def example2
|
30
32
|
object do
|
31
33
|
object :settings, error: required_error do
|
32
|
-
string :other, required: true, error: "Other error"
|
34
|
+
string :other, required: true, error: type_error("Other error")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def example3
|
40
|
+
object do
|
41
|
+
object :settings, required: true, error: "Settings is required" do
|
42
|
+
string :name, required: true, error: "Name is required"
|
43
|
+
string :other, required: true, error: "Other is required"
|
33
44
|
end
|
34
45
|
end
|
35
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Parrish
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|