json_schemer 0.2.18 → 2.2.0

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