json-schema 4.1.1 → 5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b6a5072f20570ae4262df13648a1b637b5db2c02cf881c2728277ea5a203f6d
4
- data.tar.gz: 4b92633224b1338d58918e7a2d2f5d3e117fee03409455d6f47ea51c8bef7b18
3
+ metadata.gz: 9c842fa3f98c7ebbdde9ebdbceb44bb1eab1f282f6a5c6c0008e0aac0eca92b6
4
+ data.tar.gz: d6f98215e98ce89c007d158594078d7135574543c10a82e953dcb3feed6dc9fb
5
5
  SHA512:
6
- metadata.gz: 9b5301a03a3fb7d3a43c275858df22d41cface2a465ff2fcfda28c9528f491e6a8f302fbbf52232de68e31d6a32540b9ad8a392fab82ec2b2113980e83119b72
7
- data.tar.gz: 16f57a870e6b75280f5376d57785ad94500cbfd50bc3ea9ba01df486d0938c36907114780bacfc4860359e73d7adf87ce5c73205ef52ebea1f829b64d7630906
6
+ metadata.gz: f744aa3ddcf37191afd16c7424b97d4e610f5da6f0c5ccbdad8fdcc10ee95f1d130f165142da95394ea09a758907b6bf6157343a1796477ed75a340c17217b65
7
+ data.tar.gz: 1a0d01bfb3595f4286603e9c31d3c578aff55b4abc37952c41e448d02a7ea22c37a7ba5bc8cbb85809f4395992b0da8c73ec79109e6d15338b8802cf96465dbb
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ruby JSON Schema Validator
2
2
 
