yoti 1.7.1 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yoti.rb +2 -0
- data/lib/yoti/data_type/signed_time_stamp.rb +1 -1
- data/lib/yoti/doc_scan/client.rb +71 -47
- data/lib/yoti/doc_scan/constants.rb +2 -0
- data/lib/yoti/doc_scan/errors.rb +81 -0
- data/lib/yoti/doc_scan/session/create/requested_text_extraction_task.rb +26 -4
- data/lib/yoti/doc_scan/session/retrieve/document_id_photo_response.rb +21 -0
- data/lib/yoti/doc_scan/session/retrieve/id_document_resource_response.rb +5 -0
- data/lib/yoti/dynamic_share_service/policy/dynamic_policy.rb +67 -5
- data/lib/yoti/errors.rb +4 -6
- data/lib/yoti/version.rb +1 -1
- data/yoti.gemspec +14 -2
- metadata +6 -11
- data/.github/ISSUE_TEMPLATE.md +0 -17
- data/.gitignore +0 -40
- data/CONTRIBUTING.md +0 -98
- data/Guardfile +0 -11
- data/Rakefile +0 -50
- data/rubocop.yml +0 -65
- data/yardstick.yml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e34d2dbc6a002d6ea68375d1e0d0ba861587db16a7502e597aaacac5f97799f4
|
4
|
+
data.tar.gz: 81e54ccb7d6b3270efea24d7e1a632d4719f604eccd7da49f101ff6e565ca99d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4433d2b8ac27da64991fe3f1f0d2271feb3c1ad41f43b50c49d9ec0615a75714042e63ef343fb93f4f8ae98860f93a4534f2128eafe1af7813ceba6d88458620
|
7
|
+
data.tar.gz: 0a2338a401a97000ba2a4999347c3e4471bfa896565653d87ac2b548c11b8eae73c86a1241cad5293ef3e19922e97caa7c67658df603c7704ced9965a806abc7
|
data/lib/yoti.rb
CHANGED
@@ -51,6 +51,7 @@ require_relative 'yoti/share/attribute_issuance_details'
|
|
51
51
|
|
52
52
|
require_relative 'yoti/doc_scan/client'
|
53
53
|
require_relative 'yoti/doc_scan/constants'
|
54
|
+
require_relative 'yoti/doc_scan/errors'
|
54
55
|
|
55
56
|
require_relative 'yoti/doc_scan/session/create/create_session_result'
|
56
57
|
require_relative 'yoti/doc_scan/session/create/requested_check'
|
@@ -74,6 +75,7 @@ require_relative 'yoti/doc_scan/session/retrieve/authenticity_check_response'
|
|
74
75
|
require_relative 'yoti/doc_scan/session/retrieve/breakdown_response'
|
75
76
|
require_relative 'yoti/doc_scan/session/retrieve/details_response'
|
76
77
|
require_relative 'yoti/doc_scan/session/retrieve/document_fields_response'
|
78
|
+
require_relative 'yoti/doc_scan/session/retrieve/document_id_photo_response'
|
77
79
|
require_relative 'yoti/doc_scan/session/retrieve/face_map_response'
|
78
80
|
require_relative 'yoti/doc_scan/session/retrieve/face_match_check_response'
|
79
81
|
require_relative 'yoti/doc_scan/session/retrieve/frame_response'
|
data/lib/yoti/doc_scan/client.rb
CHANGED
@@ -18,15 +18,18 @@ module Yoti
|
|
18
18
|
'session_specification'
|
19
19
|
)
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
request = create_request
|
22
|
+
.with_http_method('POST')
|
23
|
+
.with_endpoint('sessions')
|
24
|
+
.with_payload(session_specification)
|
25
|
+
.with_query_param('sdkId', Yoti.configuration.client_sdk_id)
|
26
|
+
.build
|
27
|
+
|
28
|
+
begin
|
29
|
+
Yoti::DocScan::Session::Create::CreateSessionResult.new(JSON.parse(request.execute.body))
|
30
|
+
rescue Yoti::RequestError => e
|
31
|
+
raise Yoti::DocScan::Error.wrap(e)
|
32
|
+
end
|
30
33
|
end
|
31
34
|
|
32
35
|
#
|
@@ -39,14 +42,17 @@ module Yoti
|
|
39
42
|
def get_session(session_id)
|
40
43
|
Validation.assert_is_a(String, session_id, 'session_id')
|
41
44
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
request = create_request
|
46
|
+
.with_http_method('GET')
|
47
|
+
.with_endpoint(session_path(session_id))
|
48
|
+
.with_query_param('sdkId', Yoti.configuration.client_sdk_id)
|
49
|
+
.build
|
50
|
+
|
51
|
+
begin
|
52
|
+
Yoti::DocScan::Session::Retrieve::GetSessionResult.new(JSON.parse(request.execute.body))
|
53
|
+
rescue Yoti::RequestError => e
|
54
|
+
raise Yoti::DocScan::Error.wrap(e)
|
55
|
+
end
|
50
56
|
end
|
51
57
|
|
52
58
|
#
|
@@ -58,12 +64,17 @@ module Yoti
|
|
58
64
|
def delete_session(session_id)
|
59
65
|
Validation.assert_is_a(String, session_id, 'session_id')
|
60
66
|
|
61
|
-
create_request
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
+
request = create_request
|
68
|
+
.with_http_method('DELETE')
|
69
|
+
.with_endpoint(session_path(session_id))
|
70
|
+
.with_query_param('sdkId', Yoti.configuration.client_sdk_id)
|
71
|
+
.build
|
72
|
+
|
73
|
+
begin
|
74
|
+
request.execute
|
75
|
+
rescue Yoti::RequestError => e
|
76
|
+
raise Yoti::DocScan::Error.wrap(e)
|
77
|
+
end
|
67
78
|
end
|
68
79
|
|
69
80
|
#
|
@@ -79,17 +90,22 @@ module Yoti
|
|
79
90
|
Validation.assert_is_a(String, session_id, 'session_id')
|
80
91
|
Validation.assert_is_a(String, media_id, 'media_id')
|
81
92
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
+
request = create_request
|
94
|
+
.with_http_method('GET')
|
95
|
+
.with_endpoint(media_path(session_id, media_id))
|
96
|
+
.with_query_param('sdkId', Yoti.configuration.client_sdk_id)
|
97
|
+
.build
|
98
|
+
|
99
|
+
begin
|
100
|
+
response = request.execute
|
101
|
+
|
102
|
+
Yoti::Media.new(
|
103
|
+
response.body,
|
104
|
+
response.get_fields('content-type')[0]
|
105
|
+
)
|
106
|
+
rescue Yoti::RequestError => e
|
107
|
+
raise Yoti::DocScan::Error.wrap(e)
|
108
|
+
end
|
93
109
|
end
|
94
110
|
|
95
111
|
#
|
@@ -103,12 +119,17 @@ module Yoti
|
|
103
119
|
Validation.assert_is_a(String, session_id, 'session_id')
|
104
120
|
Validation.assert_is_a(String, media_id, 'media_id')
|
105
121
|
|
106
|
-
create_request
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
122
|
+
request = create_request
|
123
|
+
.with_http_method('DELETE')
|
124
|
+
.with_endpoint(media_path(session_id, media_id))
|
125
|
+
.with_query_param('sdkId', Yoti.configuration.client_sdk_id)
|
126
|
+
.build
|
127
|
+
|
128
|
+
begin
|
129
|
+
request.execute
|
130
|
+
rescue Yoti::RequestError => e
|
131
|
+
raise Yoti::DocScan::Error.wrap(e)
|
132
|
+
end
|
112
133
|
end
|
113
134
|
|
114
135
|
#
|
@@ -117,13 +138,16 @@ module Yoti
|
|
117
138
|
# @return [Yoti::DocScan::Support::SupportedDocumentsResponse]
|
118
139
|
#
|
119
140
|
def supported_documents
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
141
|
+
request = create_request
|
142
|
+
.with_http_method('GET')
|
143
|
+
.with_endpoint('supported-documents')
|
144
|
+
.build
|
145
|
+
|
146
|
+
begin
|
147
|
+
Yoti::DocScan::Support::SupportedDocumentsResponse.new(JSON.parse(request.execute.body))
|
148
|
+
rescue Yoti::RequestError => e
|
149
|
+
raise Yoti::DocScan::Error.wrap(e)
|
150
|
+
end
|
127
151
|
end
|
128
152
|
|
129
153
|
private
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Yoti
|
4
|
+
module DocScan
|
5
|
+
#
|
6
|
+
# Raises exceptions related to Doc Scan API requests
|
7
|
+
#
|
8
|
+
class Error < RequestError
|
9
|
+
def initialize(msg = nil, response = nil)
|
10
|
+
super(msg, response)
|
11
|
+
|
12
|
+
@default_message = msg
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
@message ||= format_message
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Wraps an existing error
|
21
|
+
#
|
22
|
+
# @param [Error] error
|
23
|
+
#
|
24
|
+
# @return [self]
|
25
|
+
#
|
26
|
+
def self.wrap(error)
|
27
|
+
new(error.message, error.response)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
#
|
33
|
+
# Formats error message from response.
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
#
|
37
|
+
def format_message
|
38
|
+
return @default_message if @response.nil? || @response['Content-Type'] != 'application/json'
|
39
|
+
|
40
|
+
json = JSON.parse(@response.body)
|
41
|
+
format_response(json) || @default_message
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# Format JSON error response.
|
46
|
+
#
|
47
|
+
# @param [Hash] json
|
48
|
+
#
|
49
|
+
# @return [String, nil]
|
50
|
+
#
|
51
|
+
def format_response(json)
|
52
|
+
return nil if json['code'].nil? || json['message'].nil?
|
53
|
+
|
54
|
+
code_message = "#{json['code']} - #{json['message']}"
|
55
|
+
|
56
|
+
unless json['errors'].nil?
|
57
|
+
property_errors = format_property_errors(json['errors'])
|
58
|
+
|
59
|
+
return "#{code_message}: #{property_errors.compact.join(', ')}" if property_errors.count.positive?
|
60
|
+
end
|
61
|
+
|
62
|
+
code_message
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# Format property errors.
|
67
|
+
#
|
68
|
+
# @param [Array<Hash>] errors
|
69
|
+
#
|
70
|
+
# @return [Array<String>]
|
71
|
+
#
|
72
|
+
def format_property_errors(errors)
|
73
|
+
errors
|
74
|
+
.map do |e|
|
75
|
+
"#{e['property']} \"#{e['message']}\"" if e['property'] && e['message']
|
76
|
+
end
|
77
|
+
.compact
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -33,16 +33,22 @@ module Yoti
|
|
33
33
|
#
|
34
34
|
# @param [String] manual_check
|
35
35
|
# Describes the manual fallback behaviour applied to each Task
|
36
|
+
# @param [String, nil] chip_data
|
37
|
+
# Describes the chip data requirement for each Task
|
36
38
|
#
|
37
|
-
def initialize(manual_check)
|
39
|
+
def initialize(manual_check, chip_data)
|
38
40
|
Validation.assert_is_a(String, manual_check, 'manual_check')
|
39
41
|
@manual_check = manual_check
|
42
|
+
|
43
|
+
Validation.assert_is_a(String, chip_data, 'chip_data', true)
|
44
|
+
@chip_data = chip_data
|
40
45
|
end
|
41
46
|
|
42
47
|
def as_json(*_args)
|
43
48
|
{
|
44
|
-
manual_check: @manual_check
|
45
|
-
|
49
|
+
manual_check: @manual_check,
|
50
|
+
chip_data: @chip_data
|
51
|
+
}.compact
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
@@ -80,11 +86,27 @@ module Yoti
|
|
80
86
|
self
|
81
87
|
end
|
82
88
|
|
89
|
+
#
|
90
|
+
# @return [self]
|
91
|
+
#
|
92
|
+
def with_chip_data_desired
|
93
|
+
@chip_data = Constants::DESIRED
|
94
|
+
self
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# @return [self]
|
99
|
+
#
|
100
|
+
def with_chip_data_ignore
|
101
|
+
@chip_data = Constants::IGNORE
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
83
105
|
#
|
84
106
|
# @return [RequestedTextExtractionTask]
|
85
107
|
#
|
86
108
|
def build
|
87
|
-
config = RequestedTextExtractionTaskConfig.new(@manual_check)
|
109
|
+
config = RequestedTextExtractionTaskConfig.new(@manual_check, @chip_data)
|
88
110
|
RequestedTextExtractionTask.new(config)
|
89
111
|
end
|
90
112
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yoti
|
4
|
+
module DocScan
|
5
|
+
module Session
|
6
|
+
module Retrieve
|
7
|
+
class DocumentIdPhotoResponse
|
8
|
+
# @return [MediaResponse]
|
9
|
+
attr_reader :media
|
10
|
+
|
11
|
+
#
|
12
|
+
# @param [Hash] document_id_photo
|
13
|
+
#
|
14
|
+
def initialize(document_id_photo)
|
15
|
+
@media = MediaResponse.new(document_id_photo['media']) unless document_id_photo['media'].nil?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -17,6 +17,9 @@ module Yoti
|
|
17
17
|
# @return [DocumentFieldsResponse]
|
18
18
|
attr_reader :document_fields
|
19
19
|
|
20
|
+
# @return [DocumentIdPhotoResponse]
|
21
|
+
attr_reader :document_id_photo
|
22
|
+
|
20
23
|
#
|
21
24
|
# @param [Hash] resource
|
22
25
|
#
|
@@ -37,6 +40,8 @@ module Yoti
|
|
37
40
|
end
|
38
41
|
|
39
42
|
@document_fields = DocumentFieldsResponse.new(resource['document_fields']) unless resource['document_fields'].nil?
|
43
|
+
|
44
|
+
@document_id_photo = DocumentIdPhotoResponse.new(resource['document_id_photo']) unless resource['document_id_photo'].nil?
|
40
45
|
end
|
41
46
|
|
42
47
|
#
|
@@ -93,36 +93,54 @@ module Yoti
|
|
93
93
|
|
94
94
|
#
|
95
95
|
# @param [String] name
|
96
|
-
# @param [
|
96
|
+
# @param [Array<SourceConstraint>] constraints
|
97
|
+
# @param [Bool] accept_self_asserted
|
97
98
|
#
|
98
|
-
def with_wanted_attribute_by_name(name, constraints: nil)
|
99
|
+
def with_wanted_attribute_by_name(name, constraints: nil, accept_self_asserted: nil)
|
99
100
|
attribute_builder = WantedAttribute.builder.with_name(name)
|
100
101
|
constraints&.each do |constraint|
|
101
102
|
attribute_builder.with_constraint constraint
|
102
103
|
end
|
104
|
+
attribute_builder.with_accept_self_asserted(accept_self_asserted) unless accept_self_asserted.nil?
|
103
105
|
attribute = attribute_builder.build
|
104
106
|
with_wanted_attribute attribute
|
105
107
|
end
|
106
108
|
|
109
|
+
#
|
110
|
+
# @option options [Array<SourceConstraint>] :constraints
|
111
|
+
# @option options [Bool] :accept_self_asserted
|
112
|
+
#
|
107
113
|
def with_family_name(options = {})
|
108
114
|
with_wanted_attribute_by_name Attribute::FAMILY_NAME, **options
|
109
115
|
end
|
110
116
|
|
117
|
+
#
|
118
|
+
# @option options [Array<SourceConstraint>] :constraints
|
119
|
+
# @option options [Bool] :accept_self_asserted
|
120
|
+
#
|
111
121
|
def with_given_names(options = {})
|
112
122
|
with_wanted_attribute_by_name Attribute::GIVEN_NAMES, **options
|
113
123
|
end
|
114
124
|
|
125
|
+
#
|
126
|
+
# @option options [Array<SourceConstraint>] :constraints
|
127
|
+
# @option options [Bool] :accept_self_asserted
|
128
|
+
#
|
115
129
|
def with_full_name(options = {})
|
116
130
|
with_wanted_attribute_by_name Attribute::FULL_NAME, **options
|
117
131
|
end
|
118
132
|
|
133
|
+
#
|
134
|
+
# @option options [Array<SourceConstraint>] :constraints
|
135
|
+
# @option options [Bool] :accept_self_asserted
|
136
|
+
#
|
119
137
|
def with_date_of_birth(options = {})
|
120
138
|
with_wanted_attribute_by_name Attribute::DATE_OF_BIRTH, **options
|
121
139
|
end
|
122
140
|
|
123
141
|
#
|
124
142
|
# @param [String] derivation
|
125
|
-
# @param [
|
143
|
+
# @param [Array<SourceConstraint>] constraints
|
126
144
|
#
|
127
145
|
def with_age_derived_attribute(derivation, constraints: nil)
|
128
146
|
attribute_builder = WantedAttribute.builder
|
@@ -136,6 +154,8 @@ module Yoti
|
|
136
154
|
|
137
155
|
#
|
138
156
|
# @param [Integer] age
|
157
|
+
# @option options [Array<SourceConstraint>] :constraints
|
158
|
+
# @option options [Bool] :accept_self_asserted
|
139
159
|
#
|
140
160
|
def with_age_over(age, options = {})
|
141
161
|
with_age_derived_attribute(Attribute::AGE_OVER + age.to_s, **options)
|
@@ -143,41 +163,83 @@ module Yoti
|
|
143
163
|
|
144
164
|
#
|
145
165
|
# @param [Integer] age
|
166
|
+
# @option options [Array<SourceConstraint>] :constraints
|
167
|
+
# @option options [Bool] :accept_self_asserted
|
146
168
|
#
|
147
169
|
def with_age_under(age, options = {})
|
148
170
|
with_age_derived_attribute(Attribute::AGE_UNDER + age.to_s, **options)
|
149
171
|
end
|
150
172
|
|
173
|
+
#
|
174
|
+
# @option options [Array<SourceConstraint>] :constraints
|
175
|
+
# @option options [Bool] :accept_self_asserted
|
176
|
+
#
|
151
177
|
def with_gender(options = {})
|
152
178
|
with_wanted_attribute_by_name Attribute::GENDER, **options
|
153
179
|
end
|
154
180
|
|
181
|
+
#
|
182
|
+
# @option options [Array<SourceConstraint>] :constraints
|
183
|
+
# @option options [Bool] :accept_self_asserted
|
184
|
+
#
|
155
185
|
def with_postal_address(options = {})
|
156
186
|
with_wanted_attribute_by_name(Attribute::POSTAL_ADDRESS, **options)
|
157
187
|
end
|
158
188
|
|
189
|
+
#
|
190
|
+
# @option options [Array<SourceConstraint>] :constraints
|
191
|
+
# @option options [Bool] :accept_self_asserted
|
192
|
+
#
|
159
193
|
def with_structured_postal_address(options = {})
|
160
194
|
with_wanted_attribute_by_name(Attribute::STRUCTURED_POSTAL_ADDRESS, **options)
|
161
195
|
end
|
162
196
|
|
197
|
+
#
|
198
|
+
# @option options [Array<SourceConstraint>] :constraints
|
199
|
+
# @option options [Bool] :accept_self_asserted
|
200
|
+
#
|
163
201
|
def with_nationality(options = {})
|
164
202
|
with_wanted_attribute_by_name(Attribute::NATIONALITY, **options)
|
165
203
|
end
|
166
204
|
|
205
|
+
#
|
206
|
+
# @option options [Array<SourceConstraint>] :constraints
|
207
|
+
# @option options [Bool] :accept_self_asserted
|
208
|
+
#
|
167
209
|
def with_phone_number(options = {})
|
168
210
|
with_wanted_attribute_by_name(Attribute::PHONE_NUMBER, **options)
|
169
211
|
end
|
170
212
|
|
213
|
+
#
|
214
|
+
# @option options [Array<SourceConstraint>] :constraints
|
215
|
+
# @option options [Bool] :accept_self_asserted
|
216
|
+
#
|
171
217
|
def with_selfie(options = {})
|
172
218
|
with_wanted_attribute_by_name(Attribute::SELFIE, **options)
|
173
219
|
end
|
174
220
|
|
221
|
+
#
|
222
|
+
# @option options [Array<SourceConstraint>] :constraints
|
223
|
+
# @option options [Bool] :accept_self_asserted
|
224
|
+
#
|
175
225
|
def with_email(options = {})
|
176
226
|
with_wanted_attribute_by_name(Attribute::EMAIL_ADDRESS, **options)
|
177
227
|
end
|
178
228
|
|
179
|
-
|
180
|
-
|
229
|
+
#
|
230
|
+
# @option options [Array<SourceConstraint>] :constraints
|
231
|
+
# @option options [Bool] :accept_self_asserted
|
232
|
+
#
|
233
|
+
def with_document_details(options = {})
|
234
|
+
with_wanted_attribute_by_name(Attribute::DOCUMENT_DETAILS, **options)
|
235
|
+
end
|
236
|
+
|
237
|
+
#
|
238
|
+
# @option options [Array<SourceConstraint>] :constraints
|
239
|
+
# @option options [Bool] :accept_self_asserted
|
240
|
+
#
|
241
|
+
def with_document_images(options = {})
|
242
|
+
with_wanted_attribute_by_name(Attribute::DOCUMENT_IMAGES, **options)
|
181
243
|
end
|
182
244
|
end
|
183
245
|
end
|
data/lib/yoti/errors.rb
CHANGED
@@ -7,16 +7,14 @@ module Yoti
|
|
7
7
|
attr_reader :response
|
8
8
|
|
9
9
|
def initialize(message, response = nil)
|
10
|
-
super(
|
10
|
+
super(message)
|
11
11
|
@response = response
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
def message
|
15
|
+
return super if @response.nil? || @response.body.empty?
|
15
16
|
|
16
|
-
|
17
|
-
return message if response.nil? || response.body.empty?
|
18
|
-
|
19
|
-
"#{message}: #{response.body}"
|
17
|
+
"#{super}: #{@response.body}"
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
data/lib/yoti/version.rb
CHANGED
data/yoti.gemspec
CHANGED
@@ -18,7 +18,19 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.homepage = 'https://github.com/getyoti/yoti-ruby-sdk'
|
19
19
|
spec.license = 'MIT'
|
20
20
|
|
21
|
-
|
21
|
+
exclude_patterns = [
|
22
|
+
'^(test|spec|features|examples|docs|.github)/',
|
23
|
+
'^.gitignore$',
|
24
|
+
'^sonar-project.properties$',
|
25
|
+
'^.dependabot/config.yml$',
|
26
|
+
'^.travis.yml$',
|
27
|
+
'^CONTRIBUTING.md$',
|
28
|
+
'^Guardfile$',
|
29
|
+
'^Rakefile$',
|
30
|
+
'^yardstick.yml$',
|
31
|
+
'^rubocop.yml$'
|
32
|
+
]
|
33
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(/#{exclude_patterns.join('|')}/) }
|
22
34
|
spec.require_paths = ['lib']
|
23
35
|
|
24
36
|
spec.required_ruby_version = '>= 2.4'
|
@@ -28,7 +40,7 @@ Gem::Specification.new do |spec|
|
|
28
40
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
29
41
|
spec.add_development_dependency 'dotenv', '~> 2.2'
|
30
42
|
spec.add_development_dependency 'generator_spec', '~> 0.9'
|
31
|
-
spec.add_development_dependency 'rake', '~>
|
43
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
32
44
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
33
45
|
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
34
46
|
spec.add_development_dependency 'webmock', '~> 3.3'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yoti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '13.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,14 +160,9 @@ executables: []
|
|
160
160
|
extensions: []
|
161
161
|
extra_rdoc_files: []
|
162
162
|
files:
|
163
|
-
- ".github/ISSUE_TEMPLATE.md"
|
164
|
-
- ".gitignore"
|
165
|
-
- CONTRIBUTING.md
|
166
163
|
- Gemfile
|
167
|
-
- Guardfile
|
168
164
|
- LICENSE.md
|
169
165
|
- README.md
|
170
|
-
- Rakefile
|
171
166
|
- lib/generators/yoti/install/install_generator.rb
|
172
167
|
- lib/generators/yoti/install/templates/yoti.rb
|
173
168
|
- lib/yoti.rb
|
@@ -189,6 +184,7 @@ files:
|
|
189
184
|
- lib/yoti/data_type/signed_time_stamp.rb
|
190
185
|
- lib/yoti/doc_scan/client.rb
|
191
186
|
- lib/yoti/doc_scan/constants.rb
|
187
|
+
- lib/yoti/doc_scan/errors.rb
|
192
188
|
- lib/yoti/doc_scan/session/create/create_session_result.rb
|
193
189
|
- lib/yoti/doc_scan/session/create/document_filter.rb
|
194
190
|
- lib/yoti/doc_scan/session/create/document_restrictions_filter.rb
|
@@ -209,6 +205,7 @@ files:
|
|
209
205
|
- lib/yoti/doc_scan/session/retrieve/check_response.rb
|
210
206
|
- lib/yoti/doc_scan/session/retrieve/details_response.rb
|
211
207
|
- lib/yoti/doc_scan/session/retrieve/document_fields_response.rb
|
208
|
+
- lib/yoti/doc_scan/session/retrieve/document_id_photo_response.rb
|
212
209
|
- lib/yoti/doc_scan/session/retrieve/face_map_response.rb
|
213
210
|
- lib/yoti/doc_scan/session/retrieve/face_match_check_response.rb
|
214
211
|
- lib/yoti/doc_scan/session/retrieve/frame_response.rb
|
@@ -266,8 +263,6 @@ files:
|
|
266
263
|
- lib/yoti/util/log.rb
|
267
264
|
- lib/yoti/util/validation.rb
|
268
265
|
- lib/yoti/version.rb
|
269
|
-
- rubocop.yml
|
270
|
-
- yardstick.yml
|
271
266
|
- yoti.gemspec
|
272
267
|
homepage: https://github.com/getyoti/yoti-ruby-sdk
|
273
268
|
licenses:
|
data/.github/ISSUE_TEMPLATE.md
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
---
|
2
|
-
name: Custom issue template
|
3
|
-
about: " There's a better way to get help!"
|
4
|
-
title: ''
|
5
|
-
labels: ''
|
6
|
-
assignees: ''
|
7
|
-
|
8
|
-
---
|
9
|
-
|
10
|
-
#
|
11
|
-
# Wait ✋
|
12
|
-
#
|
13
|
-
# There's a better way to get help!
|
14
|
-
#
|
15
|
-
# Send your questions or issues to sdksupport@yoti.com
|
16
|
-
#
|
17
|
-
#
|
data/.gitignore
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
/.config
|
4
|
-
/coverage/
|
5
|
-
/InstalledFiles
|
6
|
-
/pkg/
|
7
|
-
/spec/reports/
|
8
|
-
/spec/examples.txt
|
9
|
-
/test/tmp/
|
10
|
-
/test/version_tmp/
|
11
|
-
/tmp/
|
12
|
-
|
13
|
-
# Used by dotenv library to load environment variables.
|
14
|
-
.env
|
15
|
-
|
16
|
-
## Documentation cache and generated files:
|
17
|
-
/.yardoc/
|
18
|
-
/_yardoc/
|
19
|
-
/doc/
|
20
|
-
/rdoc/
|
21
|
-
/yardoc/
|
22
|
-
|
23
|
-
## Environment normalization:
|
24
|
-
/.bundle/
|
25
|
-
/vendor/bundle
|
26
|
-
/lib/bundler/man/
|
27
|
-
|
28
|
-
# for a library or gem, you might want to ignore these files since the code is
|
29
|
-
# intended to run in multiple environments; otherwise, check them in:
|
30
|
-
Gemfile.lock
|
31
|
-
.ruby-version
|
32
|
-
.ruby-gemset
|
33
|
-
|
34
|
-
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
35
|
-
.rvmrc
|
36
|
-
|
37
|
-
# Ignore Yardstick measurement files
|
38
|
-
/measurement
|
39
|
-
examples/rails/public/*.jpeg
|
40
|
-
examples/sinatra/public/*.jpeg
|
data/CONTRIBUTING.md
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
# Contributing
|
2
|
-
|
3
|
-
After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rake spec` to run the tests. To install this gem onto your local machine, run `bundle exec rake install`.
|
4
|
-
|
5
|
-
You can use [Guard][] to automatically run the tests every time a file in the `lib` or `spec` folder changes.
|
6
|
-
|
7
|
-
Run Guard through Bundler with:
|
8
|
-
|
9
|
-
```shell
|
10
|
-
bundle exec guard
|
11
|
-
```
|
12
|
-
|
13
|
-
[Guard]: https://github.com/guard/guard
|
14
|
-
|
15
|
-
## Dependencies
|
16
|
-
|
17
|
-
Although this gem supports Ruby 2.0.0, in order to use the latest development dependencies you have to use at least Ruby 2.2.2.
|
18
|
-
|
19
|
-
## Requirements
|
20
|
-
|
21
|
-
### Code coverage
|
22
|
-
|
23
|
-
The 100% code coverage requirement must be met before submitting new code.
|
24
|
-
This can be checked by opening the generated [SimpleCov][] files:
|
25
|
-
|
26
|
-
```shell
|
27
|
-
open coverage/index.html
|
28
|
-
```
|
29
|
-
|
30
|
-
### Style guide
|
31
|
-
|
32
|
-
The Ruby style guide is configured in the [rubocop.yml](rubocop.yml) file and can be checked by running:
|
33
|
-
|
34
|
-
```shell
|
35
|
-
bundle exec rake rubocop
|
36
|
-
```
|
37
|
-
|
38
|
-
### Documentation
|
39
|
-
|
40
|
-
The documentation uses the [Yard][] format. Please ensure all new classes and methods are fully documented.
|
41
|
-
|
42
|
-
There are a few Rake tasks to handle documentation:
|
43
|
-
|
44
|
-
```shell
|
45
|
-
bundle exec rake measurement
|
46
|
-
```
|
47
|
-
|
48
|
-
Verifies the documentation with [Yardstick][] and generates the `measurement/report.txt` file, containing tips on how to improve the documentation coverage.
|
49
|
-
|
50
|
-
```shell
|
51
|
-
bundle exec rake yard
|
52
|
-
```
|
53
|
-
|
54
|
-
Generates [YARD][] documentation in the `./yardoc` folder.
|
55
|
-
|
56
|
-
### Git
|
57
|
-
|
58
|
-
Commit messages should ideally start with one of the following verbs:
|
59
|
-
|
60
|
-
* Add
|
61
|
-
* Merge
|
62
|
-
* Fix
|
63
|
-
* Remove
|
64
|
-
* Improve
|
65
|
-
* Use
|
66
|
-
|
67
|
-
[SimpleCov]: https://github.com/colszowka/simplecov
|
68
|
-
[Yard]: http://yardoc.org/
|
69
|
-
[Yardstick]: https://github.com/dkubb/yardstick
|
70
|
-
|
71
|
-
## Publishing a new release
|
72
|
-
|
73
|
-
* Create a new release on [GitHub](https://github.com/getyoti/yoti-ruby-sdk/releases)
|
74
|
-
* Build the gem and push it to [RubyGems](https://rubygems.org/gems/yoti)
|
75
|
-
|
76
|
-
```shell
|
77
|
-
rake build
|
78
|
-
gem push pkg/yoti-[version].gem
|
79
|
-
```
|
80
|
-
|
81
|
-
## Submitting a pull request
|
82
|
-
|
83
|
-
1. [Fork the repository.][fork]
|
84
|
-
2. [Create a topic branch.][branch]
|
85
|
-
3. Add specs for your unimplemented feature or bug fix.
|
86
|
-
4. Run `bundle exec rake spec`. If your specs pass, return to step 3.
|
87
|
-
5. Implement your feature or bug fix.
|
88
|
-
6. Run `bundle exec rake`. If your specs fail, return to step 5.
|
89
|
-
7. Run `open coverage/index.html`. If your changes are not completely covered
|
90
|
-
by your tests, return to step 3.
|
91
|
-
8. If Rubocop warns you about styling errors, correct them based on the guidelines and run `bundle exec rake rubocop` to make sure all offences are gone.
|
92
|
-
9. Add documentation for your feature or bug fix.
|
93
|
-
10. Commit and push your changes.
|
94
|
-
11. [Submit a pull request.][pr]
|
95
|
-
|
96
|
-
[fork]: http://help.github.com/fork-a-repo/
|
97
|
-
[branch]: http://learn.github.com/p/branching.html
|
98
|
-
[pr]: http://help.github.com/send-pull-requests/
|
data/Guardfile
DELETED
data/Rakefile
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'bundler/gem_tasks'
|
2
|
-
require 'rspec/core/rake_task'
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
################################
|
6
|
-
# Tests #
|
7
|
-
################################
|
8
|
-
|
9
|
-
RSpec::Core::RakeTask.new(:test_yoti) do |t|
|
10
|
-
t.pattern = ['spec/yoti']
|
11
|
-
end
|
12
|
-
|
13
|
-
RSpec::Core::RakeTask.new(:test_generators) do |t|
|
14
|
-
t.pattern = ['spec/generators']
|
15
|
-
end
|
16
|
-
|
17
|
-
RSpec::Core::RakeTask.new(:spec)
|
18
|
-
|
19
|
-
################################
|
20
|
-
# Rubocop #
|
21
|
-
################################
|
22
|
-
|
23
|
-
require 'rubocop/rake_task'
|
24
|
-
RuboCop::RakeTask.new(:rubocop) do |t|
|
25
|
-
t.options = ['--config', 'rubocop.yml']
|
26
|
-
end
|
27
|
-
|
28
|
-
################################
|
29
|
-
# Documentation #
|
30
|
-
################################
|
31
|
-
|
32
|
-
require 'yard'
|
33
|
-
YARD::Rake::YardocTask.new do |t|
|
34
|
-
t.options = ['--output-dir', './yardoc']
|
35
|
-
t.stats_options = ['--list-undoc']
|
36
|
-
end
|
37
|
-
|
38
|
-
yardstick_options = YAML.load_file('yardstick.yml')
|
39
|
-
|
40
|
-
require 'yardstick/rake/measurement'
|
41
|
-
Yardstick::Rake::Measurement.new(:measurement, yardstick_options) do |measurement|
|
42
|
-
measurement.output = 'measurement/report.txt'
|
43
|
-
end
|
44
|
-
|
45
|
-
################################
|
46
|
-
# Defaults #
|
47
|
-
################################
|
48
|
-
|
49
|
-
task default: %i[spec rubocop]
|
50
|
-
task test: %i[test_yoti test_generators rubocop]
|
data/rubocop.yml
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
DisplayCopNames: true
|
3
|
-
DisplayStyleGuide: true
|
4
|
-
TargetRubyVersion: 2.4
|
5
|
-
Exclude:
|
6
|
-
- 'examples/rails/config/**/*'
|
7
|
-
- 'examples/doc_scan/config/**/*'
|
8
|
-
- 'examples/doc_scan/bin/**/*'
|
9
|
-
- 'lib/yoti/protobuf/attrpubapi/*'
|
10
|
-
- 'lib/yoti/protobuf/compubapi/*'
|
11
|
-
- 'lib/yoti/protobuf/sharepubapi/*'
|
12
|
-
|
13
|
-
Metrics/AbcSize:
|
14
|
-
Enabled: false
|
15
|
-
Max: 23
|
16
|
-
Exclude:
|
17
|
-
- examples/rails/app/controllers/yoti_controller.rb
|
18
|
-
|
19
|
-
Metrics/BlockLength:
|
20
|
-
Exclude:
|
21
|
-
- spec/**/**/*.rb
|
22
|
-
- yoti.gemspec
|
23
|
-
|
24
|
-
Metrics/CyclomaticComplexity:
|
25
|
-
Max: 9
|
26
|
-
|
27
|
-
Metrics/ClassLength:
|
28
|
-
Enabled: false
|
29
|
-
Max: 115
|
30
|
-
|
31
|
-
Layout/LineLength:
|
32
|
-
Enabled: false
|
33
|
-
|
34
|
-
Metrics/MethodLength:
|
35
|
-
Enabled: false
|
36
|
-
CountComments: false
|
37
|
-
Max: 19
|
38
|
-
Exclude:
|
39
|
-
- spec/yoti/data_type/multi_value_spec.rb
|
40
|
-
|
41
|
-
Style/Documentation:
|
42
|
-
Enabled: false
|
43
|
-
|
44
|
-
Style/FrozenStringLiteralComment:
|
45
|
-
Enabled: false
|
46
|
-
|
47
|
-
Style/NumericLiterals:
|
48
|
-
Enabled: false
|
49
|
-
|
50
|
-
Style/MutableConstant:
|
51
|
-
Enabled: false
|
52
|
-
|
53
|
-
Naming/MethodName:
|
54
|
-
Exclude:
|
55
|
-
- lib/yoti/util/anchor_processor.rb
|
56
|
-
|
57
|
-
Naming/PredicateName:
|
58
|
-
Exclude:
|
59
|
-
- lib/yoti/util/age_processor.rb
|
60
|
-
|
61
|
-
Metrics/ParameterLists:
|
62
|
-
Exclude:
|
63
|
-
- lib/yoti/doc_scan/session/create/sdk_config.rb
|
64
|
-
- lib/yoti/doc_scan/session/create/session_specification.rb
|
65
|
-
- spec/yoti/doc_scan/client_spec.rb
|