dry-types-json-schema 0.0.4 → 0.0.5

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
  SHA256:
3
- metadata.gz: 67e63d34a8b81578fef86941bd3f448062ddf6357f5ea66751882f424a52bd28
4
- data.tar.gz: 732938510bbdfa5490421cebfff6de06b57108819bdc0f7f7806f03ad4c8131b
3
+ metadata.gz: 36b8f47842c070aa29dd71b77d9b8b3e1a47cb1ca9949b803d38e61d209dd694
4
+ data.tar.gz: 0e232109de9548c377afb214ea99b675a54b8d98f6f828b47ffee829d8a8cdc8
5
5
  SHA512:
6
- metadata.gz: a0133a959fe532c4f5c75a5084c674a2e83553af6e6abb6580a1809fba8f5dd15c748640c786f4d22cd04a00303582ddc3ef957b707ec00d17281621bf4e6ad7
7
- data.tar.gz: 05b90642aa10bce11add57b7591fa466a0102f9c5d62e4fa29b8a2f0a1318908d0a10baf9c36531fadf5584764d740b0beb3a7e21b540be63eb03a4b23f03ba0
6
+ metadata.gz: 62ada56d637bbf63bf2564fe67abf89c7a1072dc1bafbfbdfcff1cdb61d02a1db54d8c16dedb03fdfe268d1686440351b64853b0dc4ecc13bc78fc8a539d5574
7
+ data.tar.gz: 1c2f9adc03ae8f18235e2b1fd2df5d02ba6ff86d66f52d31d8d785dbf62bd35853014f26f7afcf1ff0bf3e5af89a3fde1ebd6b6cc61f41068d557bee76a94383
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dry-types-json-schema (0.0.4)
4
+ dry-types-json-schema (0.0.5)
5
5
  dry-types (~> 1.7.2)
6
6
 
7
7
  GEM
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "dry-types-json-schema"
5
- s.version = "0.0.4"
5
+ s.version = "0.0.5"
6
6
  s.summary = "Generate JSON Schema from dry-types"
7
7
  s.authors = ["elcuervo"]
8
8
  s.licenses = %w[MIT]
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
  s.add_dependency("dry-types", "~> 1.7.2")
15
15
 
16
16
  s.add_development_dependency("dry-struct", "~> 1.6.0")
17
+ s.add_development_dependency("json_schemer", "~> 2.2.1")
17
18
  s.add_development_dependency("minitest", "~> 5.22.3")
18
19
  s.add_development_dependency("pry", "~> 0.14.2")
19
- s.add_development_dependency("json_schemer", "~> 2.2.1")
20
- s.add_development_dependency("simplecov", "~> 0.22.0")
21
20
  s.add_development_dependency("rubocop", "~> 1.62.1")
22
21
  s.add_development_dependency("rubocop-minitest", "~> 0.35.0")
22
+ s.add_development_dependency("simplecov", "~> 0.22.0")
23
23
  s.add_development_dependency("super_diff", "~> 0.11.0")
24
24
  end
@@ -85,6 +85,7 @@ module Dry
85
85
  def initialize(root: false, loose: false)
86
86
  @keys = EMPTY_HASH.dup
87
87
  @required = Set.new
88
+
88
89
  @root = root
89
90
  @loose = loose
90
91
  end
@@ -139,10 +140,14 @@ module Dry
139
140
  def visit_nominal(node, opts = EMPTY_HASH)
140
141
  type, meta = node
141
142
 
142
- if opts.fetch(:key, false)
143
+ if opts.key?(:key)
143
144
  visit_nominal_with_key(node, opts)
144
145
  else
145
- @keys.merge!(type: CLASS_TO_TYPE[type.to_s.to_sym])
146
+ if opts.key?(:array)
147
+ @keys.merge!(items: { type: CLASS_TO_TYPE[type.to_s.to_sym] })
148
+ else
149
+ @keys.merge!(type: CLASS_TO_TYPE[type.to_s.to_sym])
150
+ end
146
151
  @keys.merge!(meta.slice(*ALLOWED_TYPES_META_OVERRIDES)) if meta.any?
147
152
  end
148
153
  end
@@ -187,7 +192,7 @@ module Dry
187
192
  *types, _ = node
188
193
 
189
194
  result = types
190
- .map { |type| compile_value(type, opts.merge(sum: true)) }
195
+ .map { |type| compile_value(type, { sum: true }.merge(opts)) }
191
196
  .uniq
192
197
 
193
198
  return @keys[opts[:key]] = result.first if result.count == 1
@@ -205,7 +210,7 @@ module Dry
205
210
  (_, (_, ((_, left_type),))) = left
206
211
 
207
212
  visit(left, opts)
208
- visit(right, opts.merge(left_type: left_type))
213
+ visit(right, { left_type: left_type }.merge(opts))
209
214
  end
210
215
 
211
216
  def visit_hash(node, opts = EMPTY_HASH)
@@ -225,7 +230,7 @@ module Dry
225
230
  def visit_array(node, opts = EMPTY_HASH)
226
231
  type, meta = node
227
232
 
228
- visit(type, opts.merge(array: true))
233
+ visit(type, { array: true }.merge(opts))
229
234
 
230
235
  @keys[opts[:key]].merge!(meta.slice(*ANNOTATIONS)) if meta.any?
231
236
  end
@@ -255,7 +260,7 @@ module Dry
255
260
 
256
261
  @required << name if required
257
262
 
258
- visit(rest, opts.merge(key: name))
263
+ visit(rest, { key: name }.merge(opts))
259
264
  end
260
265
 
261
266
  private
@@ -59,6 +59,25 @@ describe Dry::Types::JSONSchema do
59
59
  end
60
60
  end
61
61
 
62
+ describe "array" do
63
+ it_conforms_definition do
64
+ let(:type) do
65
+ Dry::Types["array"]
66
+ .of(Dry::Types["integer"])
67
+ .constrained(min_size: 1, max_size: 100)
68
+ end
69
+
70
+ let(:definition) do
71
+ {
72
+ type: :array,
73
+ minItems: 1,
74
+ maxItems: 100,
75
+ items: { type: :integer }
76
+ }
77
+ end
78
+ end
79
+ end
80
+
62
81
  describe "struct" do
63
82
  class StructTest < Dry::Struct
64
83
  schema schema.meta(title: "Title", description: "description")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-types-json-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - elcuervo
@@ -39,89 +39,89 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.6.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: json_schemer
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 5.22.3
47
+ version: 2.2.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 5.22.3
54
+ version: 2.2.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.14.2
61
+ version: 5.22.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.14.2
68
+ version: 5.22.3
69
69
  - !ruby/object:Gem::Dependency
70
- name: json_schemer
70
+ name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.2.1
75
+ version: 0.14.2
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.2.1
82
+ version: 0.14.2
83
83
  - !ruby/object:Gem::Dependency
84
- name: simplecov
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.22.0
89
+ version: 1.62.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.22.0
96
+ version: 1.62.1
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: rubocop-minitest
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.62.1
103
+ version: 0.35.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.62.1
110
+ version: 0.35.0
111
111
  - !ruby/object:Gem::Dependency
112
- name: rubocop-minitest
112
+ name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.35.0
117
+ version: 0.22.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.35.0
124
+ version: 0.22.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: super_diff
127
127
  requirement: !ruby/object:Gem::Requirement