json-schema_builder 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/json/schema_builder/attribute.rb +6 -3
- data/lib/json/schema_builder/entity.rb +12 -0
- data/lib/json/schema_builder/helpers.rb +4 -0
- data/lib/json/schema_builder/object.rb +7 -3
- data/lib/json/schema_builder/version.rb +1 -1
- data/spec/integration/mixed_any_ofs_spec.rb +60 -0
- data/spec/support/examples/mixed_any_ofs.rb +28 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e13b97322fe070943bcaa063cbb11661fd0b576d
|
4
|
+
data.tar.gz: eb0dfeccc78fc5af31b50889af7473a9eeedf566
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9db0f2942aa747cff7b9f94d41fb363ec03f9262d30ad29b313582787fb6aa7eed1168165bd25ebf07bfad0fff83cb73c22ca60ec7e52c9766c0388ddc57a8cb
|
7
|
+
data.tar.gz: 4bea5f690c51c8b3caad56dff0818d72cd20282baf192334e6562597424d220021511ed15794837fb6dabef5128b72822ed657efb6a235852ddd45b85510934a
|
@@ -25,11 +25,14 @@ module JSON
|
|
25
25
|
|
26
26
|
protected
|
27
27
|
|
28
|
-
def _array_attr(attr, values)
|
28
|
+
def _array_attr(attr, values = [])
|
29
29
|
if values.empty?
|
30
|
-
self.schema[attr]
|
30
|
+
self.schema[attr] || []
|
31
31
|
else
|
32
|
-
self.schema[attr]
|
32
|
+
self.schema[attr] ||= []
|
33
|
+
self.schema[attr] += values
|
34
|
+
self.schema[attr].uniq!
|
35
|
+
self.schema[attr]
|
33
36
|
end
|
34
37
|
end
|
35
38
|
|
@@ -36,6 +36,7 @@ module JSON
|
|
36
36
|
initialize_parent_with opts
|
37
37
|
initialize_with opts
|
38
38
|
eval_block &block
|
39
|
+
extract_types
|
39
40
|
end
|
40
41
|
|
41
42
|
def add_fragment(child)
|
@@ -84,6 +85,16 @@ module JSON
|
|
84
85
|
|
85
86
|
protected
|
86
87
|
|
88
|
+
def extract_types
|
89
|
+
any_of(null) if @nullable
|
90
|
+
if any_of.present?
|
91
|
+
everything_else = schema.data.reject { |k, v| k == "anyOf" }
|
92
|
+
return unless everything_else.present?
|
93
|
+
schema.data.select! { |k, v| k == "anyOf" }
|
94
|
+
schema.data["anyOf"].unshift everything_else
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
87
98
|
def initialize_parent_with(opts)
|
88
99
|
@parent = opts.delete :parent
|
89
100
|
if parent
|
@@ -96,6 +107,7 @@ module JSON
|
|
96
107
|
end
|
97
108
|
|
98
109
|
def initialize_with(opts)
|
110
|
+
@nullable = opts.delete :null
|
99
111
|
@options = opts.delete(:root).class.options.to_h if opts[:root]
|
100
112
|
opts.each_pair do |key, value|
|
101
113
|
next if value.nil?
|
@@ -11,14 +11,18 @@ module JSON
|
|
11
11
|
attribute :additional_properties
|
12
12
|
attribute :pattern_properties
|
13
13
|
|
14
|
-
def
|
14
|
+
def initialize_children
|
15
15
|
self.properties = { }
|
16
|
-
|
17
|
-
children.each do |child|
|
16
|
+
children.select(&:name).each do |child|
|
18
17
|
self.properties[child.name] = child.as_json
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
21
|
+
def extract_types
|
22
|
+
initialize_children
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
22
26
|
def required(*values)
|
23
27
|
case values
|
24
28
|
when []
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Examples::MixedAnyOfs, type: :integration do
|
4
|
+
it_behaves_like 'a builder' do
|
5
|
+
let(:expected_json) do
|
6
|
+
{
|
7
|
+
type: "object",
|
8
|
+
properties: {
|
9
|
+
blankable: {
|
10
|
+
anyOf: [
|
11
|
+
{ type: "integer" },
|
12
|
+
{ type: "string" },
|
13
|
+
{ type: "null" }
|
14
|
+
]
|
15
|
+
},
|
16
|
+
nullable: {
|
17
|
+
anyOf: [
|
18
|
+
{
|
19
|
+
type: "object",
|
20
|
+
properties: {
|
21
|
+
test: {
|
22
|
+
type: "string"
|
23
|
+
}
|
24
|
+
}
|
25
|
+
},
|
26
|
+
{ type: "null" }
|
27
|
+
]
|
28
|
+
},
|
29
|
+
flexible: {
|
30
|
+
anyOf: [
|
31
|
+
{ type: "string", minLength: 100 },
|
32
|
+
{ type: "string", maxLength: 0 },
|
33
|
+
{ type: "integer" },
|
34
|
+
{
|
35
|
+
type: "object",
|
36
|
+
properties: {
|
37
|
+
one: {
|
38
|
+
type: "string"
|
39
|
+
}
|
40
|
+
}
|
41
|
+
},
|
42
|
+
{
|
43
|
+
type: "array",
|
44
|
+
items: {
|
45
|
+
type: "object",
|
46
|
+
properties: {
|
47
|
+
one: {
|
48
|
+
type: "string"
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
},
|
53
|
+
{ type: "null" },
|
54
|
+
]
|
55
|
+
},
|
56
|
+
}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Examples
|
2
|
+
class MixedAnyOfs
|
3
|
+
include JSON::SchemaBuilder
|
4
|
+
|
5
|
+
def example
|
6
|
+
object do
|
7
|
+
integer :blankable, any_of: [string], null: true
|
8
|
+
|
9
|
+
object :nullable, null: true do
|
10
|
+
string :test
|
11
|
+
end
|
12
|
+
|
13
|
+
entity :flexible, any_of: [string(min_length: 100), empty_string, integer], null: true do
|
14
|
+
any_of [
|
15
|
+
an_object(self),
|
16
|
+
array { items { an_object(self) } }
|
17
|
+
]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def an_object(root)
|
23
|
+
root.object do
|
24
|
+
string :one
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
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.
|
4
|
+
version: 0.6.0
|
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-01-
|
11
|
+
date: 2018-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- spec/integration/custom_errors_spec.rb
|
207
207
|
- spec/integration/entity_literals_spec.rb
|
208
208
|
- spec/integration/ids_spec.rb
|
209
|
+
- spec/integration/mixed_any_ofs_spec.rb
|
209
210
|
- spec/integration/mixed_arrays_spec.rb
|
210
211
|
- spec/integration/mixed_objects_spec.rb
|
211
212
|
- spec/integration/object_definitions_spec.rb
|
@@ -225,6 +226,7 @@ files:
|
|
225
226
|
- spec/support/examples/custom_errors.rb
|
226
227
|
- spec/support/examples/entity_literals.rb
|
227
228
|
- spec/support/examples/ids.rb
|
229
|
+
- spec/support/examples/mixed_any_ofs.rb
|
228
230
|
- spec/support/examples/mixed_arrays.rb
|
229
231
|
- spec/support/examples/mixed_objects.rb
|
230
232
|
- spec/support/examples/object_definitions.rb
|
@@ -280,6 +282,7 @@ test_files:
|
|
280
282
|
- spec/integration/custom_errors_spec.rb
|
281
283
|
- spec/integration/entity_literals_spec.rb
|
282
284
|
- spec/integration/ids_spec.rb
|
285
|
+
- spec/integration/mixed_any_ofs_spec.rb
|
283
286
|
- spec/integration/mixed_arrays_spec.rb
|
284
287
|
- spec/integration/mixed_objects_spec.rb
|
285
288
|
- spec/integration/object_definitions_spec.rb
|
@@ -299,6 +302,7 @@ test_files:
|
|
299
302
|
- spec/support/examples/custom_errors.rb
|
300
303
|
- spec/support/examples/entity_literals.rb
|
301
304
|
- spec/support/examples/ids.rb
|
305
|
+
- spec/support/examples/mixed_any_ofs.rb
|
302
306
|
- spec/support/examples/mixed_arrays.rb
|
303
307
|
- spec/support/examples/mixed_objects.rb
|
304
308
|
- spec/support/examples/object_definitions.rb
|