json_schemer 0.2.18 → 2.1.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +3 -7
  3. data/CHANGELOG.md +69 -0
  4. data/Gemfile.lock +28 -10
  5. data/README.md +379 -4
  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 +6 -12
  10. data/lib/json_schemer/cached_resolver.rb +16 -0
  11. data/lib/json_schemer/content.rb +18 -0
  12. data/lib/json_schemer/draft201909/meta.rb +320 -0
  13. data/lib/json_schemer/draft201909/vocab/applicator.rb +104 -0
  14. data/lib/json_schemer/draft201909/vocab/core.rb +45 -0
  15. data/lib/json_schemer/draft201909/vocab.rb +31 -0
  16. data/lib/json_schemer/draft202012/meta.rb +364 -0
  17. data/lib/json_schemer/draft202012/vocab/applicator.rb +382 -0
  18. data/lib/json_schemer/draft202012/vocab/content.rb +52 -0
  19. data/lib/json_schemer/draft202012/vocab/core.rb +160 -0
  20. data/lib/json_schemer/draft202012/vocab/format_annotation.rb +23 -0
  21. data/lib/json_schemer/draft202012/vocab/format_assertion.rb +23 -0
  22. data/lib/json_schemer/draft202012/vocab/meta_data.rb +30 -0
  23. data/lib/json_schemer/draft202012/vocab/unevaluated.rb +94 -0
  24. data/lib/json_schemer/draft202012/vocab/validation.rb +286 -0
  25. data/lib/json_schemer/draft202012/vocab.rb +105 -0
  26. data/lib/json_schemer/draft4/meta.rb +161 -0
  27. data/lib/json_schemer/draft4/vocab/validation.rb +39 -0
  28. data/lib/json_schemer/draft4/vocab.rb +18 -0
  29. data/lib/json_schemer/draft6/meta.rb +172 -0
  30. data/lib/json_schemer/draft6/vocab.rb +16 -0
  31. data/lib/json_schemer/draft7/meta.rb +183 -0
  32. data/lib/json_schemer/draft7/vocab/validation.rb +69 -0
  33. data/lib/json_schemer/draft7/vocab.rb +30 -0
  34. data/lib/json_schemer/ecma_regexp.rb +51 -0
  35. data/lib/json_schemer/errors.rb +1 -0
  36. data/lib/json_schemer/format/duration.rb +23 -0
  37. data/lib/json_schemer/format/email.rb +56 -0
  38. data/lib/json_schemer/format/hostname.rb +58 -0
  39. data/lib/json_schemer/format/json_pointer.rb +18 -0
  40. data/lib/json_schemer/format/uri_template.rb +34 -0
  41. data/lib/json_schemer/format.rb +129 -109
  42. data/lib/json_schemer/keyword.rb +53 -0
  43. data/lib/json_schemer/location.rb +25 -0
  44. data/lib/json_schemer/openapi.rb +40 -0
  45. data/lib/json_schemer/openapi30/document.rb +1672 -0
  46. data/lib/json_schemer/openapi30/meta.rb +32 -0
  47. data/lib/json_schemer/openapi30/vocab/base.rb +18 -0
  48. data/lib/json_schemer/openapi30/vocab.rb +12 -0
  49. data/lib/json_schemer/openapi31/document.rb +1557 -0
  50. data/lib/json_schemer/openapi31/meta.rb +136 -0
  51. data/lib/json_schemer/openapi31/vocab/base.rb +127 -0
  52. data/lib/json_schemer/openapi31/vocab.rb +18 -0
  53. data/lib/json_schemer/output.rb +56 -0
  54. data/lib/json_schemer/result.rb +229 -0
  55. data/lib/json_schemer/schema.rb +423 -0
  56. data/lib/json_schemer/version.rb +1 -1
  57. data/lib/json_schemer.rb +218 -28
  58. metadata +98 -25
  59. data/lib/json_schemer/cached_ref_resolver.rb +0 -14
  60. data/lib/json_schemer/schema/base.rb +0 -658
  61. data/lib/json_schemer/schema/draft4.rb +0 -44
  62. data/lib/json_schemer/schema/draft6.rb +0 -25
  63. 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/schema'
23
63
 
24
64
  module JSONSchemer
25
65
  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,
37
95
 
