json_schema 0.8.0 → 0.9.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
  SHA1:
3
- metadata.gz: c1033f10897ed2983a37fcaec049ced9da6348fa
4
- data.tar.gz: f02430273ad024f1fca2de84555d0d922b9c193e
3
+ metadata.gz: b4d9fa48c12abc2fe791ec053a7069ed2dd3dbdf
4
+ data.tar.gz: 285f81709fce34c3422adbe16929dcdb9932fe1f
5
5
  SHA512:
6
- metadata.gz: b65e70751cce8c9526237494fd5e2996a75c36759a81533bd377329ada10949f23d05d372f03e4d8045b53658181e0faf33a6760f1728e1d9cf3f9df3dcacd57
7
- data.tar.gz: d71350a50a87d62f09d8ea4665c912597d3ed3c723bc62248c468ad238eb53b8748c4f52754b98ff1050845e176b1e0e104eaaabbe1bec12326dbe75bcf0b0f3
6
+ metadata.gz: 859c229811d914bf648667291c952a87d3a19af4daafcf76f9e03844c511b3c818cdeb117c34673c12031a45b5e0c1e0997a2b52090ad585f8137ba972c300f3
7
+ data.tar.gz: 1757e0c6ef2e29ac529221f758d90ed06561614ea6c6f3539f8d4d75789c303d62f7a1445efcebbc439d3f9f86381d5d35284a7314cf25c0b59d8bdaaab94976
data/README.md CHANGED
@@ -19,6 +19,9 @@ require "json_schema"
19
19
  schema_data = JSON.parse(File.read("schema.json"))
20
20
  schema = JsonSchema.parse!(schema_data)
21
21
 
22
+ # expand $ref nodes - raise SchemaError if unable to resolve
23
+ schema.expand_references!
24
+
22
25
  # validate some data - raise ValidationError if it doesn't conform
23
26
  data = JSON.parse(File.read("data.json"))
24
27
  schema.validate!(data)
@@ -18,12 +18,13 @@ module JsonSchema
18
18
  end
19
19
 
20
20
  class ValidationError < SchemaError
21
- attr_accessor :path, :sub_errors
21
+ attr_accessor :data, :path, :sub_errors
22
22
 
23
- def initialize(schema, path, message, type, sub_errors = nil)
23
+ def initialize(schema, path, message, type, sub_errors = nil, data: nil)
24
24
  super(schema, message, type)
25
25
  @path = path
26
26
  @sub_errors = sub_errors
27
+ @data = data
27
28
  end
28
29
 
29
30
  def pointer
@@ -144,7 +144,7 @@ module JsonSchema
144
144
  validate_data(subschema, data, errors, path)
145
145
  end
146
146
  message = %{Not all subschemas of "allOf" matched.}
147
- errors << ValidationError.new(schema, path, message, :all_of_failed) if !valid
147
+ errors << ValidationError.new(schema, path, message, :all_of_failed, data: data) if !valid
148
148
  valid
149
149
  end
150
150
 
@@ -161,7 +161,7 @@ module JsonSchema
161
161
 
162
162
  unless subschemata_validity.any? { |valid| valid == true }
163
163
  message = %{No subschema in "anyOf" matched.}
164
- errors << ValidationError.new(schema, path, message, :any_of_failed, sub_errors)
164
+ errors << ValidationError.new(schema, path, message, :any_of_failed, sub_errors, data: data)
165
165
  return false
166
166
  end
167
167
 
@@ -208,7 +208,7 @@ module JsonSchema
208
208
  true
209
209
  else
