fidor_schema 0.4.3 → 0.5.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile +4 -1
- data/Rakefile +20 -0
- data/lib/fidor_schema_version.rb +1 -1
- data/lib/validate/schema.json +150 -0
- data/lib/validate/validate.rb +184 -0
- data/schema/v1.0/base_types/base_types.json +1 -2
- data/schema/v1.0/batch_direct_debit.json +4 -5
- data/schema/v1.0/batch_transfer.json +5 -5
- data/schema/v1.0/customer.json +3 -8
- data/schema/v1.0/error.json +2 -5
- data/schema/v1.0/internal_transfer.json +6 -8
- data/schema/v1.0/sepa_credit_transfer.json +10 -11
- data/schema/v1.0/sepa_direct_debit.json +8 -11
- data/schema/v1.0/sepa_mandate.json +19 -22
- data/schema/v1.0/transaction.json +5 -5
- data/schema/v1.0/user.json +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dc90399a45af5d7e7693f2c26959e48fd8aa0ef
|
4
|
+
data.tar.gz: 7c5111f209fb28d926e626ea95ebb8388198d6fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee7c5bd7ca3a0cdd713fb6a8e232f6e8e0bf366c059423a1589098dd03addd521e1141f5a1e2295c5d2a17f7ba3e128edf010b79d0b79bb9d5ae8418bed5e71b
|
7
|
+
data.tar.gz: cb9a1f3f86c275efef8b3329bfeb45093d238cb47aa2c34965679154eef71ed6000784023b9788cd48eba387fe8e38b0f007029481db6c42996a347a70e9bbd3
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
A more detailed view of the changes can be found in the [commit messages](https://github.com/fidor/fidor_schema/commits/)
|
4
4
|
|
5
|
+
##2015-02
|
6
|
+
|
7
|
+
* SepaMandates filter by multiple references and ibans
|
8
|
+
* move required markup into 'required' array on top-level of an object
|
9
|
+
* change date field format to 'date-time' since date-only values are also valid in terms of http://tools.ietf.org/html/rfc3339#section-5.6
|
10
|
+
|
5
11
|
##2014-12
|
6
12
|
|
7
13
|
* be explicit for number fields, now defined as integers
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -6,3 +6,23 @@ require 'rspec/core/rake_task'
|
|
6
6
|
desc 'Run specs'
|
7
7
|
RSpec::Core::RakeTask.new
|
8
8
|
task :default => :spec
|
9
|
+
|
10
|
+
|
11
|
+
require 'validate/validate'
|
12
|
+
|
13
|
+
|
14
|
+
task :validate_dash do
|
15
|
+
Fidor::SchemaValidation.main :dash
|
16
|
+
end
|
17
|
+
|
18
|
+
task :validate_underscore do
|
19
|
+
Fidor::SchemaValidation.main :underscore
|
20
|
+
end
|
21
|
+
|
22
|
+
task :validate_jschema do
|
23
|
+
Fidor::SchemaValidation.main :jschema
|
24
|
+
end
|
25
|
+
|
26
|
+
task :validate_schema => [:validate_dash, :validate_underscore, :validate_jschema] do
|
27
|
+
|
28
|
+
end
|
data/lib/fidor_schema_version.rb
CHANGED
@@ -0,0 +1,150 @@
|
|
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
|
+
}
|
@@ -0,0 +1,184 @@
|
|
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
|
+
require 'json-schema'
|
21
|
+
require 'json_schema'
|
22
|
+
require 'jschema'
|
23
|
+
|
24
|
+
module Fidor
|
25
|
+
module SchemaValidation
|
26
|
+
|
27
|
+
class Validator # Base
|
28
|
+
def validate_all
|
29
|
+
@files_to_validate.each do |file|
|
30
|
+
schema = File.read file
|
31
|
+
puts "\nvalidating: #{file}"
|
32
|
+
validate schema
|
33
|
+
puts "\nusing #{file} for validation."
|
34
|
+
use_for_validation schema
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# https://github.com/ruby-json-schema/json-schema
|
40
|
+
class JsonDashSchemaValidator < Validator
|
41
|
+
def initialize files_to_validate
|
42
|
+
@files_to_validate = files_to_validate
|
43
|
+
@meta_schema_fn = "#{File.dirname(__FILE__)}/schema.json"
|
44
|
+
|
45
|
+
# need to know the base dir of the schema to resolve relative uris.
|
46
|
+
# see below.
|
47
|
+
@schemadir = File.dirname(@files_to_validate[0])
|
48
|
+
|
49
|
+
validate_all
|
50
|
+
end # init
|
51
|
+
|
52
|
+
def validate schema
|
53
|
+
begin
|
54
|
+
results = JSON::Validator.fully_validate(@meta_schema_fn, schema)
|
55
|
+
if !results || results.length == 0
|
56
|
+
puts "Passed!"
|
57
|
+
else
|
58
|
+
puts "Failed!"
|
59
|
+
puts results
|
60
|
+
end
|
61
|
+
rescue
|
62
|
+
puts "Failed! Error..."
|
63
|
+
puts $!
|
64
|
+
puts $!.backtrace
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def use_for_validation schema
|
69
|
+
# json-schema resolves relatives path relative to it's own "."
|
70
|
+
# not relative to the file containing the reference ...
|
71
|
+
baseDirectory = Dir.pwd
|
72
|
+
|
73
|
+
begin
|
74
|
+
Dir.chdir @schemadir
|
75
|
+
data = {}
|
76
|
+
results = JSON::Validator.fully_validate(schema, data)
|
77
|
+
if !results || results.length == 0
|
78
|
+
puts "Passed!"
|
79
|
+
else
|
80
|
+
puts "Failed!"
|
81
|
+
puts results
|
82
|
+
end
|
83
|
+
ensure
|
84
|
+
Dir.chdir baseDirectory
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class JsonUnderscoreSchemaValidator < Validator
|
90
|
+
def initialize files_to_validate
|
91
|
+
@files_to_validate = files_to_validate
|
92
|
+
schema_data = File.read("#{File.dirname(__FILE__)}/schema.json")
|
93
|
+
schema_json = JSON.parse(schema_data)
|
94
|
+
@schema = JsonSchema.parse!(schema_json)
|
95
|
+
validate_all
|
96
|
+
end
|
97
|
+
|
98
|
+
def validate schema
|
99
|
+
begin
|
100
|
+
schema_to_test = JSON.parse(schema)
|
101
|
+
@schema.validate! schema_to_test
|
102
|
+
puts "Passed validation against meta-schema!"
|
103
|
+
JsonSchema.parse!(schema_to_test)
|
104
|
+
rescue
|
105
|
+
puts $!
|
106
|
+
puts "Failed!"
|
107
|
+
else
|
108
|
+
puts "Passed!"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
def use_for_validation schema
|
112
|
+
begin
|
113
|
+
schema_to_test = JSON.parse(schema)
|
114
|
+
JsonSchema.parse!(schema_to_test)
|
115
|
+
rescue
|
116
|
+
puts $!
|
117
|
+
puts "Failed"
|
118
|
+
else
|
119
|
+
puts "Passed!"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
class JSchemaValidator < Validator
|
125
|
+
def initialize files_to_validate
|
126
|
+
@files_to_validate = files_to_validate
|
127
|
+
schema_data = File.read("#{File.dirname(__FILE__)}/schema.json")
|
128
|
+
schema_json = JSON.parse(schema_data)
|
129
|
+
@schema = JSchema.build(schema_json)
|
130
|
+
validate_all
|
131
|
+
end
|
132
|
+
def validate schema
|
133
|
+
schema_to_test = JSON.parse(schema)
|
134
|
+
results = @schema.validate schema_to_test
|
135
|
+
if !results || results.length == 0
|
136
|
+
puts "Passed!"
|
137
|
+
else
|
138
|
+
puts "Failed!"
|
139
|
+
puts results
|
140
|
+
end
|
141
|
+
end
|
142
|
+
def use_for_validation schema
|
143
|
+
schema_to_test = JSON.parse(schema)
|
144
|
+
begin
|
145
|
+
JSchema.build(schema_to_test)
|
146
|
+
rescue
|
147
|
+
puts "Failed!"
|
148
|
+
puts $!
|
149
|
+
# puts $!.backtrace
|
150
|
+
else
|
151
|
+
puts "Passed!"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.find_all_schema
|
157
|
+
# asssume we're running from rake and
|
158
|
+
# pwd is project root ...
|
159
|
+
this_dir = File.dirname(__FILE__)
|
160
|
+
repo_dir = Pathname.new(this_dir+"/../..").cleanpath.to_s
|
161
|
+
|
162
|
+
Dir.glob("#{repo_dir}/schema/*/*.json")
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
def self.main validator
|
167
|
+
case validator
|
168
|
+
when :underscore
|
169
|
+
puts "Running validation with JSON_Schema"
|
170
|
+
JsonUnderscoreSchemaValidator.new find_all_schema
|
171
|
+
when :dash
|
172
|
+
puts "Running validation with JSON-Schema"
|
173
|
+
JsonDashSchemaValidator.new find_all_schema
|
174
|
+
when :jschema
|
175
|
+
puts "Running validation with JSchema"
|
176
|
+
JSchemaValidator.new find_all_schema
|
177
|
+
else
|
178
|
+
puts "Unknown validator: #{validator}"
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
@@ -50,8 +50,7 @@
|
|
50
50
|
},
|
51
51
|
"external_uid" : {
|
52
52
|
"description" : "Unique ID of the creator of the transaction. In case a uid is reused for a transaction, it is not executed, this mechanism can be used to prevent double bookings in case of network failure or similar event where transaction status is unknown",
|
53
|
-
"type" : "string"
|
54
|
-
"required" : true
|
53
|
+
"type" : "string"
|
55
54
|
},
|
56
55
|
"iban" : {
|
57
56
|
"description" : "IBAN",
|
@@ -5,6 +5,7 @@
|
|
5
5
|
"title" : "Batch Direct Debit",
|
6
6
|
"name" : "batch_direct_debit",
|
7
7
|
"description" : "PREVIEW: A direct debit batch contains multiple direct debits which are processed asynchronously.",
|
8
|
+
"required" : ["account_id", "external_uid"],
|
8
9
|
"properties" : {
|
9
10
|
"id" : {
|
10
11
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
@@ -13,8 +14,7 @@
|
|
13
14
|
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
14
15
|
},
|
15
16
|
"account_id" : {
|
16
|
-
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
17
|
-
"required" : true
|
17
|
+
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
18
18
|
},
|
19
19
|
"user_id" : {
|
20
20
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
@@ -22,7 +22,6 @@
|
|
22
22
|
"sepa_direct_debits" : {
|
23
23
|
"description" : "The direct_debits to process.",
|
24
24
|
"type" : "array",
|
25
|
-
"required" : false,
|
26
25
|
"items" : {
|
27
26
|
"type" : "object",
|
28
27
|
"properties" : {
|
@@ -94,12 +93,12 @@
|
|
94
93
|
"properties" : {
|
95
94
|
"filter[created_at_from]" : {
|
96
95
|
"title" : "Creation date filter from >= date",
|
97
|
-
"format" : "date",
|
96
|
+
"format" : "date-time",
|
98
97
|
"type" : "string"
|
99
98
|
},
|
100
99
|
"filter[created_at_to]" : {
|
101
100
|
"title" : "Creation date filter to <= date",
|
102
|
-
"format" : "date",
|
101
|
+
"format" : "date-time",
|
103
102
|
"type" : "string"
|
104
103
|
},
|
105
104
|
"filter[states]" : {
|
@@ -5,6 +5,7 @@
|
|
5
5
|
"title" : "Batch Transfer",
|
6
6
|
"name" : "batch_transfer",
|
7
7
|
"description" : "PREVIEW: A transfer batch contains multiple transfers which are processed asynchronously.",
|
8
|
+
"required" : ["account_id", "external_uid"],
|
8
9
|
"properties" : {
|
9
10
|
"id" : {
|
10
11
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
@@ -13,8 +14,7 @@
|
|
13
14
|
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
14
15
|
},
|
15
16
|
"account_id" : {
|
16
|
-
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
17
|
-
"required" : true
|
17
|
+
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
18
18
|
},
|
19
19
|
"user_id" : {
|
20
20
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
@@ -128,17 +128,17 @@
|
|
128
128
|
"properties" : {
|
129
129
|
"filter[account_ids]" : {
|
130
130
|
"title" : "Find transfers belonging to the given account ids. Single id or multiple ids comma-separated.",
|
131
|
-
"format" : "date",
|
131
|
+
"format" : "date-time",
|
132
132
|
"type" : "string"
|
133
133
|
},
|
134
134
|
"filter[created_at_from]" : {
|
135
135
|
"title" : "Creation date filter from >= date",
|
136
|
-
"format" : "date",
|
136
|
+
"format" : "date-time",
|
137
137
|
"type" : "string"
|
138
138
|
},
|
139
139
|
"filter[created_at_to]" : {
|
140
140
|
"title" : "Creation date filter to <= date",
|
141
|
-
"format" : "date",
|
141
|
+
"format" : "date-time",
|
142
142
|
"type" : "string"
|
143
143
|
},
|
144
144
|
"filter[states]" : {
|
data/schema/v1.0/customer.json
CHANGED
@@ -3,26 +3,24 @@
|
|
3
3
|
"title" : "Customer",
|
4
4
|
"name" : "customer",
|
5
5
|
"description" : "",
|
6
|
+
"required" : ["email", "first_name", "last_name", "gender", "title", "nick"],
|
6
7
|
"properties" : {
|
7
8
|
"id" : {
|
8
9
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
9
10
|
},
|
10
11
|
"email" : {
|
11
12
|
"$ref" : "./base_types/base_types.json#definitions/email",
|
12
|
-
"required" : true,
|
13
13
|
"readonly" : true
|
14
14
|
},
|
15
15
|
"first_name" : {
|
16
16
|
"description" : "The given name of the customer",
|
17
17
|
"type" : "string",
|
18
|
-
"required" : true,
|
19
18
|
"maxLength" : 30,
|
20
19
|
"readonly" : true
|
21
20
|
},
|
22
21
|
"last_name" : {
|
23
22
|
"description" : "The family name of the customer",
|
24
23
|
"type" : "string",
|
25
|
-
"required" : true,
|
26
24
|
"maxLength" : 30,
|
27
25
|
"readonly" : true
|
28
26
|
},
|
@@ -33,20 +31,17 @@
|
|
33
31
|
"f"
|
34
32
|
],
|
35
33
|
"type" : "string",
|
36
|
-
"required" : true,
|
37
34
|
"readonly" : true
|
38
35
|
},
|
39
36
|
"title" : {
|
40
37
|
"description" : "Salutation e.g Mr. or Ms./Mrs.",
|
41
38
|
"type" : "string",
|
42
|
-
"required" : true,
|
43
39
|
"maxLength" : 30,
|
44
40
|
"readonly" : true
|
45
41
|
},
|
46
42
|
"nick" : {
|
47
43
|
"description" : "Nickname used in community.",
|
48
44
|
"type" : "string",
|
49
|
-
"required" : true,
|
50
45
|
"maxLength" : 40,
|
51
46
|
"minLength" : 2,
|
52
47
|
"readonly" : true
|
@@ -114,7 +109,7 @@
|
|
114
109
|
"birthday" : {
|
115
110
|
"description" : "Date of birth",
|
116
111
|
"type" : "string",
|
117
|
-
"format" : "date",
|
112
|
+
"format" : "date-time",
|
118
113
|
"readonly" : true
|
119
114
|
},
|
120
115
|
"creditor_identifier" : {
|
@@ -181,7 +176,7 @@
|
|
181
176
|
},
|
182
177
|
"id_card_valid_until" : {
|
183
178
|
"description" : "Expiration date of id card",
|
184
|
-
"format" : "date",
|
179
|
+
"format" : "date-time",
|
185
180
|
"type" : "string",
|
186
181
|
"readonly" : true
|
187
182
|
},
|
data/schema/v1.0/error.json
CHANGED
@@ -3,36 +3,33 @@
|
|
3
3
|
"title" : "Error",
|
4
4
|
"name" : "error",
|
5
5
|
"description" : "A standard error object",
|
6
|
+
"required" : ["message", "code", "errors"],
|
6
7
|
"properties" : {
|
7
8
|
"message" : {
|
8
9
|
"description" : "a human readable representation of the error",
|
9
|
-
"required" : true,
|
10
10
|
"type" : "string",
|
11
11
|
"readonly" : true
|
12
12
|
},
|
13
13
|
"code" : {
|
14
14
|
"description" : "a numeric code identifying the error",
|
15
|
-
"required" : false,
|
16
15
|
"type" : "integer",
|
17
16
|
"readonly" : true
|
18
17
|
},
|
19
18
|
"errors" : {
|
20
19
|
"description" : "error details, if applicable",
|
21
|
-
"required" : false,
|
22
20
|
"type" : "array",
|
23
21
|
"items" : {
|
24
22
|
"type" : "object",
|
23
|
+
"required" : ["field", "message"],
|
25
24
|
"properties" : {
|
26
25
|
"field" : {
|
27
26
|
"description" : "identifies the field that caused this error",
|
28
27
|
"type" : "string",
|
29
|
-
"required" : false,
|
30
28
|
"readonly" : true
|
31
29
|
},
|
32
30
|
"message" : {
|
33
31
|
"description" : "provide more information about the cause of this error",
|
34
32
|
"type" : "string",
|
35
|
-
"required" : false,
|
36
33
|
"readonly" : true
|
37
34
|
}
|
38
35
|
}
|
@@ -3,6 +3,7 @@
|
|
3
3
|
"title" : "Internal Transfer",
|
4
4
|
"name" : "internal_transfer",
|
5
5
|
"description" : "A transfer initiates a transaction e.g get / send money. If the transfer fails no transaction is created!",
|
6
|
+
"required" : ["account_id", "receiver", "amount", "external_uid"],
|
6
7
|
"properties" : {
|
7
8
|
"id" : {
|
8
9
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
@@ -12,8 +13,7 @@
|
|
12
13
|
},
|
13
14
|
"account_id" : {
|
14
15
|
"description" : "Sending account.",
|
15
|
-
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
16
|
-
"required" : true
|
16
|
+
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
17
17
|
},
|
18
18
|
"user_id" : {
|
19
19
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
@@ -23,7 +23,6 @@
|
|
23
23
|
},
|
24
24
|
"receiver" : {
|
25
25
|
"description" : "The transaction's receiver can be defined as a numerical fidor account id, a twitter name, an email or a phone number.",
|
26
|
-
"required" : true,
|
27
26
|
"oneOf" : [
|
28
27
|
{
|
29
28
|
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
@@ -40,8 +39,7 @@
|
|
40
39
|
]
|
41
40
|
},
|
42
41
|
"amount" : {
|
43
|
-
"$ref" : "./base_types/base_types.json#definitions/amount"
|
44
|
-
"required" : true
|
42
|
+
"$ref" : "./base_types/base_types.json#definitions/amount"
|
45
43
|
},
|
46
44
|
"currency" : {
|
47
45
|
"$ref" : "./base_types/base_types.json#definitions/currency",
|
@@ -84,17 +82,17 @@
|
|
84
82
|
"properties" : {
|
85
83
|
"filter[account_ids]" : {
|
86
84
|
"title" : "Find internal transfers belonging to the given account ids. Single id or multiple ids comma-separated.",
|
87
|
-
"format" : "date",
|
85
|
+
"format" : "date-time",
|
88
86
|
"type" : "string"
|
89
87
|
},
|
90
88
|
"filter[created_at_from]" : {
|
91
89
|
"title" : "Creation date filter from >= date",
|
92
|
-
"format" : "date",
|
90
|
+
"format" : "date-time",
|
93
91
|
"type" : "string"
|
94
92
|
},
|
95
93
|
"filter[created_at_to]" : {
|
96
94
|
"title" : "Creation date filter to <= date",
|
97
|
-
"format" : "date",
|
95
|
+
"format" : "date-time",
|
98
96
|
"type" : "string"
|
99
97
|
},
|
100
98
|
"filter[states]" : {
|
@@ -3,6 +3,7 @@
|
|
3
3
|
"title" : "Sepa Credit Transfer",
|
4
4
|
"name" : "sepa_credit_transfer",
|
5
5
|
"description" : "A transfer initiates a transaction e.g get / send money. If the transfer fails no transaction is created!",
|
6
|
+
"required" : ["account_id", "amount", "external_uid"],
|
6
7
|
"properties" : {
|
7
8
|
"id" : {
|
8
9
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
@@ -11,8 +12,7 @@
|
|
11
12
|
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
12
13
|
},
|
13
14
|
"account_id" : {
|
14
|
-
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
15
|
-
"required" : true
|
15
|
+
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
16
16
|
},
|
17
17
|
"user_id" : {
|
18
18
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
@@ -25,8 +25,7 @@
|
|
25
25
|
"maxLength" : 140
|
26
26
|
},
|
27
27
|
"amount" : {
|
28
|
-
"$ref" : "./base_types/base_types.json#definitions/amount"
|
29
|
-
"required" : true
|
28
|
+
"$ref" : "./base_types/base_types.json#definitions/amount"
|
30
29
|
},
|
31
30
|
"currency" : {
|
32
31
|
"$ref" : "./base_types/base_types.json#definitions/currency",
|
@@ -72,22 +71,22 @@
|
|
72
71
|
"href" : "sepa_credit_transfers",
|
73
72
|
"properties" : {
|
74
73
|
"filter[account_ids]" : {
|
75
|
-
"
|
76
|
-
"format" : "date",
|
74
|
+
"description" : "Find transfers belonging to the given account ids. Single id or multiple ids comma-separated.",
|
75
|
+
"format" : "date-time",
|
77
76
|
"type" : "string"
|
78
77
|
},
|
79
78
|
"filter[created_at_from]" : {
|
80
|
-
"
|
81
|
-
"format" : "date",
|
79
|
+
"description" : "Creation date filter from >= date",
|
80
|
+
"format" : "date-time",
|
82
81
|
"type" : "string"
|
83
82
|
},
|
84
83
|
"filter[created_at_to]" : {
|
85
|
-
"
|
86
|
-
"format" : "date",
|
84
|
+
"description" : "Creation date filter to <= date",
|
85
|
+
"format" : "date-time",
|
87
86
|
"type" : "string"
|
88
87
|
},
|
89
88
|
"filter[states]" : {
|
90
|
-
"
|
89
|
+
"description" : "Filter by single or multiple csv delimited states",
|
91
90
|
"enum" : [
|
92
91
|
"received",
|
93
92
|
"mobile_tan_sent",
|
@@ -3,6 +3,7 @@
|
|
3
3
|
"title" : "Sepa Direct Debit",
|
4
4
|
"name" : "sepa_direct_debit",
|
5
5
|
"description" : "A direct debit can only be performed with a valid sepa mandate, authorizing access to the debtor's account.",
|
6
|
+
"required" : ["account_id", "mandate_id", "amount", "collection_date", "external_uid"],
|
6
7
|
"properties" : {
|
7
8
|
"id" : {
|
8
9
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
@@ -11,16 +12,14 @@
|
|
11
12
|
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
12
13
|
},
|
13
14
|
"account_id" : {
|
14
|
-
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
15
|
-
"required" : true
|
15
|
+
"$ref" : "./base_types/base_types.json#definitions/account_id"
|
16
16
|
},
|
17
17
|
"user_id" : {
|
18
18
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
19
19
|
},
|
20
20
|
"mandate_id" : {
|
21
21
|
"description" : "The sepa mandate used by the debit",
|
22
|
-
"type" : "string"
|
23
|
-
"required" : true
|
22
|
+
"type" : "string"
|
24
23
|
},
|
25
24
|
"creditor_identifier" : {
|
26
25
|
"description" : "Creditor Identifier",
|
@@ -28,8 +27,7 @@
|
|
28
27
|
"readonly" : true
|
29
28
|
},
|
30
29
|
"amount" : {
|
31
|
-
"$ref" : "./base_types/base_types.json#definitions/amount"
|
32
|
-
"required" : true
|
30
|
+
"$ref" : "./base_types/base_types.json#definitions/amount"
|
33
31
|
},
|
34
32
|
"currency" : {
|
35
33
|
"$ref" : "./base_types/base_types.json#definitions/currency",
|
@@ -44,8 +42,7 @@
|
|
44
42
|
},
|
45
43
|
"collection_date" : {
|
46
44
|
"description" : "Requested date for the debit to be withdrawn from the foreign account.",
|
47
|
-
"format" : "date",
|
48
|
-
"required" : true,
|
45
|
+
"format" : "date-time",
|
49
46
|
"type" : "string"
|
50
47
|
},
|
51
48
|
"state" : {
|
@@ -77,17 +74,17 @@
|
|
77
74
|
"properties" : {
|
78
75
|
"filter[account_ids]" : {
|
79
76
|
"title" : "Find direct debits belonging to the given account ids. Single id or multiple ids comma-separated.",
|
80
|
-
"format" : "date",
|
77
|
+
"format" : "date-time",
|
81
78
|
"type" : "string"
|
82
79
|
},
|
83
80
|
"filter[created_at_from]" : {
|
84
81
|
"title" : "Creation date filter from >= date",
|
85
|
-
"format" : "date",
|
82
|
+
"format" : "date-time",
|
86
83
|
"type" : "string"
|
87
84
|
},
|
88
85
|
"filter[created_at_to]" : {
|
89
86
|
"title" : "Creation date filter to <= date",
|
90
|
-
"format" : "date",
|
87
|
+
"format" : "date-time",
|
91
88
|
"type" : "string"
|
92
89
|
},
|
93
90
|
"filter[states]" : {
|
@@ -3,18 +3,19 @@
|
|
3
3
|
"title" : "Sepa Mandate",
|
4
4
|
"name" : "sepa_mandate",
|
5
5
|
"description" : "A mandate object authorizing debits from an account.",
|
6
|
+
"required" : ["external_uid", "customer_id", "mandate_reference", "remote_title", "remote_name", "remote_email",
|
7
|
+
"remote_address_line1", "remote_address_line2", "remote_country", "remote_iban", "remote_bic",
|
8
|
+
"signature_date" ],
|
6
9
|
"properties" : {
|
7
10
|
"id" : {
|
8
11
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
9
12
|
},
|
10
13
|
"external_uid" : {
|
11
|
-
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
12
|
-
"required" : true
|
14
|
+
"$ref" : "./base_types/base_types.json#definitions/external_uid"
|
13
15
|
},
|
14
16
|
"customer_id" : {
|
15
17
|
"description" : "Customer for which this mandate is valid.",
|
16
|
-
"type" : "string"
|
17
|
-
"required" : true
|
18
|
+
"type" : "string"
|
18
19
|
},
|
19
20
|
"user_id" : {
|
20
21
|
"$ref" : "./base_types/base_types.json#definitions/user_id"
|
@@ -22,7 +23,6 @@
|
|
22
23
|
"mandate_reference" : {
|
23
24
|
"description" : "Unique reference of the mandate.",
|
24
25
|
"type" : "string",
|
25
|
-
"required" : true,
|
26
26
|
"maxLength" : 35
|
27
27
|
},
|
28
28
|
"sequence" : {
|
@@ -46,46 +46,38 @@
|
|
46
46
|
"remote_title" : {
|
47
47
|
"description" : "Title of the debtor e.g Dr. Prof.",
|
48
48
|
"type" : "string",
|
49
|
-
"required" : true,
|
50
49
|
"maxLength" : 35
|
51
50
|
},
|
52
51
|
"remote_name" : {
|
53
52
|
"description" : "Full name of debtor",
|
54
53
|
"type" : "string",
|
55
|
-
"required" : true,
|
56
54
|
"maxLength" : 70
|
57
55
|
},
|
58
56
|
"remote_email" : {
|
59
57
|
"description" : "Debtor's email",
|
60
58
|
"type" : "string",
|
61
|
-
"required" : true,
|
62
59
|
"maxLength" : 70
|
63
60
|
},
|
64
61
|
"remote_address_line1" : {
|
65
62
|
"description" : "Address street.",
|
66
63
|
"type" : "string",
|
67
|
-
"required" : true,
|
68
64
|
"maxLength" : 35
|
69
65
|
},
|
70
66
|
"remote_address_line2" : {
|
71
67
|
"description" : "ZIP and City",
|
72
68
|
"type" : "string",
|
73
|
-
"required" : true,
|
74
69
|
"maxLength" : 70
|
75
70
|
},
|
76
71
|
"remote_country" : {
|
77
72
|
"description" : "2 digit country code, ISO 3166",
|
78
73
|
"type" : "string",
|
79
|
-
"required" : true,
|
80
74
|
"maxLength" : 2
|
81
75
|
},
|
82
76
|
"remote_iban" : {
|
83
|
-
"$ref" : "./base_types/base_types.json#definitions/iban"
|
84
|
-
"required" : true
|
77
|
+
"$ref" : "./base_types/base_types.json#definitions/iban"
|
85
78
|
},
|
86
79
|
"remote_bic" : {
|
87
|
-
"$ref" : "./base_types/base_types.json#definitions/bic"
|
88
|
-
"required" : true
|
80
|
+
"$ref" : "./base_types/base_types.json#definitions/bic"
|
89
81
|
},
|
90
82
|
"remote_ultimate_name" : {
|
91
83
|
"description" : "Ultimate name",
|
@@ -99,14 +91,19 @@
|
|
99
91
|
},
|
100
92
|
"signature_date" : {
|
101
93
|
"description" : "Date the mandate was signed of by the debtor.",
|
102
|
-
"format" : "date",
|
103
|
-
"required" : true,
|
94
|
+
"format" : "date-time",
|
104
95
|
"type" : "string"
|
105
96
|
},
|
106
97
|
"valid_from_date" : {
|
107
98
|
"description" : "Date the mandate started to be valid.",
|
108
|
-
"format" : "date",
|
99
|
+
"format" : "date-time",
|
109
100
|
"type" : "string"
|
101
|
+
},
|
102
|
+
"created_at" : {
|
103
|
+
"$ref" : "./base_types/base_types.json#definitions/created_at"
|
104
|
+
},
|
105
|
+
"updated_at" : {
|
106
|
+
"$ref" : "./base_types/base_types.json#definitions/updated_at"
|
110
107
|
}
|
111
108
|
},
|
112
109
|
"links" : [
|
@@ -118,14 +115,14 @@
|
|
118
115
|
"rel" : "instances",
|
119
116
|
"href" : "sepa_mandates",
|
120
117
|
"properties" : {
|
121
|
-
"filter[
|
118
|
+
"filter[mandate_references]" : {
|
122
119
|
"title" : "Search",
|
123
|
-
"description" : "Search by mandate reference",
|
120
|
+
"description" : "Search by mandate reference, add multiple comma separated",
|
124
121
|
"type" : "string"
|
125
122
|
},
|
126
|
-
"filter[
|
123
|
+
"filter[remote_ibans]" : {
|
127
124
|
"title" : "Search",
|
128
|
-
"description" : "Search by remote iban",
|
125
|
+
"description" : "Search by remote iban, add multiple comma separated",
|
129
126
|
"type" : "string"
|
130
127
|
},
|
131
128
|
"page" : {
|
@@ -61,13 +61,13 @@
|
|
61
61
|
},
|
62
62
|
"booking_date" : {
|
63
63
|
"description" : "Date the transaction was booked. ISO 8601 Date",
|
64
|
-
"format" : "date",
|
64
|
+
"format" : "date-time",
|
65
65
|
"readonly" : true,
|
66
66
|
"type" : "string"
|
67
67
|
},
|
68
68
|
"value_date" : {
|
69
69
|
"description" : "Date the amount was credited to the account. ISO 8601 Date",
|
70
|
-
"format" : "date",
|
70
|
+
"format" : "date-time",
|
71
71
|
"readonly" : true,
|
72
72
|
"type" : "string"
|
73
73
|
},
|
@@ -99,7 +99,7 @@
|
|
99
99
|
"properties" : {
|
100
100
|
"filter[account_ids]" : {
|
101
101
|
"title" : "Find transactions belonging to the given account ids. Single id or multiple ids comma-separated.",
|
102
|
-
"format" : "date",
|
102
|
+
"format" : "date-time",
|
103
103
|
"type" : "string"
|
104
104
|
},
|
105
105
|
"filter[id_from]" : {
|
@@ -114,12 +114,12 @@
|
|
114
114
|
},
|
115
115
|
"filter[booking_date_from]" : {
|
116
116
|
"title" : "Date filter from >= date. ISO 8601 Date",
|
117
|
-
"format" : "date",
|
117
|
+
"format" : "date-time",
|
118
118
|
"type" : "string"
|
119
119
|
},
|
120
120
|
"filter[booking_date_to]" : {
|
121
121
|
"title" : "Date filter to <= date. ISO 8601 Date",
|
122
|
-
"format" : "date",
|
122
|
+
"format" : "date-time",
|
123
123
|
"type" : "string"
|
124
124
|
},
|
125
125
|
"filter[transaction_types]" : {
|
data/schema/v1.0/user.json
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
"title" : "User",
|
4
4
|
"name" : "user",
|
5
5
|
"description" : "",
|
6
|
+
"required" : ["email"],
|
6
7
|
"properties" : {
|
7
8
|
"id" : {
|
8
9
|
"$ref" : "./base_types/base_types.json#definitions/id"
|
9
10
|
},
|
10
11
|
"email" : {
|
11
12
|
"$ref" : "./base_types/base_types.json#definitions/email",
|
12
|
-
"required" : true,
|
13
13
|
"readonly" : true
|
14
14
|
},
|
15
15
|
"last_sign_in_at" : {
|
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -111,6 +111,8 @@ files:
|
|
111
111
|
- lib/fidor/schema.rb
|
112
112
|
- lib/fidor_schema.rb
|
113
113
|
- lib/fidor_schema_version.rb
|
114
|
+
- lib/validate/schema.json
|
115
|
+
- lib/validate/validate.rb
|
114
116
|
- schema/v1.0/account.json
|
115
117
|
- schema/v1.0/base_types/base_types.json
|
116
118
|
- schema/v1.0/base_types/lists.json
|