38
- DEFAULT_META_SCHEMA = 'http://json-schema.org/draft-07/schema#'
96
+ 'json-schemer://draft7' => Draft7::Vocab::ALL,
97
+ 'json-schemer://draft6' => Draft6::Vocab::ALL,
98
+ 'json-schemer://draft4' => Draft4::Vocab::ALL,
99
+
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,158 @@ 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
- def schema(schema, **options)
116
+ def schema(schema, meta_schema: draft202012, **options)
52
117
  case schema
53
118
  when String
54
119
  schema = JSON.parse(schema)
55
120
  when Pathname
56
- uri = URI.parse(File.join('file:', schema.realpath))
57
- if options.key?(:ref_resolver)
58
- schema = FILE_URI_REF_RESOLVER.call(uri)
121
+ base_uri = URI.parse(File.join('file:', URI::DEFAULT_PARSER.escape(schema.realpath.to_s)))
122
+ options[:base_uri] = base_uri
123
+ schema = if options.key?(:ref_resolver)
124
+ FILE_URI_REF_RESOLVER.call(base_uri)
59
125
  else
60
- ref_resolver = CachedRefResolver.new(&FILE_URI_REF_RESOLVER)
61
- schema = ref_resolver.call(uri)
126
+ ref_resolver = CachedResolver.new(&FILE_URI_REF_RESOLVER)
62
127
  options[:ref_resolver] = ref_resolver
128
+ ref_resolver.call(base_uri)
63
129
  end
64
- schema[draft_class(schema)::ID_KEYWORD] ||= uri.to_s
65
130
  end
66
- draft_class(schema).new(schema, **options)
131
+ unless meta_schema.is_a?(Schema)
132
+ meta_schema = META_SCHEMAS_BY_BASE_URI_STR[meta_schema] || raise(UnsupportedMetaSchema, meta_schema)
133
+ end
134
+ Schema.new(schema, :meta_schema => meta_schema, **options)
135
+ end
136
+
137
+ def valid_schema?(schema, **options)
138
+ schema(schema, **options).valid_schema?
139
+ end
140
+
141
+ def validate_schema(schema, **options)
142
+ schema(schema, **options).validate_schema
67
143
  end
68
144
 
69
- private
145
+ def draft202012
146
+ @draft202012 ||= Schema.new(
147
+ Draft202012::SCHEMA,
148
+ :base_uri => Draft202012::BASE_URI,
149
+ :formats => Draft202012::FORMATS,
150
+ :content_encodings => Draft202012::CONTENT_ENCODINGS,
151
+ :content_media_types => Draft202012::CONTENT_MEDIA_TYPES,
152
+ :ref_resolver => Draft202012::Meta::SCHEMAS.to_proc,
153
+ :regexp_resolver => 'ecma'
154
+ )
155
+ end
156
+
157
+ def draft201909
158
+ @draft201909 ||= Schema.new(
159
+ Draft201909::SCHEMA,
160
+ :base_uri => Draft201909::BASE_URI,
161
+ :formats => Draft201909::FORMATS,
162
+ :content_encodings => Draft201909::CONTENT_ENCODINGS,
163
+ :content_media_types => Draft201909::CONTENT_MEDIA_TYPES,
164
+ :ref_resolver => Draft201909::Meta::SCHEMAS.to_proc,
165
+ :regexp_resolver => 'ecma'
166
+ )
167
+ end
168
+
169
+ def draft7
170
+ @draft7 ||= Schema.new(
171
+ Draft7::SCHEMA,
172
+ :vocabulary => { 'json-schemer://draft7' => true },
173
+ :base_uri => Draft7::BASE_URI,
174
+ :formats => Draft7::FORMATS,
175
+ :content_encodings => Draft7::CONTENT_ENCODINGS,
176
+ :content_media_types => Draft7::CONTENT_MEDIA_TYPES,
177
+ :regexp_resolver => 'ecma'
178
+ )
179
+ end
180
+
181
+ def draft6
182
+ @draft6 ||= Schema.new(
183
+ Draft6::SCHEMA,
184
+ :vocabulary => { 'json-schemer://draft6' => true },
185
+ :base_uri => Draft6::BASE_URI,
186
+ :formats => Draft6::FORMATS,
187
+ :content_encodings => Draft6::CONTENT_ENCODINGS,
188
+ :content_media_types => Draft6::CONTENT_MEDIA_TYPES,
189
+ :regexp_resolver => 'ecma'
190
+ )
191
+ end
70
192
 
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)
193
+ def draft4
194
+ @draft4 ||= Schema.new(
195
+ Draft4::SCHEMA,
196
+ :vocabulary => { 'json-schemer://draft4' => true },
197
+ :base_uri => Draft4::BASE_URI,
198
+ :formats => Draft4::FORMATS,
199
+ :content_encodings => Draft4::CONTENT_ENCODINGS,
200
+ :content_media_types => Draft4::CONTENT_MEDIA_TYPES,
201
+ :regexp_resolver => 'ecma'
202
+ )
74
203
  end
