json_schemer 1.0.3 → 2.4.0

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +7 -8
  3. data/CHANGELOG.md +96 -0
  4. data/Gemfile.lock +23 -14
  5. data/README.md +343 -20
  6. data/json_schemer.gemspec +8 -3
  7. data/lib/json_schemer/configuration.rb +31 -0
  8. data/lib/json_schemer/content.rb +18 -0
  9. data/lib/json_schemer/draft201909/meta.rb +320 -0
  10. data/lib/json_schemer/draft201909/vocab/applicator.rb +104 -0
  11. data/lib/json_schemer/draft201909/vocab/core.rb +45 -0
  12. data/lib/json_schemer/draft201909/vocab.rb +31 -0
  13. data/lib/json_schemer/draft202012/meta.rb +364 -0
  14. data/lib/json_schemer/draft202012/vocab/applicator.rb +382 -0
  15. data/lib/json_schemer/draft202012/vocab/content.rb +52 -0
  16. data/lib/json_schemer/draft202012/vocab/core.rb +160 -0
  17. data/lib/json_schemer/draft202012/vocab/format_annotation.rb +23 -0
  18. data/lib/json_schemer/draft202012/vocab/format_assertion.rb +23 -0
  19. data/lib/json_schemer/draft202012/vocab/meta_data.rb +30 -0
  20. data/lib/json_schemer/draft202012/vocab/unevaluated.rb +104 -0
  21. data/lib/json_schemer/draft202012/vocab/validation.rb +290 -0
  22. data/lib/json_schemer/draft202012/vocab.rb +105 -0
  23. data/lib/json_schemer/draft4/meta.rb +161 -0
  24. data/lib/json_schemer/draft4/vocab/validation.rb +38 -0
  25. data/lib/json_schemer/draft4/vocab.rb +18 -0
  26. data/lib/json_schemer/draft6/meta.rb +172 -0
  27. data/lib/json_schemer/draft6/vocab.rb +16 -0
  28. data/lib/json_schemer/draft7/meta.rb +183 -0
  29. data/lib/json_schemer/draft7/vocab/validation.rb +69 -0
  30. data/lib/json_schemer/draft7/vocab.rb +30 -0
  31. data/lib/json_schemer/errors.rb +1 -0
  32. data/lib/json_schemer/format/duration.rb +23 -0
  33. data/lib/json_schemer/format/json_pointer.rb +18 -0
  34. data/lib/json_schemer/format.rb +127 -106
  35. data/lib/json_schemer/keyword.rb +56 -0
  36. data/lib/json_schemer/location.rb +25 -0
  37. data/lib/json_schemer/openapi.rb +38 -0
  38. data/lib/json_schemer/openapi30/document.rb +1672 -0
  39. data/lib/json_schemer/openapi30/meta.rb +34 -0
  40. data/lib/json_schemer/openapi30/vocab/base.rb +18 -0
  41. data/lib/json_schemer/openapi30/vocab.rb +12 -0
  42. data/lib/json_schemer/openapi31/document.rb +1557 -0
  43. data/lib/json_schemer/openapi31/meta.rb +136 -0
  44. data/lib/json_schemer/openapi31/vocab/base.rb +127 -0
  45. data/lib/json_schemer/openapi31/vocab.rb +18 -0
  46. data/lib/json_schemer/output.rb +56 -0
  47. data/lib/json_schemer/resources.rb +24 -0
  48. data/lib/json_schemer/result.rb +242 -0
  49. data/lib/json_schemer/schema.rb +433 -0
  50. data/lib/json_schemer/version.rb +1 -1
  51. data/lib/json_schemer.rb +235 -32
  52. metadata +119 -18
  53. data/lib/json_schemer/schema/base.rb +0 -677
  54. data/lib/json_schemer/schema/draft4.json +0 -149
  55. data/lib/json_schemer/schema/draft4.rb +0 -44
  56. data/lib/json_schemer/schema/draft6.json +0 -155
  57. data/lib/json_schemer/schema/draft6.rb +0 -25
  58. data/lib/json_schemer/schema/draft7.json +0 -172
  59. data/lib/json_schemer/schema/draft7.rb +0 -32
data/lib/json_schemer.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'base64'
3
2
  require 'bigdecimal'
3
+ require 'forwardable'
4
4
  require 'ipaddr'
5
5
  require 'json'
6
6
  require 'net/http'
@@ -14,79 +14,282 @@ require 'regexp_parser'
14
14
  require 'simpleidn'
