fidor_schema 0.10.12 → 0.10.14
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 +4 -4
- data/Rakefile +1 -21
- data/fidor_schema.gemspec +1 -8
- data/lib/fidor_schema_version.rb +1 -1
- data/schema/v1.0/base_types/base_types.json +14 -0
- data/schema/v1.0/fps_transfer.json +135 -0
- data/schema/v1.0/notification.json +1 -1
- data/schema/v1.0/rate_limit.json +2 -2
- data/schema/v1.0/transaction.json +4 -0
- data/schema/v1.0/transaction_type_details/fps_details.json +27 -0
- data/schema/v1.0/video_ident.json +18 -0
- data/spec/fidor_schema_spec.rb +9 -3
- data/spec/spec_helper.rb +1 -0
- metadata +6 -43
- data/lib/validator.rb +0 -4
- data/lib/validator/base.rb +0 -105
- data/lib/validator/j_schema.rb +0 -34
- data/lib/validator/json-schema.rb +0 -51
- data/lib/validator/json_schema.rb +0 -37
- data/lib/validator/schema.json +0 -150
- data/spec/validator/j_schema_spec.rb +0 -22
- data/spec/validator/json-schema_spec.rb +0 -22
- data/spec/validator/json_schema_spec.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d40d9ba64fea8a6c419d1c1ba64ec8f57225c9e
|
4
|
+
data.tar.gz: 407f5358049a6d21cdca4fedd1025304ef5f1025
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0753362890e301f069b326c1734d45b4f2ab1230dc1ecfeec3e08c0f53b4a19f307538e306da47f1733a425c76729c8e63e823184dbe3eedb6963523f89ee450
|
7
|
+
data.tar.gz: 73b666230abfcaff0a468623994891846ba69a3279141e75ae2bc1bd7b099c11b7a5e572547eeac872da6e72417415465bd2d39155aa22450c4d59ad43f8580a
|
data/Rakefile
CHANGED
@@ -5,24 +5,4 @@ require 'rspec/core/rake_task'
|
|
5
5
|
|
6
6
|
desc 'Run specs'
|
7
7
|
RSpec::Core::RakeTask.new
|
8
|
-
task :default => :spec
|
9
|
-
|
10
|
-
|
11
|
-
require 'validator'
|
12
|
-
|
13
|
-
|
14
|
-
task :validate_dash do
|
15
|
-
Validator.run :dash
|
16
|
-
end
|
17
|
-
|
18
|
-
task :validate_underscore do
|
19
|
-
Validator.run :underscore
|
20
|
-
end
|
21
|
-
|
22
|
-
task :validate_jschema do
|
23
|
-
Validator.run :jschema
|
24
|
-
end
|
25
|
-
|
26
|
-
task :validate_schema => [:validate_dash, :validate_underscore, :validate_jschema] do
|
27
|
-
|
28
|
-
end
|
8
|
+
task :default => :spec
|
data/fidor_schema.gemspec
CHANGED
@@ -24,13 +24,6 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency 'json_schema_tools', '>=0.6.1'
|
25
25
|
spec.add_development_dependency 'activemodel' # required by above
|
26
26
|
spec.add_development_dependency 'rake'
|
27
|
-
|
28
|
-
|
29
|
-
# most downloads on rubygems, last updated feb 2015
|
30
|
-
spec.add_development_dependency 'json-schema'
|
31
|
-
# 2nd most downloads on rubygems, last updated March 2015
|
32
|
-
spec.add_development_dependency 'json_schema'
|
33
|
-
# pretty new , last udpate sep 2014
|
34
|
-
spec.add_development_dependency 'jschema'
|
27
|
+
spec.add_development_dependency 'json_schema_validator'
|
35
28
|
|
36
29
|
end
|
data/lib/fidor_schema_version.rb
CHANGED
@@ -77,6 +77,18 @@
|
|
77
77
|
"pattern" : "^[A-Z0-9]{8,11}$",
|
78
78
|
"maxLength" : 11
|
79
79
|
},
|
80
|
+
"account" : {
|
81
|
+
"description" : "UK Bank's Account Number",
|
82
|
+
"type" : "string",
|
83
|
+
"maxLength" : 8,
|
84
|
+
"pattern" : "^(\\d){7,8}$"
|
85
|
+
},
|
86
|
+
"sort_code" : {
|
87
|
+
"description" : "UK Bank's Sort Code",
|
88
|
+
"type" : "string",
|
89
|
+
"maxLength" : 6,
|
90
|
+
"pattern" : "(\\d{2}-?){2}\\d{2}"
|
91
|
+
},
|
80
92
|
"eref" : {
|
81
93
|
"description" : "End-to-end reference.",
|
82
94
|
"type" : "string",
|
@@ -130,6 +142,8 @@
|
|
130
142
|
"fee",
|
131
143
|
"fidor_payin",
|
132
144
|
"fidor_payout",
|
145
|
+
"fps_payin",
|
146
|
+
"fps_payout",
|
133
147
|
"gmt_fee",
|
134
148
|
"gmt_refund",
|
135
149
|
"gmt_payout",
|
@@ -0,0 +1,135 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"title": "fps_transfer",
|
5
|
+
"description": "A transfer initiates a transaction e.g get / send money. If the transfer fails no transaction is created!",
|
6
|
+
"required": [
|
7
|
+
"account_id",
|
8
|
+
"amount",
|
9
|
+
"external_uid",
|
10
|
+
"remote_account",
|
11
|
+
"remote_sort_code"
|
12
|
+
],
|
13
|
+
"properties": {
|
14
|
+
"id": {
|
15
|
+
"$ref": "./base_types/base_types.json#definitions/id"
|
16
|
+
},
|
17
|
+
"external_uid": {
|
18
|
+
"$ref": "./base_types/base_types.json#definitions/external_uid"
|
19
|
+
},
|
20
|
+
"account_id": {
|
21
|
+
"$ref": "./base_types/base_types.json#definitions/account_id"
|
22
|
+
},
|
23
|
+
"user_id": {
|
24
|
+
"$ref": "./base_types/base_types.json#definitions/user_id"
|
25
|
+
},
|
26
|
+
"transaction_id": {
|
27
|
+
"$ref": "./base_types/base_types.json#definitions/transaction_id"
|
28
|
+
},
|
29
|
+
"subject": {
|
30
|
+
"$ref": "./base_types/base_types.json#definitions/subject",
|
31
|
+
"maxLength": 140
|
32
|
+
},
|
33
|
+
"amount": {
|
34
|
+
"$ref": "./base_types/base_types.json#definitions/amount"
|
35
|
+
},
|
36
|
+
"currency": {
|
37
|
+
"$ref": "./base_types/base_types.json#definitions/currency",
|
38
|
+
"readOnly": true
|
39
|
+
},
|
40
|
+
"fee": {
|
41
|
+
"$ref": "./base_types/base_types.json#definitions/fee",
|
42
|
+
"readOnly": true
|
43
|
+
},
|
44
|
+
"remote_name": {
|
45
|
+
"description": "Receiving account holder name",
|
46
|
+
"type": "string",
|
47
|
+
"maxLength": 70
|
48
|
+
},
|
49
|
+
"remote_account": {
|
50
|
+
"$ref": "../base_types/base_types.json#definitions/account"
|
51
|
+
},
|
52
|
+
"remote_sort_code": {
|
53
|
+
"$ref": "../base_types/base_types.json#definitions/sort_code"
|
54
|
+
},
|
55
|
+
"state": {
|
56
|
+
"description": "State of the transfer. received: Order was accepted by the system | processing: Order is being processed | mobile_tan_sent: awaiting tan entry | expired : mtan entry expired | failure: transfer could not be completed | success: transfer successfully executed",
|
57
|
+
"enum": [
|
58
|
+
"received",
|
59
|
+
"mobile_tan_sent",
|
60
|
+
"success",
|
61
|
+
"expired",
|
62
|
+
"failure"
|
63
|
+
],
|
64
|
+
"readOnly": true,
|
65
|
+
"type": "string"
|
66
|
+
},
|
67
|
+
"created_at": {
|
68
|
+
"$ref": "./base_types/base_types.json#definitions/created_at"
|
69
|
+
},
|
70
|
+
"updated_at": {
|
71
|
+
"$ref": "./base_types/base_types.json#definitions/updated_at"
|
72
|
+
}
|
73
|
+
},
|
74
|
+
"links": [
|
75
|
+
{
|
76
|
+
"rel": "self",
|
77
|
+
"href": "fps_transfers/{id}"
|
78
|
+
},
|
79
|
+
{
|
80
|
+
"rel": "instances",
|
81
|
+
"href": "fps_transfers",
|
82
|
+
"properties": {
|
83
|
+
"filter[account_ids]": {
|
84
|
+
"description": "Find transfers belonging to the given account ids. Single id or multiple ids comma-separated.",
|
85
|
+
"type": "string"
|
86
|
+
},
|
87
|
+
"filter[created_at_from]": {
|
88
|
+
"description": "Creation date filter from >= date",
|
89
|
+
"format": "date-time",
|
90
|
+
"type": "string"
|
91
|
+
},
|
92
|
+
"filter[created_at_to]": {
|
93
|
+
"description": "Creation date filter to <= date",
|
94
|
+
"format": "date-time",
|
95
|
+
"type": "string"
|
96
|
+
},
|
97
|
+
"filter[states]": {
|
98
|
+
"description": "Filter by single or multiple csv delimited states",
|
99
|
+
"enum": [
|
100
|
+
"received",
|
101
|
+
"mobile_tan_sent",
|
102
|
+
"success",
|
103
|
+
"expired",
|
104
|
+
"failure"
|
105
|
+
],
|
106
|
+
"type": "string"
|
107
|
+
},
|
108
|
+
"page": {
|
109
|
+
"title": "Page",
|
110
|
+
"description": "In paginated results set the page to look for",
|
111
|
+
"type": "integer"
|
112
|
+
},
|
113
|
+
"per_page": {
|
114
|
+
"title": "Per page",
|
115
|
+
"description": "Results per page. Default is 10, max is 100",
|
116
|
+
"type": "integer"
|
117
|
+
},
|
118
|
+
"sort": {
|
119
|
+
"title": "Sort",
|
120
|
+
"enum": [
|
121
|
+
"ASC",
|
122
|
+
"DESC"
|
123
|
+
],
|
124
|
+
"description": "Sort the results in ASC or DESC",
|
125
|
+
"type": "string"
|
126
|
+
}
|
127
|
+
}
|
128
|
+
},
|
129
|
+
{
|
130
|
+
"rel": "create",
|
131
|
+
"href": "fps_transfers",
|
132
|
+
"method": "POST"
|
133
|
+
}
|
134
|
+
]
|
135
|
+
}
|
data/schema/v1.0/rate_limit.json
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"title": "fps_details",
|
5
|
+
"description": "Remote account information available in a Faster Payments transfer",
|
6
|
+
"properties": {
|
7
|
+
"fps_transfer_id": {
|
8
|
+
"description": "Id of transfer if transaction was created by a transfer.",
|
9
|
+
"readOnly": true,
|
10
|
+
"type": "string"
|
11
|
+
},
|
12
|
+
"remote_name": {
|
13
|
+
"description": "Receiving account holder name",
|
14
|
+
"type": "string",
|
15
|
+
"maxLength": 70,
|
16
|
+
"readOnly": true
|
17
|
+
},
|
18
|
+
"remote_account": {
|
19
|
+
"$ref": "../base_types/base_types.json#definitions/account",
|
20
|
+
"readOnly": true
|
21
|
+
},
|
22
|
+
"remote_sort_code": {
|
23
|
+
"$ref": "../base_types/base_types.json#definitions/sort_code",
|
24
|
+
"readOnly": true
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"title": "video_ident",
|
5
|
+
"description": "Creates IDnow identifications",
|
6
|
+
"properties": {
|
7
|
+
"customer_id": {
|
8
|
+
"$ref": "./base_types/base_types.json#definitions/account_id"
|
9
|
+
}
|
10
|
+
},
|
11
|
+
"links": [
|
12
|
+
{
|
13
|
+
"rel": "create",
|
14
|
+
"href": "video_idents",
|
15
|
+
"method": "POST"
|
16
|
+
}
|
17
|
+
]
|
18
|
+
}
|
data/spec/fidor_schema_spec.rb
CHANGED
@@ -9,17 +9,14 @@ describe Fidor::Schema do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'read schemata' do
|
12
|
-
|
13
12
|
it 'should read all json files' do
|
14
13
|
SchemaTools.schema_path = Fidor::Schema.path
|
15
14
|
SchemaTools::Reader.read_all
|
16
15
|
expect(SchemaTools::Reader.registry).to_not be_empty
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
20
18
|
|
21
19
|
context 'resolves $refs' do
|
22
|
-
|
23
20
|
it 'in single schema' do
|
24
21
|
SchemaTools.schema_path = Fidor::Schema.path
|
25
22
|
schema = SchemaTools::Reader.read('account').to_h
|
@@ -35,6 +32,15 @@ describe Fidor::Schema do
|
|
35
32
|
}
|
36
33
|
expect(out).to_not include('$ref')
|
37
34
|
end
|
35
|
+
end
|
38
36
|
|
37
|
+
context 'validate schemata' do
|
38
|
+
it 'should validate all' do
|
39
|
+
schema_path = Fidor::Schema.path
|
40
|
+
errors = JsonSchemaValidator.validate_schemas(schema_path)
|
41
|
+
errors.each do |name, error|
|
42
|
+
expect(error).to be_empty
|
43
|
+
end
|
44
|
+
end
|
39
45
|
end
|
40
46
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fidor_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -95,35 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: json_schema
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: jschema
|
98
|
+
name: json_schema_validator
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - ">="
|
@@ -155,12 +127,6 @@ files:
|
|
155
127
|
- lib/fidor/schema.rb
|
156
128
|
- lib/fidor_schema.rb
|
157
129
|
- lib/fidor_schema_version.rb
|
158
|
-
- lib/validator.rb
|
159
|
-
- lib/validator/base.rb
|
160
|
-
- lib/validator/j_schema.rb
|
161
|
-
- lib/validator/json-schema.rb
|
162
|
-
- lib/validator/json_schema.rb
|
163
|
-
- lib/validator/schema.json
|
164
130
|
- schema/v1.0/account.json
|
165
131
|
- schema/v1.0/account_limit.json
|
166
132
|
- schema/v1.0/bank_check.json
|
@@ -174,6 +140,7 @@ files:
|
|
174
140
|
- schema/v1.0/creditor_identity.json
|
175
141
|
- schema/v1.0/customer.json
|
176
142
|
- schema/v1.0/error.json
|
143
|
+
- schema/v1.0/fps_transfer.json
|
177
144
|
- schema/v1.0/internal_transfer.json
|
178
145
|
- schema/v1.0/legal.json
|
179
146
|
- schema/v1.0/message.json
|
@@ -199,6 +166,7 @@ files:
|
|
199
166
|
- schema/v1.0/transaction.json
|
200
167
|
- schema/v1.0/transaction_type_details/bonus_details.json
|
201
168
|
- schema/v1.0/transaction_type_details/credit_card_details.json
|
169
|
+
- schema/v1.0/transaction_type_details/fps_details.json
|
202
170
|
- schema/v1.0/transaction_type_details/gmt_details.json
|
203
171
|
- schema/v1.0/transaction_type_details/internal_transfer_details.json
|
204
172
|
- schema/v1.0/transaction_type_details/mobile_topup_details.json
|
@@ -206,11 +174,9 @@ files:
|
|
206
174
|
- schema/v1.0/transaction_type_details/sepa_direct_debit_details.json
|
207
175
|
- schema/v1.0/transfer_approval.json
|
208
176
|
- schema/v1.0/user.json
|
177
|
+
- schema/v1.0/video_ident.json
|
209
178
|
- spec/fidor_schema_spec.rb
|
210
179
|
- spec/spec_helper.rb
|
211
|
-
- spec/validator/j_schema_spec.rb
|
212
|
-
- spec/validator/json-schema_spec.rb
|
213
|
-
- spec/validator/json_schema_spec.rb
|
214
180
|
homepage: https://www.fidor.de
|
215
181
|
licenses:
|
216
182
|
- MIT
|
@@ -238,6 +204,3 @@ summary: BETA Fidor API - JSON Schema
|
|
238
204
|
test_files:
|
239
205
|
- spec/fidor_schema_spec.rb
|
240
206
|
- spec/spec_helper.rb
|
241
|
-
- spec/validator/j_schema_spec.rb
|
242
|
-
- spec/validator/json-schema_spec.rb
|
243
|
-
- spec/validator/json_schema_spec.rb
|
data/lib/validator.rb
DELETED
data/lib/validator/base.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
# This functionality is intended to run the schema, through
|
2
|
-
# any available Schema Validators for Ruby.
|
3
|
-
#
|
4
|
-
# They should be valid according to draft-4 ...
|
5
|
-
#
|
6
|
-
# The schema validators currently being considered are:
|
7
|
-
#
|
8
|
-
# https://github.com/ruby-json-schema/json-schema
|
9
|
-
# https://github.com/brandur/json_schema (note the underscore!)
|
10
|
-
# https://github.com/Soylent/jschema
|
11
|
-
#
|
12
|
-
# These are the three currently available ruby validators that
|
13
|
-
# support draft-4. (According to json-schema.org).
|
14
|
-
#
|
15
|
-
# Each has their quirks, we'll try to:
|
16
|
-
# * use each to validate each fidor schema against the json-schema meta-schema
|
17
|
-
# * try to load each fidor schema as a schema for validation.
|
18
|
-
#
|
19
|
-
require 'pathname'
|
20
|
-
|
21
|
-
module Validator
|
22
|
-
class Base
|
23
|
-
# @return [Array<String>] file paths
|
24
|
-
attr_accessor :files_to_validate
|
25
|
-
|
26
|
-
# Run the given validator with all schema files
|
27
|
-
def self.run(files)
|
28
|
-
puts "Running validation with #{name} for #{files.length} schemas"
|
29
|
-
v = new(files)
|
30
|
-
v.validate_all
|
31
|
-
puts v.log_fmt
|
32
|
-
v
|
33
|
-
end
|
34
|
-
|
35
|
-
def validate_all
|
36
|
-
validate_schemas
|
37
|
-
validate_data
|
38
|
-
end
|
39
|
-
|
40
|
-
def validate_schemas
|
41
|
-
files_to_validate.each do |file|
|
42
|
-
schema = File.read file
|
43
|
-
log << "validate schema: #{file}"
|
44
|
-
validate schema
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def validate_data
|
49
|
-
files_to_validate.each do |file|
|
50
|
-
schema = File.read file
|
51
|
-
log << "validate data against: #{file}"
|
52
|
-
use_for_validation schema
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
# Joins the logs before display
|
58
|
-
def log_fmt
|
59
|
-
res = []
|
60
|
-
if errors.length > 0
|
61
|
-
res << "#{errors.join("\n\n")}"
|
62
|
-
res << "="*50
|
63
|
-
res << "#{errors.length} with errors"
|
64
|
-
end
|
65
|
-
res << "#{success.uniq.length} Schemas passed"
|
66
|
-
res.join("\n")
|
67
|
-
end
|
68
|
-
# @return [Array<String>] error schemas
|
69
|
-
def errors
|
70
|
-
@errors ||= []
|
71
|
-
end
|
72
|
-
# @return [Array<String>] test log
|
73
|
-
def log
|
74
|
-
@log ||= []
|
75
|
-
end
|
76
|
-
# @return [Array<String>] successfull schema titles
|
77
|
-
def success
|
78
|
-
@success ||= []
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.find_all_schema
|
84
|
-
# asssume we're running from rake and pwd is project root ...
|
85
|
-
this_dir = File.dirname(__FILE__)
|
86
|
-
repo_dir = Pathname.new(this_dir+"/../..").cleanpath.to_s
|
87
|
-
|
88
|
-
Dir.glob("#{repo_dir}/schema/**/*.json")
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
# @param [Symbol] validator to use
|
93
|
-
def self.run(validator)
|
94
|
-
case validator
|
95
|
-
when :underscore
|
96
|
-
Json_Schema.run find_all_schema
|
97
|
-
when :dash
|
98
|
-
JsonSchema.run find_all_schema
|
99
|
-
when :jschema
|
100
|
-
JSchema.run find_all_schema
|
101
|
-
else
|
102
|
-
puts "Unknown validator: #{validator}"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
data/lib/validator/j_schema.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'jschema'
|
2
|
-
module Validator
|
3
|
-
class JSchema < Base
|
4
|
-
|
5
|
-
def initialize(files_to_validate)
|
6
|
-
@files_to_validate = files_to_validate
|
7
|
-
schema_data = File.read("#{File.dirname(__FILE__)}/schema.json")
|
8
|
-
schema_json = JSON.parse(schema_data)
|
9
|
-
@meta_schema = ::JSchema.build(schema_json)
|
10
|
-
end
|
11
|
-
|
12
|
-
def validate(schema)
|
13
|
-
schema_to_test = JSON.parse(schema)
|
14
|
-
result = @meta_schema.validate schema_to_test
|
15
|
-
if !result || result.length == 0
|
16
|
-
success << schema_to_test['title'] || schema_to_test.keys[0]
|
17
|
-
else
|
18
|
-
errors << "Schema validation failed: #{schema_to_test['title']}\n#{result.join("\n")}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def use_for_validation(schema)
|
23
|
-
schema_to_test = JSON.parse(schema)
|
24
|
-
begin
|
25
|
-
::JSchema.build(schema_to_test)
|
26
|
-
rescue
|
27
|
-
errors << "Data validation failed: #{schema_to_test['title']}\n#{$!}"
|
28
|
-
# puts $!.backtrace
|
29
|
-
else
|
30
|
-
success << schema_to_test['title'] || schema_to_test.keys[0]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
# https://github.com/ruby-json-schema/json-schema
|
3
|
-
module Validator
|
4
|
-
class JsonSchema < Base
|
5
|
-
def initialize(files_to_validate)
|
6
|
-
@files_to_validate = files_to_validate
|
7
|
-
@meta_schema_path = "#{File.dirname(__FILE__)}/schema.json"
|
8
|
-
|
9
|
-
# need to know the base dir of the schema to resolve relative uris.
|
10
|
-
# see below.
|
11
|
-
@schemadir = File.dirname(@files_to_validate[0])
|
12
|
-
end
|
13
|
-
|
14
|
-
# @param [String] schema to test against the meta schema
|
15
|
-
def validate(schema)
|
16
|
-
schema_to_test = JSON.parse(schema)
|
17
|
-
begin
|
18
|
-
result = JSON::Validator.fully_validate(@meta_schema_path, schema_to_test)
|
19
|
-
if !result || result.length == 0
|
20
|
-
success << schema_to_test['title'] || schema_to_test.keys[0]
|
21
|
-
else
|
22
|
-
errors << "Schema validation failed: #{schema_to_test['title']}\n#{result.join("\n")}"
|
23
|
-
end
|
24
|
-
rescue => e
|
25
|
-
errors << "Schema validation failed: #{schema_to_test['title']}\n#{e}"
|
26
|
-
# puts e.backtrace
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def use_for_validation(schema)
|
31
|
-
schema_to_test = JSON.parse(schema)
|
32
|
-
|
33
|
-
# json-schema resolves relatives path relative to it's own "."
|
34
|
-
# not relative to the file containing the reference ...
|
35
|
-
base_dir = Dir.pwd
|
36
|
-
|
37
|
-
begin
|
38
|
-
Dir.chdir @schemadir
|
39
|
-
data = {}
|
40
|
-
result = JSON::Validator.fully_validate(schema_to_test, data)
|
41
|
-
if !result || result.length == 0
|
42
|
-
success << schema_to_test['title']
|
43
|
-
else
|
44
|
-
errors << "Data validation failed: #{schema_to_test['title']}\n#{result.join("\n")}"
|
45
|
-
end
|
46
|
-
ensure
|
47
|
-
Dir.chdir base_dir
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'json_schema'
|
2
|
-
module Validator
|
3
|
-
class Json_Schema < Base
|
4
|
-
|
5
|
-
def initialize files_to_validate
|
6
|
-
@files_to_validate = files_to_validate
|
7
|
-
schema_data = File.read("#{File.dirname(__FILE__)}/schema.json")
|
8
|
-
schema_json = JSON.parse(schema_data)
|
9
|
-
@schema = ::JsonSchema.parse!(schema_json)
|
10
|
-
@errors, @success = [], []
|
11
|
-
end
|
12
|
-
|
13
|
-
# @param [String] schema to test against the meta schema
|
14
|
-
def validate(schema)
|
15
|
-
schema_to_test = JSON.parse(schema)
|
16
|
-
begin
|
17
|
-
@schema.validate! schema_to_test
|
18
|
-
rescue
|
19
|
-
errors << "Schema validation failed: #{schema_to_test['title']}\n#{$!}"
|
20
|
-
else
|
21
|
-
success << File.basename(schema)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def use_for_validation(schema)
|
26
|
-
schema_to_test = JSON.parse(schema)
|
27
|
-
begin
|
28
|
-
::JsonSchema.parse!(schema_to_test)
|
29
|
-
rescue
|
30
|
-
errors << "Data validation failed: #{schema_to_test['title']}\n#{$!}"
|
31
|
-
else
|
32
|
-
success << schema_to_test['title']
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
data/lib/validator/schema.json
DELETED
@@ -1,150 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"id": "http://json-schema.org/draft-04/schema#",
|
3
|
-
"$schema": "http://json-schema.org/draft-04/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
|
-
}
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'validator'
|
3
|
-
|
4
|
-
describe Validator::JSchema do
|
5
|
-
it 'validates schemas against the meta schema' do
|
6
|
-
path = Fidor::Schema.path
|
7
|
-
files = Dir.glob("#{path}/**/*.json")
|
8
|
-
v = Validator::JSchema.new files
|
9
|
-
v.validate_schemas
|
10
|
-
expect(v.log[0]).to include('validate schema')
|
11
|
-
expect(v.errors).to be_empty
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'validates schemas against blank data' do
|
15
|
-
path = Fidor::Schema.path
|
16
|
-
files = Dir.glob("#{path}/**/*.json")
|
17
|
-
v = Validator::JSchema.new files
|
18
|
-
v.validate_data
|
19
|
-
expect(v.log[0]).to include('validate data')
|
20
|
-
# expect(v.errors).to be_empty
|
21
|
-
end
|
22
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'validator'
|
3
|
-
|
4
|
-
describe Validator::JsonSchema do
|
5
|
-
it 'validates schemas against the meta schema' do
|
6
|
-
path = Fidor::Schema.path
|
7
|
-
files = Dir.glob("#{path}/**/*.json")
|
8
|
-
v = Validator::JsonSchema.new files
|
9
|
-
v.validate_schemas
|
10
|
-
expect(v.log[0]).to include('validate schema')
|
11
|
-
expect(v.errors).to be_empty
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'validates schemas against blank data' do
|
15
|
-
path = Fidor::Schema.path
|
16
|
-
files = Dir.glob("#{path}/**/*.json")
|
17
|
-
v = Validator::JsonSchema.new files
|
18
|
-
v.validate_data
|
19
|
-
expect(v.log[0]).to include('validate data')
|
20
|
-
# expect(v.errors).to be_empty
|
21
|
-
end
|
22
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'validator'
|
3
|
-
|
4
|
-
describe Validator::Json_Schema do
|
5
|
-
it 'validates schemas against the meta schema' do
|
6
|
-
path = Fidor::Schema.path
|
7
|
-
files = Dir.glob("#{path}/**/*.json")
|
8
|
-
v = Validator::Json_Schema.new files
|
9
|
-
v.validate_schemas
|
10
|
-
expect(v.log[0]).to include('validate schema')
|
11
|
-
expect(v.errors).to be_empty
|
12
|
-
end
|
13
|
-
end
|