204
+
205
+ def openapi31
206
+ @openapi31 ||= Schema.new(
207
+ OpenAPI31::SCHEMA,
208
+ :base_uri => OpenAPI31::BASE_URI,
209
+ :formats => OpenAPI31::FORMATS,
210
+ :ref_resolver => OpenAPI31::Meta::SCHEMAS.to_proc,
211
+ :regexp_resolver => 'ecma'
212
+ )
213
+ end
214
+
215
+ def openapi30
216
+ @openapi30 ||= Schema.new(
217
+ OpenAPI30::SCHEMA,
218
+ :vocabulary => {
219
+ 'json-schemer://draft4' => true,
220
+ 'json-schemer://openapi30' => true
221
+ },
222
+ :base_uri => OpenAPI30::BASE_URI,
223
+ :formats => OpenAPI30::FORMATS,
224
+ :ref_resolver => OpenAPI30::Meta::SCHEMAS.to_proc,
225
+ :regexp_resolver => 'ecma'
226
+ )
227
+ end
228
+
229
+ def openapi31_document
230
+ @openapi31_document ||= Schema.new(
231
+ OpenAPI31::Document::SCHEMA_BASE,
232
+ :ref_resolver => OpenAPI31::Document::SCHEMAS.to_proc,
233
+ :regexp_resolver => 'ecma'
234
+ )
235
+ end
236
+
237
+ def openapi30_document
238
+ @openapi30_document ||= Schema.new(
239
+ OpenAPI30::Document::SCHEMA,
240
+ :ref_resolver => OpenAPI30::Document::SCHEMAS.to_proc,
241
+ :regexp_resolver => 'ecma'
242
+ )
243
+ end
244
+
245
+ def openapi(document, **options)
246
+ OpenAPI.new(document, **options)
247
+ end
248
+ end
249
+
250
+ META_SCHEMA_CALLABLES_BY_BASE_URI_STR = {
251
+ Draft202012::BASE_URI.to_s => method(:draft202012),
252
+ Draft201909::BASE_URI.to_s => method(:draft201909),
253
+ Draft7::BASE_URI.to_s => method(:draft7),
254
+ Draft6::BASE_URI.to_s => method(:draft6),
255
+ Draft4::BASE_URI.to_s => method(:draft4),
256
+ # version-less $schema deprecated after Draft 4
257
+ 'http://json-schema.org/schema#' => method(:draft4),
258
+ OpenAPI31::BASE_URI.to_s => method(:openapi31),
259
+ OpenAPI30::BASE_URI.to_s => method(:openapi30)
260
+ }.freeze
261
+
262
+ META_SCHEMAS_BY_BASE_URI_STR = Hash.new do |hash, base_uri_str|
263
+ next unless META_SCHEMA_CALLABLES_BY_BASE_URI_STR.key?(base_uri_str)
264
+ hash[base_uri_str] = META_SCHEMA_CALLABLES_BY_BASE_URI_STR.fetch(base_uri_str).call
75
265
  end
76
266
  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.1.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: 2023-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,19 +53,47 @@ 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: i18n
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-debug
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'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: hana
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -81,64 +109,108 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '1.3'
83
111
  - !ruby/object:Gem::Dependency
84
- name: uri_template
112
+ name: regexp_parser
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '0.7'
117
+ version: '2.0'
90
118
  type: :runtime
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '0.7'
124
+ version: '2.0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: regexp_parser
126
+ name: simpleidn
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '2.0'
131
+ version: '0.2'
104
132
  type: :runtime
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '2.0'
111
- description:
138
+ version: '0.2'
139
+ description:
112
140
  email:
113
141
  - davishmcclurg@gmail.com
114
- executables: []
142
+ executables:
143
+ - json_schemer
115
144
  extensions: []
116
145
  extra_rdoc_files: []
117
146
  files:
118
147
  - ".github/workflows/ci.yml"
119
148
  - ".gitignore"
149
+ - CHANGELOG.md
120
150
  - Gemfile
121
151
  - Gemfile.lock
122
152
  - LICENSE.txt