15
15
 
16
16
  require 'json_schemer/version'
17
+ require 'json_schemer/format/duration'
17
18
  require 'json_schemer/format/hostname'
19
+ require 'json_schemer/format/json_pointer'
18
20
  require 'json_schemer/format/uri_template'
19
21
  require 'json_schemer/format/email'
20
22
  require 'json_schemer/format'
23
+ require 'json_schemer/content'
21
24
  require 'json_schemer/errors'
22
25
  require 'json_schemer/cached_resolver'
23
26
  require 'json_schemer/ecma_regexp'
24
- require 'json_schemer/schema/base'
25
- require 'json_schemer/schema/draft4'
26
- require 'json_schemer/schema/draft6'
27
- require 'json_schemer/schema/draft7'
27
+ require 'json_schemer/location'
28
+ require 'json_schemer/result'
29
+ require 'json_schemer/output'
30
+ require 'json_schemer/keyword'
31
+ require 'json_schemer/draft202012/meta'
32
+ require 'json_schemer/draft202012/vocab/core'
33
+ require 'json_schemer/draft202012/vocab/applicator'
34
+ require 'json_schemer/draft202012/vocab/unevaluated'
35
+ require 'json_schemer/draft202012/vocab/validation'
36
+ require 'json_schemer/draft202012/vocab/format_annotation'
37
+ require 'json_schemer/draft202012/vocab/format_assertion'
38
+ require 'json_schemer/draft202012/vocab/content'
39
+ require 'json_schemer/draft202012/vocab/meta_data'
40
+ require 'json_schemer/draft202012/vocab'
41
+ require 'json_schemer/draft201909/meta'
42
+ require 'json_schemer/draft201909/vocab/core'
43
+ require 'json_schemer/draft201909/vocab/applicator'
44
+ require 'json_schemer/draft201909/vocab'
45
+ require 'json_schemer/draft7/meta'
46
+ require 'json_schemer/draft7/vocab/validation'
47
+ require 'json_schemer/draft7/vocab'
48
+ require 'json_schemer/draft6/meta'
49
+ require 'json_schemer/draft6/vocab'
50
+ require 'json_schemer/draft4/meta'
51
+ require 'json_schemer/draft4/vocab/validation'
52
+ require 'json_schemer/draft4/vocab'
53
+ require 'json_schemer/openapi31/meta'
54
+ require 'json_schemer/openapi31/vocab/base'
55
+ require 'json_schemer/openapi31/vocab'
56
+ require 'json_schemer/openapi31/document'
57
+ require 'json_schemer/openapi30/document'
58
+ require 'json_schemer/openapi30/meta'
59
+ require 'json_schemer/openapi30/vocab/base'
60
+ require 'json_schemer/openapi30/vocab'
61
+ require 'json_schemer/openapi'
62
+ require 'json_schemer/configuration'
63
+ require 'json_schemer/resources'
64
+ require 'json_schemer/schema'
28
65
 
29
66
  module JSONSchemer
30
- class UnsupportedMetaSchema < StandardError; end
67
+ class UnsupportedOpenAPIVersion < StandardError; end
31
68
  class UnknownRef < StandardError; end
32
69
  class UnknownFormat < StandardError; end
70
+ class UnknownVocabulary < StandardError; end
71
+ class UnknownContentEncoding < StandardError; end
72
+ class UnknownContentMediaType < StandardError; end
73
+ class UnknownOutputFormat < StandardError; end
33
74
  class InvalidRefResolution < StandardError; end
75
+ class InvalidRefPointer < StandardError; end
34
76
  class InvalidRegexpResolution < StandardError; end
35
77
  class InvalidFileURI < StandardError; end
36
- class InvalidSymbolKey < StandardError; end
37
78
  class InvalidEcmaRegexp < StandardError; end
38
79
 
