dry-types-json-schema 0.0.4 → 0.0.5

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
  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