3
- [![License](https://img.shields.io/github/license/voxpupuli/json-schema.svg)](https://github.com/voxpupuli/json-schema/blob/master/LICENSE)
3
+ [![License](https://img.shields.io/github/license/voxpupuli/json-schema.svg)](https://github.com/voxpupuli/json-schema/blob/master/LICENSE.md)
4
4
  [![Test](https://github.com/voxpupuli/json-schema/actions/workflows/test.yml/badge.svg)](https://github.com/voxpupuli/json-schema/actions/workflows/test.yml)
5
5
  [![Release](https://github.com/voxpupuli/json-schema/actions/workflows/release.yml/badge.svg)](https://github.com/voxpupuli/json-schema/actions/workflows/release.yml)
6
6
  [![RubyGem Version](https://img.shields.io/gem/v/json-schema.svg)](https://rubygems.org/gems/json-schema)
@@ -80,7 +80,7 @@ that the `$schema` attribute takes precedence over the `:version` option during
80
80
  parsing and validation.
81
81
 
82
82
  For further information on json schema itself refer to <a
83
- href="http://spacetelescope.github.io/understanding-json-schema/">Understanding
83
+ href="https://json-schema.org/understanding-json-schema">Understanding
84
84
  JSON Schema</a>.
85
85
 
86
86
  Basic Usage
@@ -505,7 +505,7 @@ Existing pull requests and issues were transferred, please fork and continue to
505
505
 
506
506
  # License
507
507
 
508
- This gem is licensed unter the [MIT license](LICENSE.md).
508
+ This gem is licensed under the [MIT license](LICENSE.md).
509
509
 
510
510
  ## Release information
511
511
 
@@ -12,7 +12,7 @@ module JSON
12
12
  if schema
13
13
  schema.validate(data, fragments, processor, options)
14
14
  elsif uri
15
- message = "The extended schema '#{uri.to_s}' cannot be found"
15
+ message = "The extended schema '#{uri}' cannot be found"
16
16
  validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
17
17
  else
18
18
  message = "The property '#{build_fragment(fragments)}' was not a valid schema"
@@ -10,7 +10,7 @@ module JSON
10
10
  regexp = Regexp.new(property)
11
11
 
12
12
  # Check each key in the data hash to see if it matches the regex
13
- data.each do |key, value|
13
+ data.each do |key, _value|
14
14
  next unless regexp.match(key)
15
15
 
16
16
  schema = JSON::Schema.new(property_schema, current_schema.uri, validator)
@@ -36,12 +36,12 @@ module JSON
36
36
  # When noAdditionalProperties is true, ensure no undefined properties exist in the data
37
37
  return unless options[:noAdditionalProperties] == true && !schema.key?('additionalProperties')
38
38
 
39
- diff = data.select do |k, v|
39
+ diff = data.select do |k, _v|
40
40
  k = k.to_s
41
41
 
42
42
  if schema.has_key?('patternProperties')
43
43
  match = false
44
- schema['patternProperties'].each do |property, property_schema|
44
+ schema['patternProperties'].each do |property, _property_schema|
45
45
  regexp = Regexp.new(property)
46
46
  if regexp.match(k)
47
47
  match = true
@@ -11,7 +11,7 @@ module JSON
11
11
  if schema
12
12
  schema.validate(data, fragments, processor, options)
13
13
  elsif uri
14
- message = "The referenced schema '#{uri.to_s}' cannot be found"
14
+ message = "The referenced schema '#{uri}' cannot be found"
15
15
  validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
16
16
  else
17
17
  message = "The property '#{build_fragment(fragments)}' was not a valid schema"
@@ -44,7 +44,7 @@ module JSON
44
44
  end
45
45
  fragment_path = fragment_path + "/#{fragment}"
46
46
  if target_schema.nil?
47
- raise SchemaError, "The fragment '#{fragment_path}' does not exist on schema #{ref_schema.uri.to_s}"
47
+ raise SchemaError, "The fragment '#{fragment_path}' does not exist on schema #{ref_schema.uri}"
48
48
  end
49
49
  end
50
50
  end
@@ -9,7 +9,7 @@ module JSON
9
9
  schema = current_schema.schema
10
10
  defined_properties = schema['properties']
11
11
 
12
- schema['required'].each do |property, property_schema|
12
+ schema['required'].each do |property, _property_schema|
13
13
  next if data.has_key?(property.to_s)
14
14
 
15
15
  prop_defaults = options[:insert_defaults] &&
@@ -20,7 +20,7 @@ module JSON
20
20
  messages = ["#{message}. The schema specific errors were:\n"]
21
21
  @sub_errors.each do |subschema, errors|
22
22
  messages.push "- #{subschema}:"
23
- messages.concat Array(errors).map { |e| "#{INDENT}- #{e.to_string(subschema_level + 1)}" }
23
+ messages.concat(Array(errors).map { |e| "#{INDENT}- #{e.to_string(subschema_level + 1)}" })
24
24
  end
25
25
  messages.map { |m| (INDENT * subschema_level) + m }.join("\n")
26
26
  end
@@ -20,7 +20,7 @@ module JSON
20
20
  end
21
21
 
22
22
  def validate(current_schema, data, fragments, processor, options = {})
23
- current_schema.schema.each do |attr_name, attribute|
23
+ current_schema.schema.each do |attr_name, _attribute|
24
24
  if @attributes.has_key?(attr_name.to_s)
25
25
  @attributes[attr_name.to_s].validate(current_schema, data, fragments, processor, self, options)
26
26
  end
@@ -35,7 +35,7 @@ module JSON
35
35
  def self.stringify(schema)
36
36
  case schema
37
37
  when Hash then
38
- schema.map { |key, value| [key.to_s, stringify(schema[key])] }.to_h
38
+ schema.map { |key, _value| [key.to_s, stringify(schema[key])] }.to_h
39
39
  when Array then
40
40
  schema.map do |schema_item|
41
41
  stringify(schema_item)
@@ -1,109 +1,132 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'addressable/uri'
2
4
 
3
5
  module JSON
4
6
  module Util
5
- module URI
7
+ # @api private
8
+ class URI < Addressable::URI
6
9
  SUPPORTED_PROTOCOLS = %w(http https ftp tftp sftp ssh svn+ssh telnet nntp gopher wais ldap prospero)
7
10
 
8
- def self.normalized_uri(uri, base_path = Dir.pwd)
9
- @normalize_cache ||= {}
10
- normalized_uri = @normalize_cache[uri]
11
-
12
- if !normalized_uri
13
- normalized_uri = parse(uri)
14
- # Check for absolute path
15
- if normalized_uri.relative?
16
- data = normalized_uri
17
- data = File.join(base_path, data) if data.path[0, 1] != '/'
18
- normalized_uri = file_uri(data)
19
- end
20
- @normalize_cache[uri] = normalized_uri.freeze
21
- end
22
-
23
- normalized_uri
24
- end
11
+ class << self
12
+ alias unescape_uri unescape
25
13
 
26
- def self.absolutize_ref(ref, base)
27
- ref_uri = strip_fragment(ref.dup)
28
-
29
- return ref_uri if ref_uri.absolute?
30
- return parse(base) if ref_uri.path.empty?
14
+ # @param uri [String, Addressable::URI]
15
+ # @return [Addressable::URI, nil]
16
+ def parse(uri)
17
+ super(uri)
18
+ rescue Addressable::URI::InvalidURIError => e
19
+ raise JSON::Schema::UriError, e.message
20
+ end
31
21
 
32
- uri = strip_fragment(base.dup).join(ref_uri.path)
33
- normalized_uri(uri)
34
- end
22
+ # @param uri [String, Addressable::URI]
23
+ # @return [Addressable::URI, nil]
24
+ def file_uri(uri)
25
+ convert_path(parse(uri).path)
26
+ end
35
27
 
36
- def self.normalize_ref(ref, base)
37
- ref_uri = parse(ref)
38
- base_uri = parse(base)
28
+ # @param uri [String, Addressable::URI
29
+ # @return [String]
30
+ def unescaped_path(uri)
31
+ parse(uri).unescaped_path
32
+ end
39
33
 
40
- ref_uri.defer_validation do
41
- if ref_uri.relative?
42
- ref_uri.merge!(base_uri)
34
+ # Strips the fragment from the URI.
35
+ # @param uri [String, Addressable::URI]
36
+ # @return [Addressable::URI]
37
+ def strip_fragment(uri)
38
+ parse(uri).strip_fragment
39
+ end
43
40
 
44
- # Check for absolute path
45
- path, fragment = ref.to_s.split('#')
46
- if path.nil? || path == ''
47
- ref_uri.path = base_uri.path
48
- elsif path[0, 1] == '/'
49
- ref_uri.path = Pathname.new(path).cleanpath.to_s
50
- else
51
- ref_uri.join!(path)
52
- end
41
+ # @param uri [String, Addressable::URI]
42
+ # @return [Addressable::URI]
43
+ def normalized_uri(uri, base_path = Dir.pwd)
44
+ parse(uri).normalized_uri(base_path)
45
+ end
53
46
 
54
- ref_uri.fragment = fragment
55
- end
47
+ # Normalizes the reference URI based on the provided base URI
48
+ #
49
+ # @param ref [String, Addressable::URI]
50
+ # @param base [String, Addressable::URI]
51
+ # @return [Addressable::URI]
52
+ def normalize_ref(ref, base)
53
+ parse(ref).normalize_ref(base)
54
+ end
56
55
 
57
- ref_uri.fragment = '' if ref_uri.fragment.nil? || ref_uri.fragment.empty?
56
+ def absolutize_ref(ref, base)
57
+ parse(ref).absolutize_ref(base)
58
58
  end
59
+ end
59
60
 
60
- ref_uri
61
+ # Unencodes any percent encoded characters within a path component.
62
+ #
63
+ # @return [String]
64
+ def unescaped_path
65
+ self.class.unescape_component(path)
61
66
  end
62
67
 
63
- def self.parse(uri)
64
- if uri.is_a?(Addressable::URI)
65
- uri.dup
68
+ # Strips the fragment from the URI.
69
+ # @return [Addressable::URI] a new instance of URI without a fragment
70
+ def strip_fragment
71
+ if fragment.nil? || fragment.empty?
72
+ self
66
73
  else
67
- @parse_cache ||= {}
68
- parsed_uri = @parse_cache[uri]
69
- if parsed_uri
70
- parsed_uri.dup
71
- else
72
- @parse_cache[uri] = Addressable::URI.parse(uri)
73
- end
74
+ merge(fragment: '')
74
75
  end
75
- rescue Addressable::URI::InvalidURIError => e
76
- raise JSON::Schema::UriError, e.message
77
76
  end
78
77
 
79
- def self.strip_fragment(uri)
80
- parsed_uri = parse(uri)
81
- if parsed_uri.fragment.nil? || parsed_uri.fragment.empty?
82
- parsed_uri
78
+ # Normalizes the URI based on the provided base path.
79
+ #
80
+ # @param base_path [String] the base path to use for relative URIs. Defaults to the current working directory.
81
+ # @return [Addressable::URI] the normalized URI or nil
82
+ def normalized_uri(base_path = Dir.pwd)
83
+ if relative?
84
+ if path[0, 1] == '/'
85
+ self.class.file_uri(self)
86
+ else
87
+ self.class.file_uri(File.join(base_path, self))
88
+ end
83
89
  else
84
- parsed_uri.merge(fragment: '')
90
+ self
85
91
  end
86
92
  end
87
93
 
88
- def self.file_uri(uri)
89
- parsed_uri = parse(uri)
94
+ # @param base [Addressable::URI, String]
95
+ # @return [Addressable::URI]
96
+ def normalize_ref(base)
97
+ base_uri = self.class.parse(base)
98
+ defer_validation do
99
+ if relative?
100
+ # Check for absolute path
101
+ path, fragment = to_s.split('#')
102
+ merge!(base_uri)
90
103
 
91
- Addressable::URI.convert_path(parsed_uri.path)
92
- end
104
+ if path.nil? || path == ''
105
+ self.path = base_uri.path
106
+ elsif path[0, 1] == '/'
107
+ self.path = Pathname.new(path).cleanpath.to_s
108
+ else
109
+ join!(path)
110
+ end
93
111
 
94
- def self.unescape_uri(uri)
95
- Addressable::URI.unescape(uri)
96
- end
112
+ self.fragment = fragment
113
+ end
97
114
 
98
- def self.unescaped_path(uri)
99
- parsed_uri = parse(uri)
115
+ self.fragment = '' if self.fragment.nil? || self.fragment.empty?
116
+ end
100
117
 
101
- Addressable::URI.unescape(parsed_uri.path)
118
+ self
102
119
  end
103
120
 
104
- def self.clear_cache
105
- @parse_cache = {}
106
- @normalize_cache = {}
121
+ # @param base [Addressable::URI, String]
122
+ # @return [Addressable::URI]
123
+ def absolutize_ref(base)
124
+ ref = strip_fragment
125
+ if ref.absolute?
126
+ ref
127
+ else
128
+ self.class.strip_fragment(base).join(ref.path).normalized_uri
129
+ end
107
130
  end
108
131
  end
109
132
  end
@@ -36,8 +36,7 @@ module JSON
36
36
  private_class_method :new
37
37
 
38
38
  class << self
39
- # :nodoc
40
- def mask19 v, str
39
+ def mask v, str
41
40
  nstr = str.bytes.to_a
42
41
  version = [0, 16, 32, 48, 64, 80][v]
43
42
  nstr[6] &= 0b00001111
@@ -46,31 +45,12 @@ module JSON
46
45
  # nstr[7] |= 0b01010000
47
46
  nstr[8] &= 0b00111111
48
47
  nstr[8] |= 0b10000000
49
- str = ''
48
+ str = +''
50
49
  nstr.each { |s| str << s.chr }
51
50
  str
52
51
  end
53
52
 
54
- # :nodoc
55
- def mask18 v, str
56
- version = [0, 16, 32, 48, 64, 80][v]
57
- str[6] &= 0b00001111
58
- str[6] |= version
59
- # str[7] &= 0b00001111
60
- # str[7] |= 0b01010000
61
- str[8] &= 0b00111111
62
- str[8] |= 0b10000000
63
- str
64
- end
65
-
66
- def mask v, str
67
- if RUBY_VERSION >= '1.9.0'
68
- mask19 v, str
69
- else
70
- mask18 v, str
71
- end
72
- end
73
- private :mask, :mask18, :mask19
53
+ private :mask
74
54
 
75
55
  # UUID generation using SHA1. Recommended over create_md5.
76
56
  # Namespace object is another UUID, some of them are pre-defined below.
@@ -153,14 +133,10 @@ module JSON
153
133
  str = sha1.digest
154
134
  r = rand 14 # 20-6
155
135
  node = str[r, 6] || str
156
- if RUBY_VERSION >= '1.9.0'
157
- nnode = node.bytes.to_a
158
- nnode[0] |= 0x01
159
- node = ''
160
- nnode.each { |s| node << s.chr }
161
- else
162
- node[0] |= 0x01 # multicast bit
163
- end
136
+ nnode = node.bytes.to_a
137
+ nnode[0] |= 0x01
138
+ node = ''
139
+ nnode.each { |s| node << s.chr }
164
140
  k = rand 0x40000
165
141
  open STATE_FILE, 'w' do |fp|
166
142
  fp.flock IO::LOCK_EX
@@ -177,7 +153,7 @@ module JSON
177
153
  if t.nil? then
178
154
  # UUID epoch is 1582/Oct/15
179
155
  tt = Time.now
180
- t = tt.to_i * 10000000 + tt.tv_usec * 10 + 0x01B21DD213814000
156
+ t = (tt.to_i * 10000000) + (tt.tv_usec * 10) + 0x01B21DD213814000
181
157
  end
182
158
  c = c.succ # important; increment here
183
159
  write_state fp, c, m
@@ -244,7 +220,7 @@ module JSON
244
220
  def to_int
245
221
  tmp = raw_bytes.unpack 'C*'
246
222
  tmp.inject do |r, i|
247
- r * 256 | i
223
+ (r * 256) | i
248
224
  end
249
225
  end
250
226
  alias to_i to_int
@@ -260,7 +236,7 @@ module JSON
260
236
  end
261
237
 
262
238
  # Two UUIDs are said to be equal if and only if their (byte-order
263
- # canonicalized) integer representations are equivallent. Refer RFC4122 for
239
+ # canonicalized) integer representations are equivalent. Refer RFC4122 for
264
240
  # details.
265
241
  def == other
266
242
  to_i == other.to_i
@@ -5,6 +5,7 @@ require 'digest/sha1'
5
5
  require 'date'
6
6
  require 'thread'
7
7
  require 'timeout'
8
+ require 'stringio'
8
9
  require 'yaml'
9
10
 
10
11
  require 'json-schema/schema/reader'
@@ -179,7 +180,7 @@ module JSON
179
180
  %w[definitions properties patternProperties].each do |key|
180
181
  next unless value = schema[key]
181
182
 
182
- value.each do |k, inner_schema|
183
+ value.each do |_k, inner_schema|
183
184
  handle_schema(parent_schema, inner_schema)
184
185
  end
185
186
  end
@@ -299,7 +300,6 @@ module JSON
299
300
 
300
301
  def clear_cache
301
302
  @@schemas = {}
302
- JSON::Util::URI.clear_cache
303
303
  end
304
304
 
305
305
  def schemas
@@ -377,7 +377,7 @@ module JSON
377
377
  @@default_validator = v
378
378
  end
379
379
 
380
- def register_format_validator(format, validation_proc, versions = (@@validators.flat_map { |k, v| v.names.first } + [nil]))
380
+ def register_format_validator(format, validation_proc, versions = (@@validators.flat_map { |_k, v| v.names.first } + [nil]))
381
381
  custom_format_validator = JSON::Schema::CustomFormat.new(validation_proc)
382
382
  versions.each do |version|
383
383
  validator = validator_for_name(version)
@@ -385,14 +385,14 @@ module JSON
385
385
  end
386
386
  end
387
387
 
388
- def deregister_format_validator(format, versions = (@@validators.flat_map { |k, v| v.names.first } + [nil]))
388
+ def deregister_format_validator(format, versions = (@@validators.flat_map { |_k, v| v.names.first } + [nil]))
389
389
  versions.each do |version|
390
390
  validator = validator_for_name(version)
391
391
  validator.formats[format.to_s] = validator.default_formats[format.to_s]
392
392
  end
393
393
  end
394
394
 
395
- def restore_default_formats(versions = (@@validators.flat_map { |k, v| v.names.first } + [nil]))
395
+ def restore_default_formats(versions = (@@validators.flat_map { |_k, v| v.names.first } + [nil]))
396
396
  versions.each do |version|
397
397
  validator = validator_for_name(version)
398
398
  validator.formats = validator.default_formats.clone
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 5.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenny Hoxworth
@@ -9,78 +9,92 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-15 00:00:00.000000000 Z
12
+ date: 2024-12-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
15
+ name: minitest
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: '5.0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: '5.0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: minitest
29
+ name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '5.0'
34
+ version: '13.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '5.0'
41
+ version: '13.0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rake
43
+ name: voxpupuli-rubocop
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 3.0.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: 3.0.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: webmock
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: '3.23'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '3.23'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: addressable
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '2.8'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ">="
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '2.8'
84
+ - !ruby/object:Gem::Dependency
85
+ name: bigdecimal
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '3.1'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '3.1'
84
98
  description:
85
99
  email: voxpupuli@groups.io
86
100
  executables: []
@@ -172,10 +186,14 @@ files:
172
186
  - resources/draft-03.json
173
187
  - resources/draft-04.json
174
188
  - resources/draft-06.json
175
- homepage: http://github.com/voxpupuli/json-schema/
189
+ homepage: https://github.com/voxpupuli/json-schema/
176
190
  licenses:
177
191
  - MIT
178
- metadata: {}
192
+ metadata:
193
+ source_code_uri: https://github.com/voxpupuli/json-schema/
194
+ changelog_uri: https://github.com/voxpupuli/json-schema//blob/master/CHANGELOG.md
195
+ bug_tracker_uri: https://github.com/voxpupuli/json-schema//issues
196
+ funding_uri: https://github.com/sponsors/voxpupuli
179
197
  post_install_message:
180
198
  rdoc_options: []
181
199
  require_paths:
@@ -184,14 +202,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
202
  requirements:
185
203
  - - ">="
186
204
  - !ruby/object:Gem::Version
187
- version: '2.5'
205
+ version: '2.7'
188
206
  required_rubygems_version: !ruby/object:Gem::Requirement
189
207
  requirements:
190
208
  - - ">="
191
209
  - !ruby/object:Gem::Version
192
- version: '2.5'
210
+ version: '0'
193
211
  requirements: []
194
- rubygems_version: 3.3.26
212
+ rubygems_version: 3.5.22
195
213
  signing_key:
196
214
  specification_version: 4
197
215
  summary: Ruby JSON Schema Validator