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