39
- DEFAULT_SCHEMA_CLASS = Schema::Draft7
40
- SCHEMA_CLASS_BY_META_SCHEMA = {
41
- 'http://json-schema.org/schema#' => Schema::Draft4, # Version-less $schema deprecated after Draft 4
42
- 'http://json-schema.org/draft-04/schema#' => Schema::Draft4,
43
- 'http://json-schema.org/draft-06/schema#' => Schema::Draft6,
44
- 'http://json-schema.org/draft-07/schema#' => Schema::Draft7
45
- }.freeze
80
+ VOCABULARIES = {
81
+ 'https://json-schema.org/draft/2020-12/vocab/core' => Draft202012::Vocab::CORE,
82
+ 'https://json-schema.org/draft/2020-12/vocab/applicator' => Draft202012::Vocab::APPLICATOR,
83
+ 'https://json-schema.org/draft/2020-12/vocab/unevaluated' => Draft202012::Vocab::UNEVALUATED,
84
+ 'https://json-schema.org/draft/2020-12/vocab/validation' => Draft202012::Vocab::VALIDATION,
85
+ 'https://json-schema.org/draft/2020-12/vocab/format-annotation' => Draft202012::Vocab::FORMAT_ANNOTATION,
86
+ 'https://json-schema.org/draft/2020-12/vocab/format-assertion' => Draft202012::Vocab::FORMAT_ASSERTION,
87
+ 'https://json-schema.org/draft/2020-12/vocab/content' => Draft202012::Vocab::CONTENT,
88
+ 'https://json-schema.org/draft/2020-12/vocab/meta-data' => Draft202012::Vocab::META_DATA,
89
+
90
+ 'https://json-schema.org/draft/2019-09/vocab/core' => Draft201909::Vocab::CORE,
91
+ 'https://json-schema.org/draft/2019-09/vocab/applicator' => Draft201909::Vocab::APPLICATOR,
92
+ 'https://json-schema.org/draft/2019-09/vocab/validation' => Draft201909::Vocab::VALIDATION,
93
+ 'https://json-schema.org/draft/2019-09/vocab/format' => Draft201909::Vocab::FORMAT,
94
+ 'https://json-schema.org/draft/2019-09/vocab/content' => Draft201909::Vocab::CONTENT,
95
+ 'https://json-schema.org/draft/2019-09/vocab/meta-data' => Draft201909::Vocab::META_DATA,
96
+
97
+ 'json-schemer://draft7' => Draft7::Vocab::ALL,
98
+ 'json-schemer://draft6' => Draft6::Vocab::ALL,
99
+ 'json-schemer://draft4' => Draft4::Vocab::ALL,
100
+
101
+ 'https://spec.openapis.org/oas/3.1/vocab/base' => OpenAPI31::Vocab::BASE,
102
+ 'json-schemer://openapi30' => OpenAPI30::Vocab::BASE
103
+ }
104
+ VOCABULARY_ORDER = VOCABULARIES.transform_values.with_index { |_vocabulary, index| index }
46
105
 
47
106
  WINDOWS_URI_PATH_REGEX = /\A\/[a-z]:/i
48
107
 
