json_schemer 0.2.18 → 2.2.1

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +7 -7
  3. data/CHANGELOG.md +89 -0
  4. data/Gemfile.lock +35 -10
  5. data/README.md +402 -6
  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 +31 -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 +242 -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.1
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-14 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