openc-json_schema 0.0.14 → 0.0.15

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: ccb1b4275ae9645554976a7b87d2b5b6cdb73e5c
4
- data.tar.gz: 3b95c93c17c65d7c5d6b0b183fc3e03d8937692a
3
+ metadata.gz: 6f54658d07145fbb5008c4db3ff54233455bf6bd
4
+ data.tar.gz: 3388c3350f07c0827efd9277aaa166ea06b0ab3f
5
5
  SHA512:
6
- metadata.gz: 3e7489d1dc42eb390e3d8d6e1b9993aa4ec377b6ad4a9bff89092ffdbb591a29da0128b052ef10450c42fef470fd36d9693bccf20503118432c27b539bb056f7
7
- data.tar.gz: fa296c3de7ea00c77736db7e9d409d1ee6412b4dd4d38cebd77931c0daa3665151b0f06598f5e7f0ed7ed8d76b183b7b39bd920a250275ada466a6458150fbfd
6
+ metadata.gz: 50910d269df9a4e70a74449a196dd51464b49169e8fd1dc6784f95ccc93993c75c7ee89eaf9f07c6f304bfe9bbd5dbcf4e6a97181a8eba1461af67723a78848e
7
+ data.tar.gz: 25f41b1db6d440c1ad9a1919bb45394151b888fe273d6670819cd1d61e7c74ac99e85c65d96fea448340311b4458ecd482cfc6a18d76fd4b7e59be30d17eea99
data/.gitignore CHANGED
@@ -1,4 +1,7 @@
1
- spec/tmp/*.json
1
+ *.gem
2
+ .bundle
3
+ .yardoc
2
4
  coverage
3
5
  Gemfile.lock
6
+ doc/*
4
7
  pkg/*
@@ -0,0 +1,3 @@
1
+ --hide-void-return
2
+ --embed-mixin ClassMethods
3
+ --markup=markdown
data/README.md CHANGED
@@ -16,4 +16,9 @@ Bump the version in `lib/openc/json_schema/version.rb` according to the [Semanti
16
16
  git commit lib/openc/json_schema/version.rb -m 'Release new version'
17
17
  rake release # requires Rubygems credentials
18
18
 
19
- Finally, [rebuild the Docker image](https://github.com/openc/morph-docker-ruby#readme).
19
+ In [morph](https://github.com/sebbacon/morph), run:
20
+
21
+ bundle update openc-json_schema
22
+ git commit Gemfile.lock -m 'Bump openc-json_schema' && git push
23
+
24
+ Finally, [rebuild the Docker image](https://github.com/openc/morph-docker-ruby#readme) and deploy [morph](https://github.com/sebbacon/morph).
@@ -1,6 +1,9 @@
1
1
  require 'json-pointer'
2
2
  require 'json-schema'
3
3
 
4
+ require 'json_validation'
5
+ require 'openc_json_schema_formats'
6
+
4
7
  require 'openc/json_schema/date_converter'
5
8
  require 'openc/json_schema/format_validators'
6
9
  require 'openc/json_schema/utils'
@@ -11,8 +14,21 @@ module Openc
11
14
  module JsonSchema
12
15
  extend self
13
16
 
14
- def validate(schema_path, record)
15
- Validator.validate(schema_path, record)
17
+ def validate(schema, record)
18
+ if schema.is_a?(String)
19
+ validator = JsonValidation.load_validator(schema)
20
+ else
21
+ validator = JsonValidation.build_validator(schema)
22
+ end
23
+ fast_validation_ok = validator.validate(record)
24
+ if fast_validation_ok
25
+ nil
26
+ else
27
+ # Currently JsonValidation doesn't support error messages,
28
+ # just returns true or false; so on a failure, we have to fall
29
+ # back to the slower version
30
+ Validator.validate(schema, record)
31
+ end
16
32
  end
17
33
 
18
34
  def convert_dates(schema_path, record)
@@ -38,8 +38,8 @@ module Openc
38
38
  record = JsonPointer.new(record, error[:fragment][1..-1]).value
39
39
  schema = JSON::Validator.schema_for_uri(error[:schema]).schema
40
40
 
41
- path = fragment_to_path(error[:fragment]).split('.')
42
- one_of = walk_schema(schema, path).each_with_index
41
+ path = fragment_to_path(error[:fragment])
42
+ one_of = walk_schema(schema, path.split('.')).each_with_index
43
43
 
44
44
  # Try to report errors for relevant `oneOf` schemas only.
45
45
  schemas_matching_type = case record
@@ -52,7 +52,7 @@ module Openc
52
52
  when Array
53
53
  one_of.select{|schema, _| schema['type'] == 'array'}
54
54
  else
55
- raise "Unexpected type: #{record}"
55
+ raise "Unexpected type #{record.class.name} for #{record.inspect} at #{path}"
56
56
  end
57
57
 
58
58
  matches = schemas_matching_type.size
@@ -1,5 +1,5 @@
1
1
  module Openc
2
2
  module JsonSchema
3
- VERSION = '0.0.14'
3
+ VERSION = '0.0.15'
4
4
  end
5
5
  end
@@ -17,8 +17,9 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "json-schema", "~> 2.6.0"
19
19
  gem.add_dependency "json-pointer"
20
+ gem.add_dependency "openc_json_schema_formats"
21
+ gem.add_dependency "json_validation"
20
22
 
21
- gem.add_development_dependency "bundler", "~> 1.7"
22
23
  gem.add_development_dependency "coveralls"
23
24
  gem.add_development_dependency "rake", "~> 10.0"
24
25
  gem.add_development_dependency "rspec", "~> 3.0"
@@ -90,7 +90,7 @@ describe Openc::JsonSchema do
90
90
  }
91
91
  }
92
92
  }
93
-
93
+
94
94
  record = {'aaa' => {'a_type' => 'a1', 'a_properties' => {}}}
95
95
 
96
96
  error = 'Missing required property: aaa.a_properties.bbb'
@@ -166,7 +166,7 @@ describe Openc::JsonSchema do
166
166
  }
167
167
  }
168
168
  }
169
-
169
+
170
170
  record = {'aaa' => {'bbb' => {}}}
171
171
 
172
172
  error = 'No match for property: aaa'
@@ -305,6 +305,96 @@ describe Openc::JsonSchema do
305
305
  expect([schema, record]).to fail_validation_with(error)
306
306
  end
307
307
 
308
+ specify 'when date property has a timestamp' do
309
+ schema = {
310
+ '$schema' => 'http://json-schema.org/draft-04/schema#',
311
+ 'type' => 'object',
312
+ 'properties' => {
313
+ 'aaa' => {'type' => 'string', 'format' => 'date'}
314
+ }
315
+ }
316
+ record = {'aaa' => '2016-01-12T21:52:11Z'}
317
+
318
+ expect([schema, record]).to be_valid
319
+ end
320
+
321
+ specify 'when date property has a timestamp and a bad date' do
322
+ schema = {
323
+ '$schema' => 'http://json-schema.org/draft-04/schema#',
324
+ 'type' => 'object',
325
+ 'properties' => {
326
+ 'aaa' => {'type' => 'string', 'format' => 'date'}
327
+ }
328
+ }
329
+ dates = ["2016-03-13",
330
+ "2016-03-21",
331
+ "2016-03-12T14:58:51.941787",
332
+ "2016-03-15",
333
+ "2016-03-12T15:01:27.767907",
334
+ "2016-03-12T13:28:59.947478",
335
+ "2016-03-12T11:30:18.731536",
336
+ "2016-03-13",
337
+ "2016-03-13",
338
+ "2016-03-12T11:17:52.814474",
339
+ "2016-03-12T15:12:46.227805",
340
+ "2016-03-12T15:45:03.405024",
341
+ "2016-03-12T13:17:15.362714",
342
+ "2016-03-15",
343
+ "2016-03-13",
344
+ "2016-03-23",
345
+ "2016-03-12T08:20:02.088387",
346
+ "2016-03-21",
347
+ "2016-03-13",
348
+ "2016-03-21",
349
+ "2016-03-11T17:54:20.247649",
350
+ "2016-03-12",
351
+ "2016-03-12T15:07:20.572849",
352
+ "2016-03-20",
353
+ "2016-03-13",
354
+ "2016-03-12T11:24:07.573208",
355
+ "2016-03-20",
356
+ "2016-03-11T17:31:38.482306",
357
+ "2016-03-16",
358
+ "2016-03-12T15:15:13.430171",
359
+ "2016-03-11T17:07:26.781185",
360
+ "2016-03-12T13:33:24.754198",
361
+ "2016-03-15",
362
+ "2016-03-20",
363
+ "2016-03-12",
364
+ "2016-03-15",
365
+ "2016-03-12T14:04:36.597795",
366
+ "2016-03-24",
367
+ "2016-03-11T13:20:40.231104",
368
+ "2016-03-16",
369
+ "2016-03-20",
370
+ "2016-03-12",
371
+ "2016-03-23",
372
+ "2016-03-15",
373
+ "2016-03-24",
374
+ "2016-03-24",
375
+ "2016-03-23",
376
+ "2015-10-02 10:15:56 +0000",
377
+ "2015-02-28 17:32:37 +0000",
378
+ "2016-03-18 10:35:30 +0000",
379
+ "2016-03-07 09:48:23 +0000",
380
+ "2016-03-10 12:27:33 +0000",
381
+ "2015-02-28 18:04:19 +0000",
382
+ "2015-03-04 18:14:14 +0000",
383
+ "2015-03-09 10:44:52 +0000",
384
+ "2015-04-29 17:49:37 +0000",
385
+ "2015-09-04 13:35:52 +0000",
386
+ "2016-03-10 09:39:21 +0000",
387
+ "2016-03-11 12:28:38 +0000",
388
+ "2016-03-11 10:37:50 +0000",
389
+ "2015-09-18 11:48:50 +0000"]
390
+ dates.each do |d|
391
+ puts d
392
+ record = {'aaa' => d}
393
+
394
+ expect([schema, record]).to be_valid
395
+ end
396
+ end
397
+
308
398
  specify 'when non-blank property of wrong format' do
309
399
  schema = {
310
400
  '$schema' => 'http://json-schema.org/draft-04/schema#',
@@ -9,12 +9,17 @@ require 'openc/json_schema'
9
9
 
10
10
  RSpec::Matchers.define(:fail_validation_with) do |expected|
11
11
  match do |(schema_or_path, record)|
12
- @actual = Openc::JsonSchema.validate(schema_or_path, record)[:message]
13
- expect(@actual).to eq(expected)
12
+ @actual = Openc::JsonSchema.validate(schema_or_path, record)
13
+ expect(@actual).to_not be(nil)
14
+ expect(@actual[:message]).to eq(expected)
14
15
  end
15
16
 
16
17
  failure_message do |actual|
17
- "Expected error to be #{expected}, but was #{@actual}"
18
+ if actual.nil?
19
+ "Expected error, but there was none"
20
+ else
21
+ "Expected error to be #{expected}, but was #{actual}"
22
+ end
18
23
  end
19
24
  end
20
25
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openc-json_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenCorporates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -39,19 +39,33 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: openc_json_schema_formats
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
48
- type: :development
47
+ version: '0'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json_validation
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '1.7'
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: coveralls
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +116,7 @@ extra_rdoc_files: []
102
116
  files:
103
117
  - ".gitignore"
104
118
  - ".travis.yml"
119
+ - ".yardopts"
105
120
  - Gemfile
106
121
  - LICENSE
107
122
  - README.md
@@ -154,22 +169,5 @@ rubygems_version: 2.4.5
154
169
  signing_key:
155
170
  specification_version: 4
156
171
  summary: Utilities for validating JSON
157
- test_files:
158
- - spec/openc_json_schema_spec.rb
159
- - spec/schemas/aaa.json
160
- - spec/schemas/ccc.json
161
- - spec/schemas/fff.json
162
- - spec/schemas/iii.json
163
- - spec/schemas/includes/bbb.json
164
- - spec/schemas/includes/ddd.json
165
- - spec/schemas/includes/eee.json
166
- - spec/schemas/includes/ggg.json
167
- - spec/schemas/includes/hhh.json
168
- - spec/schemas/includes/jjj.json
169
- - spec/schemas/includes/mmm.json
170
- - spec/schemas/includes/zzz.json
171
- - spec/schemas/kkk.json
172
- - spec/schemas/lll.json
173
- - spec/schemas/yyy.json
174
- - spec/spec_helper.rb
172
+ test_files: []
175
173
  has_rdoc: