json_schemer 2.2.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 730629a0650c643e352cd41f63ce3e41584e2a5f0a1fbf67ba2f2b4ea7f68dc0
4
- data.tar.gz: 5b3718cb5e7a27d4a87592cc5ffc6573f63cef4c6be6efc5f55b2a42706d8aaf
3
+ metadata.gz: 04dbbf738ea9253437566fb50075ee7603fd0b536324181aebb0573c32c7f7bc
4
+ data.tar.gz: 29337d5892b33a2f74e435370986f059d7dd9762352bea610e7668dca3171e09
5
5
  SHA512:
6
- metadata.gz: 9c8060d71e5c0d222de622780a57582d5a978bbdb84069cea6c62aee0a15713bbd82531f329559fb7613f39abf708a93c74c32404c1837026f2e3a55112d8042
7
- data.tar.gz: 92d813c0738af624b6a226812eeff6aaec0898cb2e5a95d069d67fa7cd061229a960835d9def7e1528124274ff479080ff6925465056acfc6d8481d40cb4336f
6
+ metadata.gz: 90f1510bcc40ad9500904453dee34434b91ef45b8ab7d8be84dc728aae4d4c1a4556037f1ae8b48595198529973fe2d1e5c20a64e5aeb9871cd6fddd23636268
7
+ data.tar.gz: c7e8a861d8f763d5248d79d486d8b253b9f81e40952e896d53b7dad84bdd5197a70224008e79de5cf5b6e7a3e9a8e646bd8af4188ae6a87c4a7ac9011998f36f
@@ -6,7 +6,7 @@ jobs:
6
6
  fail-fast: false
7
7
  matrix:
8
8
  os: [ubuntu-latest, windows-latest, macos-latest]
9
- ruby: [2.5, 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, head, jruby, jruby-head, truffleruby, truffleruby-head]
9
+ ruby: [2.7, 3.0, 3.1, 3.2, 3.3, 3.4, head, jruby, jruby-head, truffleruby, truffleruby-head]
10
10
  exclude:
11
11
  - os: ubuntu-latest
12
12
  ruby: head
data/CHANGELOG.md CHANGED
@@ -1,8 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.4.0] - 2025-02-01
4
+
5
+ ### Bug Fixes
6
+
7
+ - Store schema resource file URIs as strings to prevent conflicts: https://github.com/davishmcclurg/json_schemer/pull/189
8
+ - Require OpenAPI `discriminator` instances to be objects: https://github.com/davishmcclurg/json_schemer/pull/206
9
+ - Pass configuration options to subschemas: https://github.com/davishmcclurg/json_schemer/pull/208
10
+ - Check applicable instance types in OpenAPI `format` extensions: https://github.com/davishmcclurg/json_schemer/pull/209
11
+ - Use correct max values for OpenAPI `int32`/`int64` formats: https://github.com/davishmcclurg/json_schemer/commit/386c2a6fe089350c61775716643ef0600898060e
12
+
13
+ [2.4.0]: https://github.com/davishmcclurg/json_schemer/releases/tag/v2.4.0
14
+
15
+ ## [2.3.0] - 2024-05-30
16
+
17
+ ### Ruby Versions
18
+
19
+ - Ruby 2.5 and 2.6 are no longer supported.
20
+
21
+ ### Bug Fixes
22
+
23
+ - Remove `base64` runtime dependency: https://github.com/davishmcclurg/json_schemer/pull/182
24
+ - Relax `uuid` format validation: https://github.com/davishmcclurg/json_schemer/pull/183
25
+
26
+ [2.3.0]: https://github.com/davishmcclurg/json_schemer/releases/tag/v2.3.0
27
+
3
28
  ## [2.2.0] - 2024-03-02
4
29
 
5
- ## Bug Fixes
30
+ ### Bug Fixes
6
31
 
7
32
  - Support symbol keys when accessing original instance: https://github.com/davishmcclurg/json_schemer/commit/d52c130e9967919c6cf1c9dbc3f0babfb8b01cf8
8
33
  - Support custom keywords in nested schemas: https://github.com/davishmcclurg/json_schemer/commit/93c85a5006981347c7e9a4c11b73c6bdb65d8ba2
@@ -11,7 +36,7 @@
11
36
  - Handle parse errors during schema validation: https://github.com/davishmcclurg/json_schemer/pull/171
12
37
  - Follow refs when finding default property values: https://github.com/davishmcclurg/json_schemer/pull/175
13
38
 
14
- ## Features
39
+ ### Features
15
40
 
16
41
  - Global configuration with `Configuration` object: https://github.com/davishmcclurg/json_schemer/pull/170
17
42
  - Symbol key property defaults with `insert_property_defaults: :symbol`: https://github.com/davishmcclurg/json_schemer/commit/a72473dc84199107ddedc8998950e5b82273232a
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- json_schemer (2.2.1)
5
- base64
4
+ json_schemer (2.4.0)
6
5
  bigdecimal
7
6
  hana (~> 1.3)
8
7
  regexp_parser (~> 2.0)
@@ -12,38 +11,34 @@ GEM
12
11
  remote: https://rubygems.org/
13
12
  specs:
14
13
  base64 (0.2.0)
15
- bigdecimal (3.1.7)
16
- bigdecimal (3.1.7-java)
17
- concurrent-ruby (1.2.2)
18
- csv (3.2.8)
19
- docile (1.4.0)
14
+ bigdecimal (3.1.9)
15
+ bigdecimal (3.1.9-java)
16
+ concurrent-ruby (1.3.5)
17
+ csv (3.3.2)
18
+ docile (1.4.1)
20
19
  hana (1.3.7)
21
- i18n (1.14.1)
20
+ i18n (1.14.6)
22
21
  concurrent-ruby (~> 1.0)
23
22
  i18n-debug (1.2.0)
24
23
  i18n (< 2)
25
- minitest (5.15.0)
26
- rake (13.1.0)
27
- regexp_parser (2.9.0)
24
+ minitest (5.25.4)
25
+ rake (13.2.1)
26
+ regexp_parser (2.10.0)
28
27
  simplecov (0.22.0)
29
28
  docile (~> 1.1)
30
29
  simplecov-html (~> 0.11)
31
30
  simplecov_json_formatter (~> 0.1)
32
- simplecov-html (0.12.3)
31
+ simplecov-html (0.13.1)
33
32
  simplecov_json_formatter (0.1.4)
34
- simpleidn (0.2.1)
35
- unf (~> 0.1.4)
36
- unf (0.1.4)
37
- unf_ext
38
- unf (0.1.4-java)
39
- unf_ext (0.0.9.1)
33
+ simpleidn (0.2.3)
40
34
 
41
35
  PLATFORMS
42
36
  java
43
37
  ruby
44
38
 
45
39
  DEPENDENCIES
46
- bundler (~> 2.0)
40
+ base64
41
+ bundler (~> 2.4.0)
47
42
  csv
48
43
  i18n
49
44
  i18n-debug
@@ -53,4 +48,4 @@ DEPENDENCIES
53
48
  simplecov (~> 0.22)
54
49
 
55
50
  BUNDLED WITH
56
- 2.3.27
51
+ 2.4.22
data/README.md CHANGED
@@ -95,18 +95,6 @@ JSONSchemer.validate_schema({ '$id' => '#invalid' }).to_a
95
95
  # "type"=>"pattern",
96
96
  # "error"=>"string at `/$id` does not match pattern: ^[^#]*#?$"}]
97
97
 
98
- JSONSchemer.schema({ '$id' => 'valid' }).valid_schema?
99
- # => true
100
-
101
- JSONSchemer.schema({ '$id' => '#invalid' }).validate_schema.to_a
102
- # => [{"data"=>"#invalid",
103
- # "data_pointer"=>"/$id",
104
- # "schema"=>{"$ref"=>"#/$defs/uriReferenceString", "$comment"=>"Non-empty fragments not allowed.", "pattern"=>"^[^#]*#?$"},
105
- # "schema_pointer"=>"/properties/$id",
106
- # "root_schema"=>{...meta schema},
107
- # "type"=>"pattern",
108
- # "error"=>"string at `/$id` does not match pattern: ^[^#]*#?$"}]
109
-
110
98
  # subschemas
111
99
 
