json-schema 2.7.0 → 2.8.0

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
  SHA1:
3
- metadata.gz: f440a3f87c238f6b4a3ba8fb93818ae17affd9fc
4
- data.tar.gz: 910c2401bf9e11a0d57dfe8e47086c876e7e48b4
3
+ metadata.gz: 598f5a11313e53a8a719936d8bbe08bddb6d07b3
4
+ data.tar.gz: d9a1cde316718f0fdfd042f737bcb3d1b637d313
5
5
  SHA512:
6
- metadata.gz: dbf3e34a23275021b9cf6f9d9ccb5aa86956182411f55e93fa3cd29b30d24b01d18c30e191cb31dd5a1c71b780188b08cb261d7248e203bcfa74d9b1f104f273
7
- data.tar.gz: a5311ed16954806392eabe157ccd92d9b54b3e20e228697c31bc0042f1455c0b7e4bff6a2b33db473a93116020fdcf9a6296e621cb55638287103142e54c3839
6
+ metadata.gz: e28327d9e15a145572c347c2124a9645a4e303cbad1641dde72dad47536f2071eb0fcc9628b439bb24d6f109cf1fd146d8cba2728236d2a88717a29db20fe875
7
+ data.tar.gz: b414849b2f9e74d7bfcfb0198ff11739caeb08eebd4929a5bd6e445b1a89c3b79c916b453f2c3d9cde05719f997e5b6eac0835534cbacc2bdb9016c296c8228f
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ [![Gem Version](https://badge.fury.io/rb/json-schema.svg)](https://badge.fury.io/rb/json-schema)
1
2
  [![Travis](https://travis-ci.org/ruby-json-schema/json-schema.svg?branch=master)](https://travis-ci.org/ruby-json-schema/json-schema)
2
3
  [![Code Climate](https://codeclimate.com/github/ruby-json-schema/json-schema/badges/gpa.svg)](https://codeclimate.com/github/ruby-json-schema/json-schema)
3
4
 
@@ -290,17 +291,17 @@ class BitwiseAndAttribute < JSON::Schema::Attribute
290
291
  def self.validate(current_schema, data, fragments, processor, validator, options = {})
291
292
  if data.is_a?(Integer) && data & current_schema.schema['bitwise-and'].to_i == 0
292
293
  message = "The property '#{build_fragment(fragments)}' did not evaluate to true when bitwise-AND'd with #{current_schema.schema['bitwise-or']}"
293
- raise JSON::Schema::ValidationError.new(message, fragments, current_schema)
294
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
294
295
  end
295
296
  end
296
297
  end
297
298
 
298
- class ExtendedSchema < JSON::Schema::Validator
299
+ class ExtendedSchema < JSON::Schema::Draft3
299
300
  def initialize
300
301
  super
301
- extend_schema_definition("http://json-schema.org/draft-03/schema#")
302
302
  @attributes["bitwise-and"] = BitwiseAndAttribute
303
- @uri = URI.parse("http://test.com/test.json")
303
+ @uri = JSON::Util::URI.parse("http://test.com/test.json")
304
+ @names = ["http://test.com/test.json"]
304
305
  end
305
306
 
306
307
  JSON::Validator.register_validator(self.new)
@@ -38,6 +38,16 @@ module JSON
38
38
  valid_classes = TYPE_CLASS_MAPPINGS.fetch(type) { return true }
39
39
  Array(valid_classes).any? { |c| data.is_a?(c) }
40
40
  end
41
+
42
+ # Lookup Schema type of given class instance
43
+ def self.type_of_data(data)
44
+ type, _ = TYPE_CLASS_MAPPINGS.map { |k,v| [k,v] }.sort_by { |(_, v)|
45
+ -Array(v).map { |klass| klass.ancestors.size }.max
46
+ }.find { |(_, v)|
47
+ Array(v).any? { |klass| data.kind_of?(klass) }
48
+ }
49
+ type
50
+ end
41
51
  end
42
52
  end
43
53
  end
@@ -29,7 +29,7 @@ module JSON
29
29
  end
30
30
 
31
31
  if !valid || !errors.empty?
32
- message = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match all of the required schemas"
32
+ message = "The property '#{build_fragment(fragments)}' of type #{type_of_data(data)} did not match all of the required schemas"
33
33
  validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
34
34
  validation_errors(processor).last.sub_errors = errors
35
35
  end
@@ -37,7 +37,7 @@ module JSON
37
37
  end
38
38
 
39
39
  if !valid
40
- message = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match one or more of the required schemas"
40
+ message = "The property '#{build_fragment(fragments)}' of type #{type_of_data(data)} did not match one or more of the required schemas"
41
41
  validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
42
42
  validation_errors(processor).last.sub_errors = errors
43
43
  end
@@ -14,7 +14,7 @@ module JSON
14
14
  if options[:record_errors] && errors_copy.length != processor.validation_errors.length
15
15
  processor.validation_errors.replace(errors_copy)
16
16
  else
17
- message = "The property '#{build_fragment(fragments)}' of type #{data.class} matched the disallowed schema"
17
+ message = "The property '#{build_fragment(fragments)}' of type #{type_of_data(data)} matched the disallowed schema"
18
18
  failed = false
19
19
  end
20
20
  rescue ValidationError
@@ -43,9 +43,9 @@ module JSON
43
43
  end
44
44
 
45
45
  if validation_error_count == one_of.length
46
- message = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match any of the required schemas"
46
+ message = "The property '#{build_fragment(fragments)}' of type #{type_of_data(data)} did not match any of the required schemas"
47
47
  else
48
- message = "The property '#{build_fragment(fragments)}' of type #{data.class} matched more than one of the required schemas"
48
+ message = "The property '#{build_fragment(fragments)}' of type #{type_of_data(data)} matched more than one of the required schemas"
49
49
  end
50
50
 
51
51
  validation_error(processor, message, fragments, current_schema, self, options[:record_errors]) if message
@@ -22,23 +22,7 @@ module JSON
22
22
  def self.get_referenced_uri_and_schema(s, current_schema, validator)
23
23
  uri,schema = nil,nil
24
24
 
25
- temp_uri = JSON::Util::URI.parse(s['$ref'])
26
- temp_uri.defer_validation do
27
- if temp_uri.relative?
28
- temp_uri.merge!(current_schema.uri)
29
- # Check for absolute path
30
- path, fragment = s['$ref'].split("#")
31
- if path.nil? || path == ''
32
- temp_uri.path = current_schema.uri.path
33
- elsif path[0,1] == "/"
34
- temp_uri.path = Pathname.new(path).cleanpath.to_s
35
- else
36
- temp_uri.join!(path)
37
- end
38
- temp_uri.fragment = fragment
39
- end
40
- temp_uri.fragment = "" if temp_uri.fragment.nil? || temp_uri.fragment.empty?
41
- end
25
+ temp_uri = JSON::Util::URI.normalize_ref(s['$ref'], current_schema.uri)
42
26
 
43
27
  # Grab the parent schema from the schema list
44
28
  schema_key = temp_uri.to_s.split("#")[0] + "#"
@@ -68,16 +68,6 @@ module JSON
68
68
  def self.list_types(types)
69
69
  types.map { |type| type.is_a?(String) ? type : '(schema)' }.join(', ')
70
70
  end
71
-
72
- # Lookup Schema type of given class instance
73
- def self.type_of_data(data)
74
- type, _ = TYPE_CLASS_MAPPINGS.map { |k,v| [k,v] }.sort_by { |(_, v)|
75
- -Array(v).map { |klass| klass.ancestors.size }.max
76
- }.find { |(_, v)|
77
- Array(v).any? { |klass| data.kind_of?(klass) }
78
- }
79
- type
80
- end
81
71
  end
82
72
  end
83
73
  end
@@ -17,7 +17,7 @@ module JSON
17
17
  message = format(
18
18
  "The property '%s' of type %s did not match %s: %s",
19
19
  build_fragment(fragments),
20
- data.class,
20
+ type_of_data(data),
21
21
  union ? 'one or more of the following types' : 'the following type',
22
22
  types
23
23
  )
@@ -21,7 +21,7 @@ module JSON
21
21
 
22
22
  # If there is a $schema on this schema, use it to determine which validator to use
23
23
  if @schema['$schema']
24
- @validator = JSON::Validator.validator_for(@schema['$schema'])
24
+ @validator = JSON::Validator.validator_for_uri(@schema['$schema'])
25
25
  elsif parent_validator
26
26
  @validator = parent_validator
27
27
  else
@@ -52,7 +52,7 @@ module JSON
52
52
  def to_array_schema
53
53
  array_schema = { 'type' => 'array', 'items' => schema }
54
54
  array_schema['$schema'] = schema['$schema'] unless schema['$schema'].nil?
55
- JSON::Schema.new(array_schema, uri, validator)
55
+ self.class.new(array_schema, uri, validator)
56
56
  end
57
57
 
58
58
  def to_s
@@ -14,7 +14,8 @@ module JSON
14
14
  end
15
15
 
16
16
  def extend_schema_definition(schema_uri)
17
- validator = JSON::Validator.validator_for(schema_uri)
17
+ warn "[DEPRECATION NOTICE] The preferred way to extend a Validator is by subclassing, rather than #extend_schema_definition. This method will be removed in version >= 3."
18
+ validator = JSON::Validator.validator_for_uri(schema_uri)
18
19
  @attributes.merge!(validator.attributes)
19
20
  end
20
21
 
@@ -7,14 +7,14 @@ class ArraySet < Array
7
7
  def include?(obj)
8
8
  if !defined? @values
9
9
  @values = Set.new
10
- self.each { |x| @values << convert_to_float_if_fixnum(x) }
10
+ self.each { |x| @values << convert_to_float_if_numeric(x) }
11
11
  end
12
- @values.include?(convert_to_float_if_fixnum(obj))
12
+ @values.include?(convert_to_float_if_numeric(obj))
13
13
  end
14
14
 
15
15
  private
16
16
 
17
- def convert_to_float_if_fixnum(value)
18
- value.is_a?(Fixnum) ? value.to_f : value
17
+ def convert_to_float_if_numeric(value)
18
+ value.is_a?(Numeric) ? value.to_f : value
19
19
  end
20
20
  end
@@ -23,6 +23,43 @@ module JSON
23
23
  normalized_uri
24
24
  end
25
25
 
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?
31
+
32
+ uri = strip_fragment(base.dup).join(ref_uri.path)
33
+ normalized_uri(uri)
34
+ end
35
+
36
+ def self.normalize_ref(ref, base)
37
+ ref_uri = parse(ref)
38
+ base_uri = parse(base)
39
+
40
+ ref_uri.defer_validation do
41
+ if ref_uri.relative?
42
+ ref_uri.merge!(base_uri)
43
+
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
53
+
54
+ ref_uri.fragment = fragment
55
+ end
56
+
57
+ ref_uri.fragment = "" if ref_uri.fragment.nil? || ref_uri.fragment.empty?
58
+ end
59
+
60
+ ref_uri
61
+ end
62
+
26
63
  def self.parse(uri)
27
64
  if uri.is_a?(Addressable::URI)
28
65
  return uri.dup
@@ -63,6 +100,11 @@ module JSON
63
100
 
64
101
  Addressable::URI.unescape(parsed_uri.path)
65
102
  end
103
+
104
+ def self.clear_cache
105
+ @parse_cache = {}
106
+ @normalize_cache = {}
107
+ end
66
108
  end
67
109
  end
68
110
  end
@@ -241,7 +241,6 @@ module JSON
241
241
  alias urn to_uri
242
242
 
243
243
  # Convert into 128-bit unsigned integer
244
- # Typically a Bignum instance, but can be a Fixnum.
245
244
  def to_int
246
245
  tmp = self.raw_bytes.unpack "C*"
247
246
  tmp.inject do |r, i|
@@ -41,9 +41,9 @@ module JSON
41
41
  @options = @@default_opts.clone.merge(opts)
42
42
  @errors = []
43
43
 
44
- validator = JSON::Validator.validator_for_name(@options[:version])
44
+ validator = self.class.validator_for_name(@options[:version])
45
45
  @options[:version] = validator
46
- @options[:schema_reader] ||= JSON::Validator.schema_reader
46
+ @options[:schema_reader] ||= self.class.schema_reader
47
47
 
48
48
  @validation_options = @options[:record_errors] ? {:record_errors => true} : {}
49
49
  @validation_options[:insert_defaults] = true if @options[:insert_defaults]
@@ -58,7 +58,7 @@ module JSON
58
58
  # validate the schema, if requested
59
59
  if @options[:validate_schema]
60
60
  if @base_schema.schema["$schema"]
61
- base_validator = JSON::Validator.validator_for_name(@base_schema.schema["$schema"])
61
+ base_validator = self.class.validator_for_name(@base_schema.schema["$schema"])
62
62
  end
63
63
  metaschema = base_validator ? base_validator.metaschema : validator.metaschema
64
64
  # Don't clear the cache during metaschema validation!
@@ -123,33 +123,25 @@ module JSON
123
123
  end
124
124
  ensure
125
125
  if @validation_options[:clear_cache] == true
126
- Validator.clear_cache
126
+ self.class.clear_cache
127
127
  end
128
128
  if @validation_options[:insert_defaults]
129
- JSON::Validator.merge_missing_values(@data, @original_data)
129
+ self.class.merge_missing_values(@data, @original_data)
130
130
  end
131
131
  end
132
132
 
133
133
  def load_ref_schema(parent_schema, ref)
134
- schema_uri = absolutize_ref_uri(ref, parent_schema.uri)
134
+ schema_uri = JSON::Util::URI.absolutize_ref(ref, parent_schema.uri)
135
135
  return true if self.class.schema_loaded?(schema_uri)
136
136
 
137
+ validator = self.class.validator_for_uri(schema_uri, false)
138
+ schema_uri = JSON::Util::URI.file_uri(validator.metaschema) if validator
139
+
137
140
  schema = @options[:schema_reader].read(schema_uri)
138
141
  self.class.add_schema(schema)
139
142
  build_schemas(schema)
140
143
  end
141
144
 
142
- def absolutize_ref_uri(ref, parent_schema_uri)
143
- ref_uri = JSON::Util::URI.strip_fragment(ref)
144
-
145
- return ref_uri if ref_uri.absolute?
146
- # This is a self reference and thus the schema does not need to be re-loaded
147
- return parent_schema_uri if ref_uri.path.empty?
148
-
149
- uri = JSON::Util::URI.strip_fragment(parent_schema_uri.dup)
150
- Util::URI.normalized_uri(uri.join(ref_uri.path))
151
- end
152
-
153
145
  # Build all schemas with IDs, mapping out the namespace
154
146
  def build_schemas(parent_schema)
155
147
  schema = parent_schema.schema
@@ -225,7 +217,7 @@ module JSON
225
217
  schema_uri = parent_schema.uri.dup
226
218
  schema = JSON::Schema.new(obj, schema_uri, parent_schema.validator)
227
219
  if obj['id']
228
- Validator.add_schema(schema)
220
+ self.class.add_schema(schema)
229
221
  end
230
222
  build_schemas(schema)
231
223
  end
@@ -258,10 +250,14 @@ module JSON
258
250
  end
259
251
 
260
252
  def validate!(schema, data,opts={})
261
- validator = JSON::Validator.new(schema, data, opts)
253
+ validator = new(schema, data, opts)
262
254
  validator.validate
263
255
  end
264
- alias_method 'validate2', 'validate!'
256
+
257
+ def validate2(schema, data, opts={})
258
+ warn "[DEPRECATION NOTICE] JSON::Validator#validate2 has been replaced by JSON::Validator#validate! and will be removed in version >= 3. Please use the #validate! method instead."
259
+ validate!(schema, data, opts)
260
+ end
265
261
 
266
262
  def validate_json!(schema, data, opts={})
267
263
  validate!(schema, data, opts.merge(:json => true))
@@ -277,7 +273,7 @@ module JSON
277
273
 
278
274
  def fully_validate_schema(schema, opts={})
279
275
  data = schema
280
- schema = JSON::Validator.validator_for_name(opts[:version]).metaschema
276
+ schema = validator_for_name(opts[:version]).metaschema
281
277
  fully_validate(schema, data, opts)
282
278
  end
283
279
 
@@ -299,6 +295,7 @@ module JSON
299
295
 
300
296
  def clear_cache
301
297
  @@schemas = {}
298
+ JSON::Util::URI.clear_cache
302
299
  end
303
300
 
304
301
  def schemas
@@ -337,28 +334,34 @@ module JSON
337
334
  @@default_validator
338
335
  end
339
336
 
340
- def validator_for_uri(schema_uri)
337
+ def validator_for_uri(schema_uri, raise_not_found=true)
341
338
  return default_validator unless schema_uri
342
339
  u = JSON::Util::URI.parse(schema_uri)
343
340
  validator = validators["#{u.scheme}://#{u.host}#{u.path}"]
344
- if validator.nil?
341
+ if validator.nil? && raise_not_found
345
342
  raise JSON::Schema::SchemaError.new("Schema not found: #{schema_uri}")
346
343
  else
347
344
  validator
348
345
  end
349
346
  end
350
347
 
351
- def validator_for_name(schema_name)
348
+ def validator_for_name(schema_name, raise_not_found=true)
352
349
  return default_validator unless schema_name
353
- validator = validators_for_names([schema_name]).first
354
- if validator.nil?
350
+ schema_name = schema_name.to_s
351
+ validator = validators.values.detect do |v|
352
+ Array(v.names).include?(schema_name)
353
+ end
354
+ if validator.nil? && raise_not_found
355
355
  raise JSON::Schema::SchemaError.new("The requested JSON schema version is not supported")
356
356
  else
357
357
  validator
358
358
  end
359
359
  end
360
360
 
361
- alias_method :validator_for, :validator_for_uri
361
+ def validator_for(schema_uri)
362
+ warn "[DEPRECATION NOTICE] JSON::Validator#validator_for has been replaced by JSON::Validator#validator_for_uri and will be removed in version >= 3. Please use the #validator_for_uri method instead."
363
+ validator_for_uri(schema_uri)
364
+ end
362
365
 
363
366
  def register_validator(v)
364
367
  @@validators["#{v.uri.scheme}://#{v.uri.host}#{v.uri.path}"] = v
@@ -368,21 +371,24 @@ module JSON
368
371
  @@default_validator = v
369
372
  end
370
373
 
371
- def register_format_validator(format, validation_proc, versions = ["draft1", "draft2", "draft3", "draft4", nil])
374
+ def register_format_validator(format, validation_proc, versions = (@@validators.flat_map{ |k, v| v.names.first } + [nil]))
372
375
  custom_format_validator = JSON::Schema::CustomFormat.new(validation_proc)
373
- validators_for_names(versions).each do |validator|
376
+ versions.each do |version|
377
+ validator = validator_for_name(version)
374
378
  validator.formats[format.to_s] = custom_format_validator
375
379
  end
376
380
  end
377
381
 
378
- def deregister_format_validator(format, versions = ["draft1", "draft2", "draft3", "draft4", nil])
379
- validators_for_names(versions).each do |validator|
382
+ def deregister_format_validator(format, versions = (@@validators.flat_map{ |k, v| v.names.first } + [nil]))
383
+ versions.each do |version|
384
+ validator = validator_for_name(version)
380
385
  validator.formats[format.to_s] = validator.default_formats[format.to_s]
381
386
  end
382
387
  end
383
388
 
384
- def restore_default_formats(versions = ["draft1", "draft2", "draft3", "draft4", nil])
385
- validators_for_names(versions).each do |validator|
389
+ def restore_default_formats(versions = (@@validators.flat_map{ |k, v| v.names.first } + [nil]))
390
+ versions.each do |version|
391
+ validator = validator_for_name(version)
386
392
  validator.formats = validator.default_formats.clone
387
393
  end
388
394
  end
@@ -487,22 +493,6 @@ module JSON
487
493
  @@serializer = lambda{|o| YAML.dump(o) }
488
494
  end
489
495
  end
490
-
491
- private
492
-
493
- def validators_for_names(names)
494
- names = names.map { |name| name.to_s }
495
- [].tap do |memo|
496
- validators.each do |_, validator|
497
- if (validator.names & names).any?
498
- memo << validator
499
- end
500
- end
501
- if names.include?('')
502
- memo << default_validator
503
- end
504
- end
505
- end
506
496
  end
507
497
 
508
498
  private
@@ -532,11 +522,11 @@ module JSON
532
522
  begin
533
523
  # Build a fake URI for this
534
524
  schema_uri = JSON::Util::URI.parse(fake_uuid(schema))
535
- schema = JSON::Schema.new(JSON::Validator.parse(schema), schema_uri, @options[:version])
525
+ schema = JSON::Schema.new(self.class.parse(schema), schema_uri, @options[:version])
536
526
  if @options[:list] && @options[:fragment].nil?
537
527
  schema = schema.to_array_schema
538
528
  end
539
- Validator.add_schema(schema)
529
+ self.class.add_schema(schema)
540
530
  rescue JSON::Schema::JsonParseError
541
531
  # Build a uri for it
542
532
  schema_uri = Util::URI.normalized_uri(schema)
@@ -548,13 +538,13 @@ module JSON
548
538
  schema = schema.to_array_schema
549
539
  end
550
540
 
551
- Validator.add_schema(schema)
541
+ self.class.add_schema(schema)
552
542
  else
553
543
  schema = self.class.schema_for_uri(schema_uri)
554
544
  if @options[:list] && @options[:fragment].nil?
555
545
  schema = schema.to_array_schema
556
546
  schema.uri = JSON::Util::URI.parse(fake_uuid(serialize(schema.schema)))
557
- Validator.add_schema(schema)
547
+ self.class.add_schema(schema)
558
548
  end
559
549
  schema
560
550
  end
@@ -566,7 +556,7 @@ module JSON
566
556
  if @options[:list] && @options[:fragment].nil?
567
557
  schema = schema.to_array_schema
568
558
  end
569
- Validator.add_schema(schema)
559
+ self.class.add_schema(schema)
570
560
  else
571
561
  raise JSON::Schema::SchemaParseError, "Invalid schema - must be either a string or a hash"
572
562
  end
@@ -577,17 +567,17 @@ module JSON
577
567
  def initialize_data(data)
578
568
  if @options[:parse_data]
579
569
  if @options[:json]
580
- data = JSON::Validator.parse(data)
570
+ data = self.class.parse(data)
581
571
  elsif @options[:uri]
582
572
  json_uri = Util::URI.normalized_uri(data)
583
- data = JSON::Validator.parse(custom_open(json_uri))
573
+ data = self.class.parse(custom_open(json_uri))
584
574
  elsif data.is_a?(String)
585
575
  begin
586
- data = JSON::Validator.parse(data)
576
+ data = self.class.parse(data)
587
577
  rescue JSON::Schema::JsonParseError
588
578
  begin
589
579
  json_uri = Util::URI.normalized_uri(data)
590
- data = JSON::Validator.parse(custom_open(json_uri))
580
+ data = self.class.parse(custom_open(json_uri))
591
581
  rescue JSON::Schema::JsonLoadError
592
582
  # Silently discard the error - use the data as-is
593
583
  end
@@ -0,0 +1,56 @@
1
+ require 'json-schema/schema/validator'
2
+
3
+ module JSON
4
+ class Schema
5
+
6
+ class Draft6 < Validator
7
+ def initialize
8
+ super
9
+ @attributes = {
10
+ "type" => JSON::Schema::TypeV4Attribute,
11
+ "allOf" => JSON::Schema::AllOfAttribute,
12
+ "anyOf" => JSON::Schema::AnyOfAttribute,
13
+ "oneOf" => JSON::Schema::OneOfAttribute,
14
+ "not" => JSON::Schema::NotAttribute,
15
+ "disallow" => JSON::Schema::DisallowAttribute,
16
+ "format" => JSON::Schema::FormatAttribute,
17
+ "maximum" => JSON::Schema::MaximumAttribute,
18
+ "minimum" => JSON::Schema::MinimumAttribute,
19
+ "minItems" => JSON::Schema::MinItemsAttribute,
20
+ "maxItems" => JSON::Schema::MaxItemsAttribute,
21
+ "minProperties" => JSON::Schema::MinPropertiesAttribute,
22
+ "maxProperties" => JSON::Schema::MaxPropertiesAttribute,
23
+ "uniqueItems" => JSON::Schema::UniqueItemsAttribute,
24
+ "minLength" => JSON::Schema::MinLengthAttribute,
25
+ "maxLength" => JSON::Schema::MaxLengthAttribute,
26
+ "multipleOf" => JSON::Schema::MultipleOfAttribute,
27
+ "enum" => JSON::Schema::EnumAttribute,
28
+ "properties" => JSON::Schema::PropertiesV4Attribute,
29
+ "required" => JSON::Schema::RequiredAttribute,
30
+ "pattern" => JSON::Schema::PatternAttribute,
31
+ "patternProperties" => JSON::Schema::PatternPropertiesAttribute,
32
+ "additionalProperties" => JSON::Schema::AdditionalPropertiesAttribute,
33
+ "items" => JSON::Schema::ItemsAttribute,
34
+ "additionalItems" => JSON::Schema::AdditionalItemsAttribute,
35
+ "dependencies" => JSON::Schema::DependenciesV4Attribute,
36
+ "extends" => JSON::Schema::ExtendsAttribute,
37
+ "$ref" => JSON::Schema::RefAttribute
38
+ }
39
+ @default_formats = {
40
+ 'date-time' => DateTimeV4Format,
41
+ 'ipv4' => IP4Format,
42
+ 'ipv6' => IP6Format,
43
+ 'uri' => UriFormat
44
+ }
45
+ @formats = @default_formats.clone
46
+ @uri = JSON::Util::URI.parse("http://json-schema.org/draft-06/schema#")
47
+ @names = ["draft6", "http://json-schema.org/draft-06/schema#"]
48
+ @metaschema_name = "draft-06.json"
49
+ end
50
+
51
+ JSON::Validator.register_validator(self.new)
52
+ JSON::Validator.register_default_validator(self.new)
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class HyperDraft3 < Draft3
5
+ def initialize
6
+ super
7
+ @uri = JSON::Util::URI.parse("http://json-schema.org/draft-03/hyper-schema#")
8
+ end
9
+
10
+ JSON::Validator.register_validator(self.new)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class HyperDraft6 < Draft6
5
+ def initialize
6
+ super
7
+ @uri = JSON::Util::URI.parse("http://json-schema.org/draft-06/hyper-schema#")
8
+ end
9
+
10
+ JSON::Validator.register_validator(self.new)
11
+ end
12
+ end
13
+ end
@@ -1,174 +1,174 @@
1
1
  {
2
- "$schema" : "http://json-schema.org/draft-03/schema#",
3
- "id" : "http://json-schema.org/draft-03/schema#",
4
- "type" : "object",
5
-
6
- "properties" : {
7
- "type" : {
8
- "type" : ["string", "array"],
9
- "items" : {
10
- "type" : ["string", {"$ref" : "#"}]
11
- },
12
- "uniqueItems" : true,
13
- "default" : "any"
14
- },
15
-
16
- "properties" : {
17
- "type" : "object",
18
- "additionalProperties" : {"$ref" : "#"},
19
- "default" : {}
20
- },
21
-
22
- "patternProperties" : {
23
- "type" : "object",
24
- "additionalProperties" : {"$ref" : "#"},
25
- "default" : {}
26
- },
27
-
28
- "additionalProperties" : {
29
- "type" : [{"$ref" : "#"}, "boolean"],
30
- "default" : {}
31
- },
32
-
33
- "items" : {
34
- "type" : [{"$ref" : "#"}, "array"],
35
- "items" : {"$ref" : "#"},
36
- "default" : {}
37
- },
38
-
39
- "additionalItems" : {
40
- "type" : [{"$ref" : "#"}, "boolean"],
41
- "default" : {}
42
- },
43
-
44
- "required" : {
45
- "type" : "boolean",
46
- "default" : false
47
- },
48
-
49
- "dependencies" : {
50
- "type" : "object",
51
- "additionalProperties" : {
52
- "type" : ["string", "array", {"$ref" : "#"}],
53
- "items" : {
54
- "type" : "string"
55
- }
56
- },
57
- "default" : {}
58
- },
59
-
60
- "minimum" : {
61
- "type" : "number"
62
- },
63
-
64
- "maximum" : {
65
- "type" : "number"
66
- },
67
-
68
- "exclusiveMinimum" : {
69
- "type" : "boolean",
70
- "default" : false
71
- },
72
-
73
- "exclusiveMaximum" : {
74
- "type" : "boolean",
75
- "default" : false
76
- },
77
-
78
- "minItems" : {
79
- "type" : "integer",
80
- "minimum" : 0,
81
- "default" : 0
82
- },
83
-
84
- "maxItems" : {
85
- "type" : "integer",
86
- "minimum" : 0
87
- },
88
-
89
- "uniqueItems" : {
90
- "type" : "boolean",
91
- "default" : false
92
- },
93
-
94
- "pattern" : {
95
- "type" : "string",
96
- "format" : "regex"
97
- },
98
-
99
- "minLength" : {
100
- "type" : "integer",
101
- "minimum" : 0,
102
- "default" : 0
103
- },
104
-
105
- "maxLength" : {
106
- "type" : "integer"
107
- },
108
-
109
- "enum" : {
110
- "type" : "array",
111
- "minItems" : 1,
112
- "uniqueItems" : true
113
- },
114
-
115
- "default" : {
116
- "type" : "any"
117
- },
118
-
119
- "title" : {
120
- "type" : "string"
121
- },
122
-
123
- "description" : {
124
- "type" : "string"
125
- },
126
-
127
- "format" : {
128
- "type" : "string"
129
- },
130
-
131
- "divisibleBy" : {
132
- "type" : "number",
133
- "minimum" : 0,
134
- "exclusiveMinimum" : true,
135
- "default" : 1
136
- },
137
-
138
- "disallow" : {
139
- "type" : ["string", "array"],
140
- "items" : {
141
- "type" : ["string", {"$ref" : "#"}]
142
- },
143
- "uniqueItems" : true
144
- },
145
-
146
- "extends" : {
147
- "type" : [{"$ref" : "#"}, "array"],
148
- "items" : {"$ref" : "#"},
149
- "default" : {}
150
- },
151
-
152
- "id" : {
153
- "type" : "string",
154
- "format" : "uri"
155
- },
156
-
157
- "$ref" : {
158
- "type" : "string",
159
- "format" : "uri"
160
- },
161
-
162
- "$schema" : {
163
- "type" : "string",
164
- "format" : "uri"
165
- }
166
- },
167
-
168
- "dependencies" : {
169
- "exclusiveMinimum" : "minimum",
170
- "exclusiveMaximum" : "maximum"
171
- },
172
-
173
- "default" : {}
174
- }
2
+ "$schema": "http://json-schema.org/draft-03/schema#",
3
+ "id": "http://json-schema.org/draft-03/schema#",
4
+ "type": "object",
5
+
6
+ "properties": {
7
+ "type": {
8
+ "type": [ "string", "array" ],
9
+ "items": {
10
+ "type": [ "string", { "$ref": "#" } ]
11
+ },
12
+ "uniqueItems": true,
13
+ "default": "any"
14
+ },
15
+
16
+ "properties": {
17
+ "type": "object",
18
+ "additionalProperties": { "$ref": "#" },
19
+ "default": {}
20
+ },
21
+
22
+ "patternProperties": {
23
+ "type": "object",
24
+ "additionalProperties": { "$ref": "#" },
25
+ "default": {}
26
+ },
27
+
28
+ "additionalProperties": {
29
+ "type": [ { "$ref": "#" }, "boolean" ],
30
+ "default": {}
31
+ },
32
+
33
+ "items": {
34
+ "type": [ { "$ref": "#" }, "array" ],
35
+ "items": { "$ref": "#" },
36
+ "default": {}
37
+ },
38
+
39
+ "additionalItems": {
40
+ "type": [ { "$ref": "#" }, "boolean" ],
41
+ "default": {}
42
+ },
43
+
44
+ "required": {
45
+ "type": "boolean",
46
+ "default": false
47
+ },
48
+
49
+ "dependencies": {
50
+ "type": "object",
51
+ "additionalProperties": {
52
+ "type": [ "string", "array", { "$ref": "#" } ],
53
+ "items": {
54
+ "type": "string"
55
+ }
56
+ },
57
+ "default": {}
58
+ },
59
+
60
+ "minimum": {
61
+ "type": "number"
62
+ },
63
+
64
+ "maximum": {
65
+ "type": "number"
66
+ },
67
+
68
+ "exclusiveMinimum": {
69
+ "type": "boolean",
70
+ "default": false
71
+ },
72
+
73
+ "exclusiveMaximum": {
74
+ "type": "boolean",
75
+ "default": false
76
+ },
77
+
78
+ "minItems": {
79
+ "type": "integer",
80
+ "minimum": 0,
81
+ "default": 0
82
+ },
83
+
84
+ "maxItems": {
85
+ "type": "integer",
86
+ "minimum": 0
87
+ },
88
+
89
+ "uniqueItems": {
90
+ "type": "boolean",
91
+ "default": false
92
+ },
93
+
94
+ "pattern": {
95
+ "type": "string",
96
+ "format": "regex"
97
+ },
98
+
99
+ "minLength": {
100
+ "type": "integer",
101
+ "minimum": 0,
102
+ "default": 0
103
+ },
104
+
105
+ "maxLength": {
106
+ "type": "integer"
107
+ },
108
+
109
+ "enum": {
110
+ "type": "array",
111
+ "minItems": 1,
112
+ "uniqueItems": true
113
+ },
114
+
115
+ "default": {
116
+ "type": "any"
117
+ },
118
+
119
+ "title": {
120
+ "type": "string"
121
+ },
122
+
123
+ "description": {
124
+ "type": "string"
125
+ },
126
+
127
+ "format": {
128
+ "type": "string"
129
+ },
130
+
131
+ "divisibleBy": {
132
+ "type": "number",
133
+ "minimum": 0,
134
+ "exclusiveMinimum": true,
135
+ "default": 1
136
+ },
137
+
138
+ "disallow": {
139
+ "type": [ "string", "array" ],
140
+ "items": {
141
+ "type": [ "string", { "$ref": "#" } ]
142
+ },
143
+ "uniqueItems": true
144
+ },
145
+
146
+ "extends": {
147
+ "type": [ { "$ref": "#" }, "array" ],
148
+ "items": { "$ref": "#" },
149
+ "default": {}
150
+ },
151
+
152
+ "id": {
153
+ "type": "string",
154
+ "format": "uri"
155
+ },
156
+
157
+ "$ref": {
158
+ "type": "string",
159
+ "format": "uri"
160
+ },
161
+
162
+ "$schema": {
163
+ "type": "string",
164
+ "format": "uri"
165
+ }
166
+ },
167
+
168
+ "dependencies": {
169
+ "exclusiveMinimum": "minimum",
170
+ "exclusiveMaximum": "maximum"
171
+ },
172
+
173
+ "default": {}
174
+ }
@@ -0,0 +1,150 @@
1
+ {
2
+ "id": "http://json-schema.org/draft-06/schema#",
3
+ "$schema": "http://json-schema.org/draft-06/schema#",
4
+ "description": "Core schema meta-schema",
5
+ "definitions": {
6
+ "schemaArray": {
7
+ "type": "array",
8
+ "minItems": 1,
9
+ "items": { "$ref": "#" }
10
+ },
11
+ "positiveInteger": {
12
+ "type": "integer",
13
+ "minimum": 0
14
+ },
15
+ "positiveIntegerDefault0": {
16
+ "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
17
+ },
18
+ "simpleTypes": {
19
+ "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
20
+ },
21
+ "stringArray": {
22
+ "type": "array",
23
+ "items": { "type": "string" },
24
+ "minItems": 1,
25
+ "uniqueItems": true
26
+ }
27
+ },
28
+ "type": "object",
29
+ "properties": {
30
+ "id": {
31
+ "type": "string",
32
+ "format": "uri"
33
+ },
34
+ "$schema": {
35
+ "type": "string",
36
+ "format": "uri"
37
+ },
38
+ "title": {
39
+ "type": "string"
40
+ },
41
+ "description": {
42
+ "type": "string"
43
+ },
44
+ "default": {},
45
+ "multipleOf": {
46
+ "type": "number",
47
+ "minimum": 0,
48
+ "exclusiveMinimum": true
49
+ },
50
+ "maximum": {
51
+ "type": "number"
52
+ },
53
+ "exclusiveMaximum": {
54
+ "type": "boolean",
55
+ "default": false
56
+ },
57
+ "minimum": {
58
+ "type": "number"
59
+ },
60
+ "exclusiveMinimum": {
61
+ "type": "boolean",
62
+ "default": false
63
+ },
64
+ "maxLength": { "$ref": "#/definitions/positiveInteger" },
65
+ "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
66
+ "pattern": {
67
+ "type": "string",
68
+ "format": "regex"
69
+ },
70
+ "additionalItems": {
71
+ "anyOf": [
72
+ { "type": "boolean" },
73
+ { "$ref": "#" }
74
+ ],
75
+ "default": {}
76
+ },
77
+ "items": {
78
+ "anyOf": [
79
+ { "$ref": "#" },
80
+ { "$ref": "#/definitions/schemaArray" }
81
+ ],
82
+ "default": {}
83
+ },
84
+ "maxItems": { "$ref": "#/definitions/positiveInteger" },
85
+ "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
86
+ "uniqueItems": {
87
+ "type": "boolean",
88
+ "default": false
89
+ },
90
+ "maxProperties": { "$ref": "#/definitions/positiveInteger" },
91
+ "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
92
+ "required": { "$ref": "#/definitions/stringArray" },
93
+ "additionalProperties": {
94
+ "anyOf": [
95
+ { "type": "boolean" },
96
+ { "$ref": "#" }
97
+ ],
98
+ "default": {}
99
+ },
100
+ "definitions": {
101
+ "type": "object",
102
+ "additionalProperties": { "$ref": "#" },
103
+ "default": {}
104
+ },
105
+ "properties": {
106
+ "type": "object",
107
+ "additionalProperties": { "$ref": "#" },
108
+ "default": {}
109
+ },
110
+ "patternProperties": {
111
+ "type": "object",
112
+ "additionalProperties": { "$ref": "#" },
113
+ "default": {}
114
+ },
115
+ "dependencies": {
116
+ "type": "object",
117
+ "additionalProperties": {
118
+ "anyOf": [
119
+ { "$ref": "#" },
120
+ { "$ref": "#/definitions/stringArray" }
121
+ ]
122
+ }
123
+ },
124
+ "enum": {
125
+ "type": "array",
126
+ "minItems": 1,
127
+ "uniqueItems": true
128
+ },
129
+ "type": {
130
+ "anyOf": [
131
+ { "$ref": "#/definitions/simpleTypes" },
132
+ {
133
+ "type": "array",
134
+ "items": { "$ref": "#/definitions/simpleTypes" },
135
+ "minItems": 1,
136
+ "uniqueItems": true
137
+ }
138
+ ]
139
+ },
140
+ "allOf": { "$ref": "#/definitions/schemaArray" },
141
+ "anyOf": { "$ref": "#/definitions/schemaArray" },
142
+ "oneOf": { "$ref": "#/definitions/schemaArray" },
143
+ "not": { "$ref": "#" }
144
+ },
145
+ "dependencies": {
146
+ "exclusiveMaximum": [ "maximum" ],
147
+ "exclusiveMinimum": [ "minimum" ]
148
+ },
149
+ "default": {}
150
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenny Hoxworth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-29 00:00:00.000000000 Z
11
+ date: 2017-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -142,13 +142,17 @@ files:
142
142
  - lib/json-schema/validators/draft2.rb
143
143
  - lib/json-schema/validators/draft3.rb
144
144
  - lib/json-schema/validators/draft4.rb
145
+ - lib/json-schema/validators/draft6.rb
145
146
  - lib/json-schema/validators/hyper-draft1.rb
146
147
  - lib/json-schema/validators/hyper-draft2.rb
148
+ - lib/json-schema/validators/hyper-draft3.rb
147
149
  - lib/json-schema/validators/hyper-draft4.rb
150
+ - lib/json-schema/validators/hyper-draft6.rb
148
151
  - resources/draft-01.json
149
152
  - resources/draft-02.json
150
153
  - resources/draft-03.json
151
154
  - resources/draft-04.json
155
+ - resources/draft-06.json
152
156
  homepage: http://github.com/ruby-json-schema/json-schema/tree/master
153
157
  licenses:
154
158
  - MIT
@@ -169,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
173
  version: '1.8'
170
174
  requirements: []
171
175
  rubyforge_project:
172
- rubygems_version: 2.5.1
176
+ rubygems_version: 2.6.8
173
177
  signing_key:
174
178
  specification_version: 4
175
179
  summary: Ruby JSON Schema Validator