json-schema_builder 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9700739613fa7c5ff2c63848f0a685f59ba92418
4
- data.tar.gz: cc10fd2878902a1bd9f66b3f4b7e685733845788
3
+ metadata.gz: 81bbd02201c3857389c10b1fb7b2646da0876826
4
+ data.tar.gz: 0d3d2b317e2c95e1949c11b2541e9018ad1f3611
5
5
  SHA512:
6
- metadata.gz: 75781eb8acba795adee526196dcf51ad1d1273b77304ea95dff67c172684dc1b92a4bd67b8a8d9e789053ffc768da0af672a164e5daee758201b565025523635
7
- data.tar.gz: 5e96beabe38eff89357884757508bc369b66d39c48e5b1aa712871cdf4d6be1059b7ecae6a7e022d260840952232216b9bd50aa82a3ece552c6a150c76c787d2
6
+ metadata.gz: 64c161e632998919d104674c86a26095a20cdeb98f18031015efeb4fce44fc5f15dab9727e5621732b015a3c85ad97e7204f9f3713b7b0aa8102668cadbf836c
7
+ data.tar.gz: 8d6127dda6fbca78783ed2b42ab7d58fbe5a7bde5d75b86b4601b38e3091089118e4ea6c6510e46c900f5ac3c8c6e69ae0c4a8861e31809f00111320c563012f
@@ -12,6 +12,7 @@ module JSON
12
12
  module SchemaBuilder
13
13
  extend ActiveSupport::Concern
14
14
  include DSL
15
+ include Helpers
15
16
  extend JSON::SchemaBuilder::Configuration
16
17
 
17
18
  included do |klass|
@@ -13,6 +13,26 @@ module JSON
13
13
  child.eval_block &block
14
14
  end
15
15
  end
16
+
17
+ def object_or_array(*args, &block)
18
+ opts = args.extract_options!
19
+ name = args.shift
20
+ nullable = opts.delete :null
21
+
22
+ entity name do
23
+ list = [
24
+ object(*args, opts) { |child| child.eval_block(&block) },
25
+ array {
26
+ items {
27
+ object(*args, opts) { |child| child.eval_block(&block) }
28
+ }
29
+ }
30
+ ]
31
+
32
+ list << null if nullable
33
+ any_of list
34
+ end
35
+ end
16
36
  end
17
37
  end
18
38
  end
@@ -1,5 +1,5 @@
1
1
  module JSON
2
2
  module SchemaBuilder
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Examples::ObjectOrArray, type: :integration do
4
+ it_behaves_like 'a builder' do
5
+ let(:expected_json) do
6
+ {
7
+ anyOf: [{
8
+ type: :object,
9
+ additionalProperties: false,
10
+ properties: {
11
+ thing: { type: :any },
12
+ other: {
13
+ anyOf: [{
14
+ type: :object,
15
+ additionalProperties: false,
16
+ properties: {
17
+ stuff: { type: :string }
18
+ }
19
+ }, {
20
+ type: :array,
21
+ items: {
22
+ type: :object,
23
+ additionalProperties: false,
24
+ properties: {
25
+ stuff: { type: :string }
26
+ }
27
+ }
28
+ }]
29
+ }
30
+ }
31
+ }, {
32
+ type: :array,
33
+ items: {
34
+ type: :object,
35
+ additionalProperties: false,
36
+ properties: {
37
+ thing: { type: :any },
38
+ other: {
39
+ anyOf: [{
40
+ type: :object,
41
+ additionalProperties: false,
42
+ properties: {
43
+ stuff: {
44
+ type: :string
45
+ }
46
+ },
47
+ },
48
+ {
49
+ type: :array,
50
+ items: {
51
+ type: :object,
52
+ additionalProperties: false,
53
+ properties: {
54
+ stuff: {
55
+ type: :string
56
+ }
57
+ }
58
+ }
59
+ }]
60
+ }
61
+ }
62
+ }
63
+ }, {
64
+ type: :null
65
+ }]
66
+ }
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,15 @@
1
+ module Examples
2
+ class ObjectOrArray
3
+ include JSON::SchemaBuilder
4
+
5
+ def example
6
+ object_or_array additional_properties: false, null: true do
7
+ any :thing
8
+
9
+ object_or_array :other, additional_properties: false do
10
+ string :stuff
11
+ end
12
+ end
13
+ end
14
+ end
15
+ 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.1.0
4
+ version: 0.2.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: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -151,6 +151,7 @@ files:
151
151
  - spec/integration/mixed_arrays_spec.rb
152
152
  - spec/integration/mixed_objects_spec.rb
153
153
  - spec/integration/object_definitions_spec.rb
154
+ - spec/integration/object_or_array_spec.rb
154
155
  - spec/integration/rooted_spec.rb
155
156
  - spec/integration/schema_builder_spec.rb
156
157
  - spec/integration/scope_breaking_spec.rb
@@ -168,6 +169,7 @@ files:
168
169
  - spec/support/examples/mixed_arrays.rb
169
170
  - spec/support/examples/mixed_objects.rb
170
171
  - spec/support/examples/object_definitions.rb
172
+ - spec/support/examples/object_or_array.rb
171
173
  - spec/support/examples/rooted.rb
172
174
  - spec/support/examples/schema_builder.rb
173
175
  - spec/support/examples/scope_breaking.rb
@@ -221,6 +223,7 @@ test_files:
221
223
  - spec/integration/mixed_arrays_spec.rb
222
224
  - spec/integration/mixed_objects_spec.rb
223
225
  - spec/integration/object_definitions_spec.rb
226
+ - spec/integration/object_or_array_spec.rb
224
227
  - spec/integration/rooted_spec.rb
225
228
  - spec/integration/schema_builder_spec.rb
226
229
  - spec/integration/scope_breaking_spec.rb
@@ -238,6 +241,7 @@ test_files:
238
241
  - spec/support/examples/mixed_arrays.rb
239
242
  - spec/support/examples/mixed_objects.rb
240
243
  - spec/support/examples/object_definitions.rb
244
+ - spec/support/examples/object_or_array.rb
241
245
  - spec/support/examples/rooted.rb
242
246
  - spec/support/examples/schema_builder.rb
243
247
  - spec/support/examples/scope_breaking.rb