108
+ # :nocov:
109
+ URI_PARSER = URI.const_defined?(:RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER
110
+ # :nocov:
111
+
49
112
  FILE_URI_REF_RESOLVER = proc do |uri|
50
113
  raise InvalidFileURI, 'must use `file` scheme' unless uri.scheme == 'file'
51
114
  raise InvalidFileURI, 'cannot have a host (use `file:///`)' if uri.host && !uri.host.empty?
52
115
  path = uri.path
53
116
  path = path[1..-1] if path.match?(WINDOWS_URI_PATH_REGEX)
54
- JSON.parse(File.read(URI::DEFAULT_PARSER.unescape(path)))
117
+ JSON.parse(File.read(URI_PARSER.unescape(path)))
55
118
  end
56
119
 
57
120
  class << self
58
- def schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS, **options)
121
+ def schema(schema, **options)
122
+ schema = resolve(schema, options)
123
+ Schema.new(schema, **options)
124
+ end
125
+
126
+ def valid_schema?(schema, **options)
127
+ schema = resolve(schema, options)
128
+ meta_schema(schema, options).valid?(schema, **options.slice(:output_format, :resolve_enumerators, :access_mode))
129
+ end
130
+
131
+ def validate_schema(schema, **options)
132
+ schema = resolve(schema, options)
133
+ meta_schema(schema, options).validate(schema, **options.slice(:output_format, :resolve_enumerators, :access_mode))
134
+ end
135
+
136
+ def draft202012
137
+ @draft202012 ||= Schema.new(
138
+ Draft202012::SCHEMA,
139
+ :base_uri => Draft202012::BASE_URI,
140
+ :formats => Draft202012::FORMATS,
141
+ :content_encodings => Draft202012::CONTENT_ENCODINGS,
142
+ :content_media_types => Draft202012::CONTENT_MEDIA_TYPES,
143
+ :ref_resolver => Draft202012::Meta::SCHEMAS.to_proc,
144
+ :regexp_resolver => 'ecma'
145
+ )
146
+ end
147
+
148
+ def draft201909
149
+ @draft201909 ||= Schema.new(
150
+ Draft201909::SCHEMA,
151
+ :base_uri => Draft201909::BASE_URI,
152
+ :formats => Draft201909::FORMATS,
153
+ :content_encodings => Draft201909::CONTENT_ENCODINGS,
154
+ :content_media_types => Draft201909::CONTENT_MEDIA_TYPES,
155
+ :ref_resolver => Draft201909::Meta::SCHEMAS.to_proc,
156
+ :regexp_resolver => 'ecma'
157
+ )
158
+ end
159
+
160
+ def draft7
161
+ @draft7 ||= Schema.new(
162
+ Draft7::SCHEMA,
163
+ :vocabulary => { 'json-schemer://draft7' => true },
164
+ :base_uri => Draft7::BASE_URI,
165
+ :formats => Draft7::FORMATS,
166
+ :content_encodings => Draft7::CONTENT_ENCODINGS,
167
+ :content_media_types => Draft7::CONTENT_MEDIA_TYPES,
168
+ :regexp_resolver => 'ecma'
169
+ )
170
+ end
171
+
172
+ def draft6
173
+ @draft6 ||= Schema.new(
174
+ Draft6::SCHEMA,
175
+ :vocabulary => { 'json-schemer://draft6' => true },
176
+ :base_uri => Draft6::BASE_URI,
177
+ :formats => Draft6::FORMATS,
178
+ :content_encodings => Draft6::CONTENT_ENCODINGS,
179
+ :content_media_types => Draft6::CONTENT_MEDIA_TYPES,
180
+ :regexp_resolver => 'ecma'
181
+ )
182
+ end
183
+
184
+ def draft4
185
+ @draft4 ||= Schema.new(
186
+ Draft4::SCHEMA,
187
+ :vocabulary => { 'json-schemer://draft4' => true },
188
+ :base_uri => Draft4::BASE_URI,
189
+ :formats => Draft4::FORMATS,
190
+ :content_encodings => Draft4::CONTENT_ENCODINGS,
191
+ :content_media_types => Draft4::CONTENT_MEDIA_TYPES,
192
+ :regexp_resolver => 'ecma'
193
+ )
194
+ end
195
+
196
+ def openapi31
197
+ @openapi31 ||= Schema.new(
198
+ OpenAPI31::SCHEMA,
199
+ :base_uri => OpenAPI31::BASE_URI,
200
+ :formats => OpenAPI31::FORMATS,
201
+ :ref_resolver => OpenAPI31::Meta::SCHEMAS.to_proc,
202
+ :regexp_resolver => 'ecma'
203
+ )
204
+ end
205
+
206
+ def openapi30
207
+ @openapi30 ||= Schema.new(
208
+ OpenAPI30::SCHEMA,
209
+ :vocabulary => {
210
+ 'json-schemer://draft4' => true,
211
+ 'json-schemer://openapi30' => true
212
+ },
213
+ :base_uri => OpenAPI30::BASE_URI,
214
+ :formats => OpenAPI30::FORMATS,
215
+ :ref_resolver => OpenAPI30::Meta::SCHEMAS.to_proc,
216
+ :regexp_resolver => 'ecma'
217
+ )
218
+ end
219
+
220
+ def openapi31_document
221
+ @openapi31_document ||= Schema.new(
222
+ OpenAPI31::Document::SCHEMA_BASE,
223
+ :ref_resolver => OpenAPI31::Document::SCHEMAS.to_proc,
224
+ :regexp_resolver => 'ecma'
225
+ )
226
+ end
227
+
228
+ def openapi30_document
229
+ @openapi30_document ||= Schema.new(
230
+ OpenAPI30::Document::SCHEMA,
231
+ :ref_resolver => OpenAPI30::Document::SCHEMAS.to_proc,
232
+ :regexp_resolver => 'ecma'
233
+ )
234
+ end
235
+
236
+ def openapi(document, **options)
237
+ OpenAPI.new(document, **options)
238
+ end
239
+
240
+ def configuration
241
+ @configuration ||= Configuration.new
242
+ end
243
+
244
+ def configure
245
+ yield configuration
246
+ end
247
+
248
+ private
249
+
250
+ def resolve(schema, options)
59
251
  case schema
60
252
  when String
61
- schema = JSON.parse(schema)
253
+ JSON.parse(schema)
62
254
  when Pathname