112
100
  schema = {
data/json_schemer.gemspec CHANGED
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.required_ruby_version = '>= 2.5'
23
+ spec.required_ruby_version = '>= 2.7'
24
24
 
25
- spec.add_development_dependency "bundler", "~> 2.0"
25
+ spec.add_development_dependency "base64"
26
+ spec.add_development_dependency "bundler", "~> 2.4.0"
26
27
  spec.add_development_dependency "rake", "~> 13.0"
27
28
  spec.add_development_dependency "minitest", "~> 5.0"
28
29
  spec.add_development_dependency "simplecov", "~> 0.22"
@@ -30,7 +31,6 @@ Gem::Specification.new do |spec|
30
31
  spec.add_development_dependency "i18n"
31
32
  spec.add_development_dependency "i18n-debug"
32
33
 
33
- spec.add_runtime_dependency "base64"
34
34
  spec.add_runtime_dependency "bigdecimal"
35
35
  spec.add_runtime_dependency "hana", "~> 1.3"
36
36
  spec.add_runtime_dependency "regexp_parser", "~> 2.0"
@@ -2,7 +2,7 @@
2
2
  module JSONSchemer
3
3
  module ContentEncoding
4
4
  BASE64 = proc do |instance|
5
- [true, Base64.strict_decode64(instance)]
5
+ [true, instance.unpack1("m0")]
6
6
  rescue
7
7
  [false, nil]
8
8
  end
@@ -4,6 +4,10 @@ module JSONSchemer
4
4
  module Vocab
5
5
  module Validation
6
6
  class Type < Keyword
7
+ def self.valid_integer?(instance)
8
+ instance.is_a?(Numeric) && (instance.is_a?(Integer) || instance.floor == instance)
9
+ end
10
+
7
11
  def error(formatted_instance_location:, **)
8
12
  case value
9
13
  when 'null'
@@ -45,7 +49,7 @@ module JSONSchemer
45
49
  when 'number'
46
50
  instance.is_a?(Numeric)
47
51
  when 'integer'
48
- instance.is_a?(Numeric) && (instance.is_a?(Integer) || instance.floor == instance)
52
+ self.class.valid_integer?(instance)
49
53
  when 'string'
50
54
  instance.is_a?(String)
51
55
  when 'array'
@@ -4,9 +4,8 @@ module JSONSchemer
4
4
  module Vocab
5
5
  module Validation
6
6
  class Type < Draft202012::Vocab::Validation::Type
7
- private
8
- def valid_type(type, instance)
9
- type == 'integer' ? instance.is_a?(Integer) : super
7
+ def self.valid_integer?(instance)
8
+ instance.is_a?(Integer)
10
9
  end
11
10
  end
12
11
 
@@ -74,7 +74,7 @@ module JSONSchemer
74
74
  IP_REGEX = /\A[\h:.]+\z/.freeze
75
75
  INVALID_QUERY_REGEX = /\s/.freeze
76
76
  IRI_ESCAPE_REGEX = /[^[:ascii:]]/
77
- UUID_REGEX = /\A\h{8}-\h{4}-\h{4}-[89AB]\h{3}-\h{12}\z/i
77
+ UUID_REGEX = /\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/i
78
78
  NIL_UUID = '00000000-0000-0000-0000-000000000000'
79
79
  BINARY_TO_PERCENT_ENCODED = 256.times.each_with_object({}) do |byte, out|
80
80
  out[-byte.chr(Encoding::BINARY)] = -sprintf('%%%02X', byte)
@@ -4,8 +4,10 @@ module JSONSchemer
4
4
  BASE_URI = URI('json-schemer://openapi30/schema')
5
5
  # https://spec.openapis.org/oas/v3.0.3#data-types
6
6
  FORMATS = OpenAPI31::FORMATS.merge(
7
- 'byte' => proc { |instance, _value| ContentEncoding::BASE64.call(instance).first },
8
- 'binary' => proc { |instance, _value| instance.is_a?(String) && instance.encoding == Encoding::BINARY },
7
+ 'int32' => proc { |instance, _format| !Draft4::Vocab::Validation::Type.valid_integer?(instance) || instance.floor.bit_length < 32 },
8
+ 'int64' => proc { |instance, _format| !Draft4::Vocab::Validation::Type.valid_integer?(instance) || instance.floor.bit_length < 64 },
9
+ 'byte' => proc { |instance, _value| !instance.is_a?(String) || ContentEncoding::BASE64.call(instance).first },
10
+ 'binary' => proc { |instance, _value| !instance.is_a?(String) || instance.encoding == Encoding::BINARY },
9
11
  'date' => Format::DATE
10
12
  )
11
13
  SCHEMA = {
@@ -4,10 +4,10 @@ module JSONSchemer
4
4
  BASE_URI = URI('https://spec.openapis.org/oas/3.1/dialect/base')
5
5
  # https://spec.openapis.org/oas/v3.1.0#data-types
6
6
  FORMATS = {
7
- 'int32' => proc { |instance, _format| instance.is_a?(Integer) && instance.bit_length <= 32 },
8
- 'int64' => proc { |instance, _format| instance.is_a?(Integer) && instance.bit_length <= 64 },
9
- 'float' => proc { |instance, _format| instance.is_a?(Float) },
10
- 'double' => proc { |instance, _format| instance.is_a?(Float) },
7
+ 'int32' => proc { |instance, _format| !Draft202012::Vocab::Validation::Type.valid_integer?(instance) || instance.floor.bit_length < 32 },
8
+ 'int64' => proc { |instance, _format| !Draft202012::Vocab::Validation::Type.valid_integer?(instance) || instance.floor.bit_length < 64 },
9
+ 'float' => proc { |instance, _format| !instance.is_a?(Numeric) || instance.is_a?(Float) },
10
+ 'double' => proc { |instance, _format| !instance.is_a?(Numeric) || instance.is_a?(Float) },
11
11
  'password' => proc { |_instance, _format| true }
12
12
  }
13
13
  SCHEMA = {
@@ -100,7 +100,7 @@ module JSONSchemer
100
100
  end
101
101
 
102
102
  def validate(instance, instance_location, keyword_location, context)
103
- return result(instance, instance_location, keyword_location, true) unless instance.is_a?(Hash)
103
+ return result(instance, instance_location, keyword_location, false) unless instance.is_a?(Hash)
104
104
 
105
105
  property_name = value.fetch('propertyName')
106
106
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module JSONSchemer
3
+ class Resources
4
+ def initialize
5
+ @resources = {}
6
+ end
7
+
8
+ def [](uri)
9
+ @resources[uri.to_s]
10
+ end
11
+
12
+ def []=(uri, resource)
13
+ @resources[uri.to_s] = resource
14
+ end
15
+
16
+ def fetch(uri)
17
+ @resources.fetch(uri.to_s)
18
+ end
19
+
20
+ def key?(uri)
21
+ @resources.key?(uri.to_s)
22
+ end
23
+ end
24
+ end
@@ -15,6 +15,7 @@ module JSONSchemer
15
15
  end
16
16
  end
17
17
 
18
+ extend Forwardable
18
19
  include Output
19
20
 
20
21
  SCHEMA_KEYWORD_CLASS = Draft202012::Vocab::Core::Schema
@@ -44,7 +45,8 @@ module JSONSchemer
44
45
 
45
46
  attr_accessor :base_uri, :meta_schema, :keywords, :keyword_order
46
47
  attr_reader :value, :parent, :root, :configuration, :parsed
47
- attr_reader :vocabulary, :format, :formats, :content_encodings, :content_media_types, :custom_keywords, :before_property_validation, :after_property_validation, :insert_property_defaults
48
+ def_delegators :@configuration, :vocabulary, :format, :formats, :content_encodings, :content_media_types, :before_property_validation, :after_property_validation, :insert_property_defaults
49
+ def_delegator :@configuration, :keywords, :custom_keywords
48
50
 
49
51
  def initialize(
50
52
  value,
@@ -75,24 +77,27 @@ module JSONSchemer
75
77
  @root = root
76
78
  @keyword = keyword
77
79
  @schema = self
78
- @configuration = configuration
79
80
  @base_uri = base_uri
80
81
  @meta_schema = meta_schema
81
- @vocabulary = vocabulary
82
- @format = format
83
- @formats = formats
84
- @content_encodings = content_encodings
85
- @content_media_types = content_media_types
86
- @custom_keywords = keywords
87
- @before_property_validation = Array(before_property_validation)
88
- @after_property_validation = Array(after_property_validation)
89
- @insert_property_defaults = insert_property_defaults
90
- @property_default_resolver = property_default_resolver
91
- @original_ref_resolver = ref_resolver
92
- @original_regexp_resolver = regexp_resolver
93
- @output_format = output_format
94
- @resolve_enumerators = resolve_enumerators
95
- @access_mode = access_mode
82
+ @configuration = Configuration.new(
83
+ :base_uri => base_uri,
84
+ :meta_schema => meta_schema,
85
+ :vocabulary => vocabulary,
86
+ :format => format,
87
+ :formats => formats,
88
+ :content_encodings => content_encodings,
89
+ :content_media_types => content_media_types,
90
+ :keywords => keywords,
91
+ :before_property_validation => Array(before_property_validation),
92
+ :after_property_validation => Array(after_property_validation),
93
+ :insert_property_defaults => insert_property_defaults,
94
+ :property_default_resolver => property_default_resolver,
95
+ :ref_resolver => ref_resolver,
96
+ :regexp_resolver => regexp_resolver,
97
+ :output_format => output_format,
98
+ :resolve_enumerators => resolve_enumerators,
99
+ :access_mode => access_mode
100
+ )
96
101
  @parsed = parse
97
102
  end
98
103
 
@@ -100,7 +105,7 @@ module JSONSchemer
100
105
  validate(instance, :output_format => 'flag', **options).fetch('valid')
101
106
  end
102
107
 
103
- def validate(instance, output_format: @output_format, resolve_enumerators: @resolve_enumerators, access_mode: @access_mode)
108
+ def validate(instance, output_format: @configuration.output_format, resolve_enumerators: @configuration.resolve_enumerators, access_mode: @configuration.access_mode)
104
109
  instance_location = Location.root
105
110
  context = Context.new(instance, [], nil, (!insert_property_defaults && output_format == 'flag'), access_mode)
106
111
  result = validate_instance(deep_stringify_keys(instance), instance_location, root_keyword_location, context)
@@ -328,7 +333,7 @@ module JSONSchemer
328
333
  end
329
334
 
330
335
  def resources
331
- @resources ||= { :lexical => {}, :dynamic => {} }
336
+ @resources ||= { :lexical => Resources.new, :dynamic => Resources.new }
332
337
  end
333
338
 
334
339
  def error(formatted_instance_location:, **options)
@@ -340,17 +345,17 @@ module JSONSchemer
340
345
  end
341
346
 
342
347
  def ref_resolver
343
- @ref_resolver ||= @original_ref_resolver == 'net/http' ? CachedResolver.new(&NET_HTTP_REF_RESOLVER) : @original_ref_resolver
348
+ @ref_resolver ||= @configuration.ref_resolver == 'net/http' ? CachedResolver.new(&NET_HTTP_REF_RESOLVER) : @configuration.ref_resolver
344
349
  end
345
350
 
346
351
  def regexp_resolver
347
- @regexp_resolver ||= case @original_regexp_resolver
352
+ @regexp_resolver ||= case @configuration.regexp_resolver
348
353
  when 'ecma'
349
354
  CachedResolver.new(&ECMA_REGEXP_RESOLVER)
350
355
  when 'ruby'
351
356
  CachedResolver.new(&RUBY_REGEXP_RESOLVER)
352
357
  else
353
- @original_regexp_resolver
358
+ @configuration.regexp_resolver
354
359
  end
355
360
  end
356
361
 
@@ -407,7 +412,11 @@ module JSONSchemer
407
412
  end
408
413
 
409
414
  def property_default_resolver
410
- @property_default_resolver ||= insert_property_defaults == :symbol ? SYMBOL_PROPERTY_DEFAULT_RESOLVER : DEFAULT_PROPERTY_DEFAULT_RESOLVER
415
+ @property_default_resolver ||= if @configuration.property_default_resolver
416
+ @configuration.property_default_resolver
417
+ else
418
+ insert_property_defaults == :symbol ? SYMBOL_PROPERTY_DEFAULT_RESOLVER : DEFAULT_PROPERTY_DEFAULT_RESOLVER
419
+ end
411
420
  end
412
421
 
413
422
  def resolve_enumerators!(output)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module JSONSchemer
3
- VERSION = '2.2.1'
3
+ VERSION = '2.4.0'
4
4
  end
data/lib/json_schemer.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'base64'
3
2
  require 'bigdecimal'
3
+ require 'forwardable'
4
4
  require 'ipaddr'
5
5
  require 'json'
6
6
  require 'net/http'
@@ -60,6 +60,7 @@ require 'json_schemer/openapi30/vocab/base'
60
60
  require 'json_schemer/openapi30/vocab'
61
61
  require 'json_schemer/openapi'
62
62
  require 'json_schemer/configuration'
63
+ require 'json_schemer/resources'
63
64
  require 'json_schemer/schema'
64
65
 
65
66
  module JSONSchemer
@@ -104,12 +105,16 @@ module JSONSchemer
104
105
 
105
106
  WINDOWS_URI_PATH_REGEX = /\A\/[a-z]:/i
106
107
 
108
+ # :nocov:
109
+ URI_PARSER = URI.const_defined?(:RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::DEFAULT_PARSER
110
+ # :nocov:
111
+
107
112
  FILE_URI_REF_RESOLVER = proc do |uri|
108
113
  raise InvalidFileURI, 'must use `file` scheme' unless uri.scheme == 'file'
109
114
  raise InvalidFileURI, 'cannot have a host (use `file:///`)' if uri.host && !uri.host.empty?
110
115
  path = uri.path
111
116
  path = path[1..-1] if path.match?(WINDOWS_URI_PATH_REGEX)
112
- JSON.parse(File.read(URI::DEFAULT_PARSER.unescape(path)))
117
+ JSON.parse(File.read(URI_PARSER.unescape(path)))
113
118
  end
114
119
 
115
120
  class << self
@@ -247,7 +252,7 @@ module JSONSchemer
247
252
  when String
248
253
  JSON.parse(schema)
249
254
  when Pathname
250
- base_uri = URI.parse(File.join('file:', URI::DEFAULT_PARSER.escape(schema.realpath.to_s)))
255
+ base_uri = URI.parse(File.join('file:', URI_PARSER.escape(schema.realpath.to_s)))
251
256
  options[:base_uri] = base_uri
252
257
  if options.key?(:ref_resolver)
253
258
  FILE_URI_REF_RESOLVER.call(base_uri)
metadata CHANGED
@@ -1,29 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schemer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Harsha
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
10
+ date: 2025-02-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: bundler
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
30
  - - "~>"
18
31
  - !ruby/object:Gem::Version
19
- version: '2.0'
32
+ version: 2.4.0
20
33
  type: :development
21
34
  prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
37
  - - "~>"
25
38
  - !ruby/object:Gem::Version
26
- version: '2.0'
39
+ version: 2.4.0
27
40
  - !ruby/object:Gem::Dependency
28
41
  name: rake
29
42
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +121,6 @@ dependencies:
108
121
  - - ">="
109
122
  - !ruby/object:Gem::Version
110
123
  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
124
  - !ruby/object:Gem::Dependency
126
125
  name: bigdecimal
127
126
  requirement: !ruby/object:Gem::Requirement
@@ -178,7 +177,6 @@ dependencies:
178
177
  - - "~>"
179
178
  - !ruby/object:Gem::Version
180
179
  version: '0.2'
181
- description:
182
180
  email:
183
181
  - davishmcclurg@gmail.com
184
182
  executables:
@@ -246,6 +244,7 @@ files:
246
244
  - lib/json_schemer/openapi31/vocab.rb
247
245
  - lib/json_schemer/openapi31/vocab/base.rb
248
246
  - lib/json_schemer/output.rb
247
+ - lib/json_schemer/resources.rb
249
248
  - lib/json_schemer/result.rb
250
249
  - lib/json_schemer/schema.rb
251
250
  - lib/json_schemer/version.rb
@@ -253,7 +252,6 @@ homepage: https://github.com/davishmcclurg/json_schemer
253
252
  licenses:
254
253
  - MIT
255
254
  metadata: {}
256
- post_install_message:
257
255
  rdoc_options: []
258
256
  require_paths:
259
257
  - lib
@@ -261,15 +259,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
261
259
  requirements:
262
260
  - - ">="
263
261
  - !ruby/object:Gem::Version
264
- version: '2.5'
262
+ version: '2.7'
265
263
  required_rubygems_version: !ruby/object:Gem::Requirement
266
264
  requirements:
267
265
  - - ">="
268
266
  - !ruby/object:Gem::Version
269
267
  version: '0'
270
268
  requirements: []
271
- rubygems_version: 3.5.3
272
- signing_key:
269
+ rubygems_version: 3.6.2
273
270
  specification_version: 4
274
271
  summary: JSON Schema validator. Supports drafts 4, 6, 7, 2019-09, 2020-12, OpenAPI
275
272
  3.0, and OpenAPI 3.1.