123
153
  - README.md
124
154
  - Rakefile
125
155
  - bin/console
156
+ - bin/hostname_character_classes
157
+ - bin/rake
126
158
  - bin/setup
159
+ - exe/json_schemer
127
160
  - json_schemer.gemspec
128
161
  - lib/json_schemer.rb
129
- - lib/json_schemer/cached_ref_resolver.rb
162
+ - lib/json_schemer/cached_resolver.rb
163
+ - lib/json_schemer/content.rb
164
+ - lib/json_schemer/draft201909/meta.rb
165
+ - lib/json_schemer/draft201909/vocab.rb
166
+ - lib/json_schemer/draft201909/vocab/applicator.rb
167
+ - lib/json_schemer/draft201909/vocab/core.rb
168
+ - lib/json_schemer/draft202012/meta.rb
169
+ - lib/json_schemer/draft202012/vocab.rb
170
+ - lib/json_schemer/draft202012/vocab/applicator.rb
171
+ - lib/json_schemer/draft202012/vocab/content.rb
172
+ - lib/json_schemer/draft202012/vocab/core.rb
173
+ - lib/json_schemer/draft202012/vocab/format_annotation.rb
174
+ - lib/json_schemer/draft202012/vocab/format_assertion.rb
175
+ - lib/json_schemer/draft202012/vocab/meta_data.rb
176
+ - lib/json_schemer/draft202012/vocab/unevaluated.rb
177
+ - lib/json_schemer/draft202012/vocab/validation.rb
178
+ - lib/json_schemer/draft4/meta.rb
179
+ - lib/json_schemer/draft4/vocab.rb
180
+ - lib/json_schemer/draft4/vocab/validation.rb
181
+ - lib/json_schemer/draft6/meta.rb
182
+ - lib/json_schemer/draft6/vocab.rb
183
+ - lib/json_schemer/draft7/meta.rb
184
+ - lib/json_schemer/draft7/vocab.rb
185
+ - lib/json_schemer/draft7/vocab/validation.rb
186
+ - lib/json_schemer/ecma_regexp.rb
130
187
  - lib/json_schemer/errors.rb
131
188
  - 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
189
+ - lib/json_schemer/format/duration.rb
190
+ - lib/json_schemer/format/email.rb
191
+ - lib/json_schemer/format/hostname.rb
192
+ - lib/json_schemer/format/json_pointer.rb
193
+ - lib/json_schemer/format/uri_template.rb
194
+ - lib/json_schemer/keyword.rb
195
+ - lib/json_schemer/location.rb
196
+ - lib/json_schemer/openapi.rb
197
+ - lib/json_schemer/openapi30/document.rb
198
+ - lib/json_schemer/openapi30/meta.rb
199
+ - lib/json_schemer/openapi30/vocab.rb
200
+ - lib/json_schemer/openapi30/vocab/base.rb
201
+ - lib/json_schemer/openapi31/document.rb
202
+ - lib/json_schemer/openapi31/meta.rb
203
+ - lib/json_schemer/openapi31/vocab.rb
204
+ - lib/json_schemer/openapi31/vocab/base.rb
205
+ - lib/json_schemer/output.rb
206
+ - lib/json_schemer/result.rb
207
+ - lib/json_schemer/schema.rb
136
208
  - lib/json_schemer/version.rb
137
209
  homepage: https://github.com/davishmcclurg/json_schemer
138
210
  licenses:
139
211
  - MIT
140
212
  metadata: {}
141
- post_install_message:
213
+ post_install_message:
142
214
  rdoc_options: []
143
215
  require_paths:
144
216
  - lib
@@ -146,15 +218,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
218
  requirements:
147
219
  - - ">="
148
220
  - !ruby/object:Gem::Version
149
- version: '2.4'
221
+ version: '2.5'
150
222
  required_rubygems_version: !ruby/object:Gem::Requirement
151
223
  requirements:
152
224
  - - ">="
153
225
  - !ruby/object:Gem::Version
154
226
  version: '0'
155
227
  requirements: []
156
- rubygems_version: 3.1.4
157
- signing_key:
228
+ rubygems_version: 3.4.10
229
+ signing_key:
158
230
  specification_version: 4
159
- summary: JSON Schema validator. Supports drafts 4, 6, and 7.
231
+ summary: JSON Schema validator. Supports drafts 4, 6, 7, 2019-09, 2020-12, OpenAPI
232
+ 3.0, and OpenAPI 3.1.
160
233
  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