63
- base_uri = URI.parse(File.join('file:', URI::DEFAULT_PARSER.escape(schema.realpath.to_s)))
255
+ base_uri = URI.parse(File.join('file:', URI_PARSER.escape(schema.realpath.to_s)))
64
256
  options[:base_uri] = base_uri
65
- schema = if options.key?(:ref_resolver)
257
+ if options.key?(:ref_resolver)
66
258
  FILE_URI_REF_RESOLVER.call(base_uri)
67
259
  else
68
260
  ref_resolver = CachedResolver.new(&FILE_URI_REF_RESOLVER)
69
261
  options[:ref_resolver] = ref_resolver
70
262
  ref_resolver.call(base_uri)
71
263
  end
72
- end
73
-
74
- schema_class = if schema.is_a?(Hash) && schema.key?('$schema')
75
- meta_schema = schema.fetch('$schema')
76
- SCHEMA_CLASS_BY_META_SCHEMA[meta_schema] || raise(UnsupportedMetaSchema, meta_schema)
77
264
  else
78
- default_schema_class
265
+ schema
79
266
  end
80
-
81
- schema_class.new(schema, **options)
82
267
  end
83
268
 
84
- def valid_schema?(schema, default_schema_class: DEFAULT_SCHEMA_CLASS)
85
- schema(schema, default_schema_class: default_schema_class).valid_schema?
269
+ def meta_schema(schema, options)
270
+ parseable_schema = {}
271
+ if schema.is_a?(Hash)
272
+ meta_schema = schema['$schema'] || schema[:'$schema']
273
+ parseable_schema['$schema'] = meta_schema if meta_schema.is_a?(String)
274
+ end
275
+ schema(parseable_schema, **options).meta_schema
86
276
  end
277
+ end
87
278
 
88
- def validate_schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS)
89
- schema(schema, default_schema_class: default_schema_class).validate_schema
90
- end
279
+ META_SCHEMA_CALLABLES_BY_BASE_URI_STR = {
280
+ Draft202012::BASE_URI.to_s => method(:draft202012),
281
+ Draft201909::BASE_URI.to_s => method(:draft201909),
282
+ Draft7::BASE_URI.to_s => method(:draft7),
283
+ Draft6::BASE_URI.to_s => method(:draft6),
284
+ Draft4::BASE_URI.to_s => method(:draft4),
285
+ # version-less $schema deprecated after Draft 4
286
+ 'http://json-schema.org/schema#' => method(:draft4),
287
+ OpenAPI31::BASE_URI.to_s => method(:openapi31),
288
+ OpenAPI30::BASE_URI.to_s => method(:openapi30)
289
+ }.freeze
290
+
291
+ META_SCHEMAS_BY_BASE_URI_STR = Hash.new do |hash, base_uri_str|
292
+ next unless META_SCHEMA_CALLABLES_BY_BASE_URI_STR.key?(base_uri_str)
293
+ hash[base_uri_str] = META_SCHEMA_CALLABLES_BY_BASE_URI_STR.fetch(base_uri_str).call
91
294
  end
92
295
  end
metadata CHANGED
@@ -1,29 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schemer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Harsha
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-06-14 00:00:00.000000000 Z
10
+ date: 2025-02-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: bundler
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
30
  - - "~>"
18
31
  - !ruby/object:Gem::Version
19
- version: '2.0'
32
+ version: 2.4.0
20
33
  type: :development
21
34
  prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
37
  - - "~>"
25
38
  - !ruby/object:Gem::Version
26
- version: '2.0'
39
+ version: 2.4.0
27
40
  - !ruby/object:Gem::Dependency
28
41
  name: rake
29
42
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +79,62 @@ dependencies:
66
79
  - - "~>"
67
80
  - !ruby/object:Gem::Version
68
81
  version: '0.22'
82
+ - !ruby/object:Gem::Dependency
83
+ name: csv
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: i18n
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: i18n-debug
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: bigdecimal
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
69
138
  - !ruby/object:Gem::Dependency
70
139
  name: hana
71
140
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +177,6 @@ dependencies:
108
177
  - - "~>"
109
178
  - !ruby/object:Gem::Version
110
179
  version: '0.2'
111
- description:
112
180
  email:
113
181
  - davishmcclurg@gmail.com
114
182
  executables:
@@ -132,25 +200,58 @@ files:
132
200
  - json_schemer.gemspec
133
201
  - lib/json_schemer.rb
134
202
  - lib/json_schemer/cached_resolver.rb