210
210
  message = %{#{data} is not a valid #{schema.format}.}
211
- errors << ValidationError.new(schema, path, message, :invalid_format)
211
+ errors << ValidationError.new(schema, path, message, :invalid_format, data: data)
212
212
  false
213
213
  end
214
214
  end
@@ -219,7 +219,7 @@ module JsonSchema
219
219
  true
220
220
  else
221
221
  message = %{#{data} is not a member of #{schema.enum}.}
222
- errors << ValidationError.new(schema, path, message, :invalid_type)
222
+ errors << ValidationError.new(schema, path, message, :invalid_type, data: data)
223
223
  false
224
224
  end
225
225
  end
@@ -248,7 +248,7 @@ module JsonSchema
248
248
  %{ required; only #{data.size} } +
249
249
  (data.size == 1 ? "was" : "were") +
250
250
  %{ supplied.}
251
- errors << ValidationError.new(schema, path, message, :min_items_failed)
251
+ errors << ValidationError.new(schema, path, message, :min_items_failed, data: data)
252
252
  false
253
253
  elsif data.size > schema.items.count && !schema.additional_items?
254
254
  message = %{No more than #{schema.items.count} item} +
@@ -256,7 +256,7 @@ module JsonSchema
256
256
  %{ allowed; #{data.size} } +
257
257
  (data.size > 1 ? "were" : "was") +
258
258
  %{ supplied.}
259
- errors << ValidationError.new(schema, path, message, :max_items_failed)
259
+ errors << ValidationError.new(schema, path, message, :max_items_failed, data: data)
260
260
  false
261
261
  else
262
262
  valid = true
@@ -286,7 +286,7 @@ module JsonSchema
286
286
  message = %{#{data} must be less than} +
287
287
  (schema.max_exclusive? ? "" : " or equal to") +
288
288
  %{ #{schema.max}.}
289
- errors << ValidationError.new(schema, path, message, :max_failed)
289
+ errors << ValidationError.new(schema, path, message, :max_failed, data: data)
290
290
  false
291
291
  end
292
292
  end
@@ -301,7 +301,7 @@ module JsonSchema
301
301
  %{ allowed; #{data.size} } +
302
302
  (data.size == 1 ? "was" : "were")+
303
303
  %{ supplied.}
304
- errors << ValidationError.new(schema, path, message, :max_items_failed)
304
+ errors << ValidationError.new(schema, path, message, :max_items_failed, data: data)
305
305
  false
306
306
  end
307
307
  end
@@ -316,7 +316,7 @@ module JsonSchema
316
316
  %{ allowed; #{data.length} } +
317
317
  (data.length == 1 ? "was" : "were") +
318
318
  %{ supplied.}
319
- errors << ValidationError.new(schema, path, message, :max_length_failed)
319
+ errors << ValidationError.new(schema, path, message, :max_length_failed, data: data)
320
320
  false
321
321
  end
322
322
  end
@@ -331,7 +331,7 @@ module JsonSchema
331
331
  %{ allowed; #{data.keys.size} } +
332
332
  (data.keys.size == 1 ? "was" : "were") +
333
333
  %{ supplied.}
334
- errors << ValidationError.new(schema, path, message, :max_properties_failed)
334
+ errors << ValidationError.new(schema, path, message, :max_properties_failed, data: data)
335
335
  false
336
336
  end
337
337
  end
@@ -346,7 +346,7 @@ module JsonSchema
346
346
  message = %{#{data} must be greater than} +
347
347
  (schema.min_exclusive? ? "" : " or equal to") +
348
348
  %{ #{schema.min}.}
349
- errors << ValidationError.new(schema, path, message, :min_failed)
349
+ errors << ValidationError.new(schema, path, message, :min_failed, data: data)
350
350
  false
351
351
  end
352
352
  end
@@ -361,7 +361,7 @@ module JsonSchema
361
361
  %{ required; only #{data.size} } +
362
362
  (data.size == 1 ? "was" : "were") +
363
363
  %{ supplied.}
364
- errors << ValidationError.new(schema, path, message, :min_items_failed)
364
+ errors << ValidationError.new(schema, path, message, :min_items_failed, data: data)
365
365
  false
366
366
  end
367
367
  end
@@ -376,7 +376,7 @@ module JsonSchema
376
376
  %{ required; only #{data.length} } +
377
377
  (data.length == 1 ? "was" : "were") +
378
378
  %{ supplied.}
379
- errors << ValidationError.new(schema, path, message, :min_length_failed)
379
+ errors << ValidationError.new(schema, path, message, :min_length_failed, data: data)
380
380
  false
381
381
  end
382
382
  end
@@ -391,7 +391,7 @@ module JsonSchema
391
391
  %{ required; #{data.keys.size} }+
392
392
  (data.keys.size == 1 ? "was" : "were") +
393
393
  %{ supplied.}
394
- errors << ValidationError.new(schema, path, message, :min_properties_failed)
394
+ errors << ValidationError.new(schema, path, message, :min_properties_failed, data: data)
395
395
  false
396
396
  end
397
397
  end
@@ -402,7 +402,7 @@ module JsonSchema
402
402
  true
403
403
  else
404
404
  message = %{#{data} is not a multiple of #{schema.multiple_of}.}
405
- errors << ValidationError.new(schema, path, message, :multiple_of_failed)
405
+ errors << ValidationError.new(schema, path, message, :multiple_of_failed, data: data)
406
406
  false
407
407
  end
408
408
  end
@@ -425,7 +425,7 @@ module JsonSchema
425
425
  else
426
426
  %{More than one subschema in "oneOf" matched.}
427
427
  end
428
- errors << ValidationError.new(schema, path, message, :one_of_failed, sub_errors)
428
+ errors << ValidationError.new(schema, path, message, :one_of_failed, sub_errors, data: data)
429
429
 
430
430
  false
431
431
  end
@@ -437,7 +437,7 @@ module JsonSchema
437
437
  valid = !validate_data(schema.not, data, [], path)
438
438
  if !valid
439
439
  message = %{Matched "not" subschema.}
440
- errors << ValidationError.new(schema, path, message, :not_failed)
440
+ errors << ValidationError.new(schema, path, message, :not_failed, data: data)
441
441
  end
442
442
  valid
443
443
  end
@@ -449,7 +449,7 @@ module JsonSchema
449
449
  true
450
450
  else
451
451
  message = %{#{data} does not match #{schema.pattern.inspect}.}
452
- errors << ValidationError.new(schema, path, message, :pattern_failed)
452
+ errors << ValidationError.new(schema, path, message, :pattern_failed, data: data)
453
453
  false
454
454
  end
455
455
  end
@@ -508,7 +508,7 @@ module JsonSchema
508
508
  else
509
509
  key = find_parent(schema)
510
510
  message = %{For '#{key}', #{data.inspect} is not #{ErrorFormatter.to_list(schema.type)}.}
511
- errors << ValidationError.new(schema, path, message, :invalid_type)
511
+ errors << ValidationError.new(schema, path, message, :invalid_type, data: data)
512
512
  false
513
513
  end
514
514
  end
@@ -519,7 +519,7 @@ module JsonSchema
519
519
  true
520
520
  else
521
521
  message = %{Duplicate items are not allowed.}
522
- errors << ValidationError.new(schema, path, message, :unique_items_failed)
522
+ errors << ValidationError.new(schema, path, message, :unique_items_failed, data: data)
523
523
  false
524
524
  end
525
525
  end
@@ -542,7 +542,7 @@ module JsonSchema
542
542
  end
543
543
  key || fragment
544
544
  end
545
-
545
+
546
546
  EMAIL_PATTERN = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]+$/i
547
547
 
548
548
  HOSTNAME_PATTERN = /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/
@@ -42,6 +42,7 @@ describe JsonSchema::Validator do
42
42
  refute validate
43
43
  assert_includes error_messages, %{For 'definitions/app', 4 is not an object.}
44
44
  assert_includes error_types, :invalid_type
45
+ assert_includes error_data, 4
45
46
  end
46
47
 
47
48
  it "provides accurate error messages for multiple type errors" do
@@ -91,6 +92,7 @@ describe JsonSchema::Validator do
91
92
  assert_includes error_messages,
92
93
  %{1337 does not match /^[a-z][a-z\\-]*[a-z]$/.}
93
94
  assert_includes error_types, :pattern_failed
95
+ assert_includes error_data, "1337"
94
96
  end
95
97
 
96
98
  it "validates items with tuple successfully" do
@@ -128,6 +130,7 @@ describe JsonSchema::Validator do
128
130
  assert_includes error_messages,
129
131
  %{2 items required; only 1 was supplied.}
130
132
  assert_includes error_types, :min_items_failed
133
+ assert_includes error_data, ["cedar"]
131
134
  end
132
135
 
133
136
  it "validates items with tuple unsuccessfully for too many items" do
@@ -143,6 +146,7 @@ describe JsonSchema::Validator do
143
146
  assert_includes error_messages,
144
147
  %{No more than 2 items are allowed; 3 were supplied.}
145
148
  assert_includes error_types, :max_items_failed
149
+ assert_includes error_data, ["cedar", "https", "websockets"]
146
150
  end
147
151
 
148
152
  it "validates items with tuple unsuccessfully for non-conforming items" do
@@ -158,6 +162,7 @@ describe JsonSchema::Validator do
158
162
  assert_includes error_messages,
159
163
  %{1337 is not a member of ["http", "https"].}
160
164
  assert_includes error_types, :invalid_type
165
+ assert_includes error_data, "1337"
161
166
  end
162
167
 
163
168
  it "validates maxItems successfully" do
@@ -177,6 +182,7 @@ describe JsonSchema::Validator do
177
182
  assert_includes error_messages,
178
183
  %{No more than 10 items are allowed; 11 were supplied.}
179
184
  assert_includes error_types, :max_items_failed
185
+ assert_includes error_data, (0...11).to_a
180
186
  end
181
187
 
182
188
  it "validates minItems successfully" do
@@ -195,6 +201,7 @@ describe JsonSchema::Validator do
195
201
  refute validate
196
202
  assert_includes error_messages, %{1 item required; only 0 were supplied.}
197
203
  assert_includes error_types, :min_items_failed
204
+ assert_includes error_data, []
198
205
  end
199
206
 
200
207
  it "validates uniqueItems successfully" do
@@ -213,6 +220,7 @@ describe JsonSchema::Validator do
213
220
  refute validate
214
221
  assert_includes error_messages, %{Duplicate items are not allowed.}
215
222
  assert_includes error_types, :unique_items_failed
223
+ assert_includes error_data, ["websockets", "websockets"]
216
224
  end
217
225
 
218
226
  it "validates maximum for an integer with exclusiveMaximum false" do
@@ -224,6 +232,7 @@ describe JsonSchema::Validator do
224
232
  refute validate
225
233
  assert_includes error_messages, %{11 must be less than or equal to 10.}
226
234
  assert_includes error_types, :max_failed
235
+ assert_includes error_data, 11
227
236
  end
228
237
 
229
238
  it "validates maximum for an integer with exclusiveMaximum true" do
@@ -268,6 +277,7 @@ describe JsonSchema::Validator do
268
277
  refute validate
269
278
  assert_includes error_messages, %{0 must be greater than or equal to 1.}
270
279
  assert_includes error_types, :min_failed
280
+ assert_includes error_data, 0
271
281
  end
272
282
 
273
283
  it "validates minimum for an integer with exclusiveMaximum true" do
@@ -311,6 +321,7 @@ describe JsonSchema::Validator do
311
321
  refute validate
312
322
  assert_includes error_messages, %{1 is not a multiple of 2.}
313
323
  assert_includes error_types, :multiple_of_failed
324
+ assert_includes error_data, 1
314
325
  end
315
326
 
316
327
  it "validates multipleOf for a number" do
@@ -421,6 +432,7 @@ describe JsonSchema::Validator do
421
432
  refute validate
422
433
  assert_includes error_messages, %{No more than 0 properties are allowed; 1 was supplied.}
423
434
  assert_includes error_types, :max_properties_failed
435
+ assert_includes error_data, { "name" => "cloudnasium" }
424
436
  end
425
437
 
426
438
  it "validates minProperties" do
@@ -431,6 +443,7 @@ describe JsonSchema::Validator do
431
443
  refute validate
432
444
  assert_includes error_messages, %{At least 10 properties are required; 1 was supplied.}
433
445
  assert_includes error_types, :min_properties_failed
446
+ assert_includes error_data, { "name" => "cloudnasium" }
434
447
  end
435
448
 
436
449
  it "validates patternProperties" do
@@ -502,6 +515,7 @@ describe JsonSchema::Validator do
502
515
  refute validate
503
516
  assert_includes error_messages, %{At least 3 characters are required; only 2 were supplied.}
504
517
  assert_includes error_types, :all_of_failed
518
+ assert_includes error_data, "ab"
505
519
  end
506
520
 
507
521
  it "validates anyOf" do
@@ -521,6 +535,7 @@ describe JsonSchema::Validator do
521
535
  assert_includes sub_error_messages, [%{At least 5 characters are required; only 2 were supplied.}]
522
536
  assert_includes sub_error_messages, [%{At least 3 characters are required; only 2 were supplied.}]
523
537
  assert_equal sub_error_types, [[:min_length_failed], [:min_length_failed]]
538
+ assert_includes error_data, "ab"
524
539
  end
525
540
 
526
541
  it "validates oneOf" do
@@ -540,6 +555,7 @@ describe JsonSchema::Validator do
540
555
  sub_error_types = one_of_error.sub_errors.map { |errors| errors.map(&:type) }
541
556
  assert_equal sub_error_messages, [[], [], [%{foo does not match /^(hell|no)$/.}]]
542
557
  assert_equal sub_error_types, [[], [], [:pattern_failed]]
558
+ assert_includes error_data, "foo"
543
559
  end
544
560
 
545
561
  it "validates not" do
@@ -550,6 +566,7 @@ describe JsonSchema::Validator do
550
566
  refute validate
551
567
  assert_includes error_messages, %{Matched "not" subschema.}
552
568
  assert_includes error_types, :not_failed
569
+ assert_includes error_data, ""
553
570
  end
554
571
 
555
572
  it "validates date format successfully" do
@@ -600,6 +617,7 @@ describe JsonSchema::Validator do
600
617
  refute validate
601
618
  assert_includes error_messages, %{2014-05-13T08:42:40 is not a valid date-time.}
602
619
  assert_includes error_types, :invalid_format
620
+ assert_includes error_data, "2014-05-13T08:42:40"
603
621
  end
604
622
 
605
623
  it "validates email format successfully" do
@@ -720,9 +738,9 @@ describe JsonSchema::Validator do
720
738
  pointer("#/definitions/app/definitions/owner").merge!(
721
739
  "format" => "uri"
722
740
  )
723
- data_sample["owner"] = "http://"
741
+ data_sample["owner"] = "http://example.com[]"
724
742
  refute validate
725
- assert_includes error_messages, %{http:// is not a valid uri.}
743
+ assert_includes error_messages, %{http://example.com[] is not a valid uri.}
726
744
  assert_includes error_types, :invalid_format
727
745
  end
728
746
 
@@ -772,6 +790,7 @@ describe JsonSchema::Validator do
772
790
  refute validate
773
791
  assert_includes error_messages, %{ab does not match /^[a-z][a-z0-9-]{3,30}$/.}
774
792
  assert_includes error_types, :pattern_failed
793
+ assert_includes error_data, "ab"
775
794
  end
776
795
 
777
796
  it "builds appropriate JSON Pointers to bad data" do
@@ -802,6 +821,10 @@ describe JsonSchema::Validator do
802
821
  @validator.errors.map(&:message)
803
822
  end
804
823
 
824
+ def error_data
825
+ @validator.errors.map(&:data)
826
+ end
827
+
805
828
  def error_types
806
829
  @validator.errors.map(&:type)
807
830
  end
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: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2015-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ecma-re-validator