203
+ - lib/json_schemer/configuration.rb
204
+ - lib/json_schemer/content.rb
205
+ - lib/json_schemer/draft201909/meta.rb
206
+ - lib/json_schemer/draft201909/vocab.rb
207
+ - lib/json_schemer/draft201909/vocab/applicator.rb
208
+ - lib/json_schemer/draft201909/vocab/core.rb
209
+ - lib/json_schemer/draft202012/meta.rb
210
+ - lib/json_schemer/draft202012/vocab.rb
211
+ - lib/json_schemer/draft202012/vocab/applicator.rb
212
+ - lib/json_schemer/draft202012/vocab/content.rb
213
+ - lib/json_schemer/draft202012/vocab/core.rb
214
+ - lib/json_schemer/draft202012/vocab/format_annotation.rb
215
+ - lib/json_schemer/draft202012/vocab/format_assertion.rb
216
+ - lib/json_schemer/draft202012/vocab/meta_data.rb
217
+ - lib/json_schemer/draft202012/vocab/unevaluated.rb
218
+ - lib/json_schemer/draft202012/vocab/validation.rb
219
+ - lib/json_schemer/draft4/meta.rb
220
+ - lib/json_schemer/draft4/vocab.rb
221
+ - lib/json_schemer/draft4/vocab/validation.rb
222
+ - lib/json_schemer/draft6/meta.rb
223
+ - lib/json_schemer/draft6/vocab.rb
224
+ - lib/json_schemer/draft7/meta.rb
225
+ - lib/json_schemer/draft7/vocab.rb
226
+ - lib/json_schemer/draft7/vocab/validation.rb
135
227
  - lib/json_schemer/ecma_regexp.rb
136
228
  - lib/json_schemer/errors.rb
137
229
  - lib/json_schemer/format.rb
230
+ - lib/json_schemer/format/duration.rb
138
231
  - lib/json_schemer/format/email.rb
139
232
  - lib/json_schemer/format/hostname.rb
233
+ - lib/json_schemer/format/json_pointer.rb
140
234
  - lib/json_schemer/format/uri_template.rb
141
- - lib/json_schemer/schema/base.rb
142
- - lib/json_schemer/schema/draft4.json
143
- - lib/json_schemer/schema/draft4.rb
144
- - lib/json_schemer/schema/draft6.json
145
- - lib/json_schemer/schema/draft6.rb
146
- - lib/json_schemer/schema/draft7.json
147
- - lib/json_schemer/schema/draft7.rb
235
+ - lib/json_schemer/keyword.rb
236
+ - lib/json_schemer/location.rb
237
+ - lib/json_schemer/openapi.rb
238
+ - lib/json_schemer/openapi30/document.rb
239
+ - lib/json_schemer/openapi30/meta.rb
240
+ - lib/json_schemer/openapi30/vocab.rb
241
+ - lib/json_schemer/openapi30/vocab/base.rb
242
+ - lib/json_schemer/openapi31/document.rb
243
+ - lib/json_schemer/openapi31/meta.rb
244
+ - lib/json_schemer/openapi31/vocab.rb
245
+ - lib/json_schemer/openapi31/vocab/base.rb
246
+ - lib/json_schemer/output.rb
247
+ - lib/json_schemer/resources.rb
248
+ - lib/json_schemer/result.rb
249
+ - lib/json_schemer/schema.rb
148
250
  - lib/json_schemer/version.rb
149
251
  homepage: https://github.com/davishmcclurg/json_schemer
150
252
  licenses:
151
253
  - MIT
152
254
  metadata: {}
153
- post_install_message:
154
255
  rdoc_options: []
155
256
  require_paths:
156
257
  - lib
@@ -158,15 +259,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
259
  requirements:
159
260
  - - ">="
160
261
  - !ruby/object:Gem::Version
161
- version: '2.5'
262
+ version: '2.7'
162
263
  required_rubygems_version: !ruby/object:Gem::Requirement
163
264
  requirements:
164
265
  - - ">="
165
266
  - !ruby/object:Gem::Version
166
267
  version: '0'
167
268
  requirements: []
168
- rubygems_version: 3.4.10
169
- signing_key:
269
+ rubygems_version: 3.6.2
170
270
  specification_version: 4
171
- summary: JSON Schema validator. Supports drafts 4, 6, and 7.
271
+ summary: JSON Schema validator. Supports drafts 4, 6, 7, 2019-09, 2020-12, OpenAPI
272
+ 3.0, and OpenAPI 3.1.
172
273
  test_files: []