onfido 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +16 -0
- data/CHANGELOG.md +3 -0
- data/README.md +28 -3
- data/lib/onfido.rb +2 -3
- data/lib/onfido/configuration.rb +3 -1
- data/lib/onfido/errors/connection_error.rb +4 -0
- data/lib/onfido/{request_error.rb → errors/request_error.rb} +8 -0
- data/lib/onfido/resource.rb +97 -11
- data/lib/onfido/version.rb +1 -1
- data/onfido.gemspec +1 -0
- data/spec/integrations/exceptions_spec.rb +116 -0
- data/spec/onfido/resource_spec.rb +11 -4
- data/spec/support/fake_onfido_api.rb +10 -0
- data/spec/support/fixtures/unexpected_error_format.json +3 -0
- metadata +34 -20
- data/.ruby-version +0 -1
- data/lib/onfido/requestable.rb +0 -12
- data/lib/onfido/response_handler.rb +0 -38
- data/spec/integrations/4xx_response_spec.rb +0 -35
- data/spec/onfido/response_handler_spec.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c107bba12384d55217719e5283953f0a0111f927
|
4
|
+
data.tar.gz: 4d77e8f946b6d035e3b126b4d9b01b3807a4c295
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cef79ba60503372169905e3abf66b2ac4d55b46141a9758abce82cf8a91ed72aa02e6635d7675d7a37280818605b5843f62d47d99a5c72164a850b15282c9559
|
7
|
+
data.tar.gz: adc95bedaa0ef4e1d75e3ee87a21a765383d9e39b4f19b0f7779741c1e65c7b514934d243c7644567933bc25139b61f5eee596a29456bf8d58fcd2fef732fec3
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -3,7 +3,10 @@
|
|
3
3
|
A wrapper for Onfido's [API](https://onfido.com/documentation#introduction). You should always refer to the documentation for valid API calls.
|
4
4
|
|
5
5
|
[![Build Status](https://snap-ci.com/hvssle/onfido/branch/master/build_image)](https://snap-ci.com/hvssle/onfido/branch/master)
|
6
|
-
[![Gem Version](https://badge.fury.io/rb/onfido.svg)](http://badge.fury.io/rb/onfido)
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/onfido.svg)](http://badge.fury.io/rb/onfido)
|
7
|
+
[![Build Status](https://travis-ci.org/hvssle/onfido.svg?branch=master)](https://travis-ci.org/hvssle/onfido)
|
8
|
+
[!['gitter room'][2]][1]
|
9
|
+
|
7
10
|
|
8
11
|
[1]: https://gitter.im/hvssle/onfido
|
9
12
|
[2]: https://badges.gitter.im/gitterHQ/developers.png
|
@@ -27,13 +30,15 @@ Or install it yourself as:
|
|
27
30
|
|
28
31
|
## Usage
|
29
32
|
|
30
|
-
There are
|
33
|
+
There are 5 configuration options for Onfido, including your `api_key`, throwing exceptions for failed responses and logging the requests. By default, `throws_exceptions` is set to `true`. If set to `false` and Onfido responds with a valid JSON body the response body will be returned instead.
|
31
34
|
|
32
35
|
```ruby
|
33
36
|
Onfido.configure do |config|
|
34
37
|
config.api_key = 'MY_API_KEY'
|
35
38
|
config.logger = Logger.new(STDOUT)
|
36
39
|
config.throws_exceptions = false
|
40
|
+
config.open_timeout = 30
|
41
|
+
config.read_timeout = 80
|
37
42
|
end
|
38
43
|
```
|
39
44
|
|
@@ -122,13 +127,31 @@ To search for addresses by postcode
|
|
122
127
|
api.address.all('SE1 4NG')
|
123
128
|
```
|
124
129
|
|
130
|
+
### Pagination
|
131
|
+
|
132
|
+
Currently, you can paginate over the *applicant* and *check* resources. However, since you can only create 1 check per applicant therefore paginating on the check resource might prove impractical.
|
133
|
+
|
134
|
+
By default, both endpoints are fetching records the first 20 records. That is the maximum amount of records you can request per page.
|
135
|
+
|
136
|
+
To paginate over *applicants*:
|
137
|
+
```ruby
|
138
|
+
api = Onfido::API.new
|
139
|
+
api.applicant.all(page: 2, per_page: 10)
|
140
|
+
```
|
141
|
+
|
142
|
+
To paginate over *checks*:
|
143
|
+
```
|
144
|
+
api = Onfido::API.new
|
145
|
+
api.check.all('applicant_id', page: 2, per_page: 10)
|
146
|
+
```
|
147
|
+
|
125
148
|
## Error Handling
|
126
149
|
|
127
150
|
By default, Onfido will attempt to raise errors returned by the API automatically.
|
128
151
|
|
129
152
|
If you set the `throws_exceptions` to false, it will simply return the response body. This allows you to handle errors manually.
|
130
153
|
|
131
|
-
If you rescue Onfido::RequestError
|
154
|
+
If you rescue `Onfido::RequestError`, you are provided with the error message itself as well as the type of error, response code and fields that have errored. Here's how you might do that:
|
132
155
|
|
133
156
|
```ruby
|
134
157
|
def create_applicant
|
@@ -140,6 +163,8 @@ If you rescue Onfido::RequestError, you are provided with the error message itse
|
|
140
163
|
end
|
141
164
|
```
|
142
165
|
|
166
|
+
You can also rescue `Onfido::ConnectionError`, which is raised whenever something goes wrong with the connection to Onfido - you may wish to automatically retry these requests.
|
167
|
+
|
143
168
|
### Roadmap
|
144
169
|
|
145
170
|
- Improve test coverage with more scenarios
|
data/lib/onfido.rb
CHANGED
@@ -5,10 +5,9 @@ require 'open-uri'
|
|
5
5
|
|
6
6
|
require 'onfido/version'
|
7
7
|
require 'onfido/configuration'
|
8
|
-
require 'onfido/request_error'
|
9
|
-
require 'onfido/
|
8
|
+
require 'onfido/errors/request_error'
|
9
|
+
require 'onfido/errors/connection_error'
|
10
10
|
require 'onfido/null_logger'
|
11
|
-
require 'onfido/requestable'
|
12
11
|
require 'onfido/resource'
|
13
12
|
require 'onfido/address'
|
14
13
|
require 'onfido/applicant'
|
data/lib/onfido/configuration.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Onfido
|
2
2
|
module Configuration
|
3
|
-
attr_accessor :api_key, :throws_exceptions
|
3
|
+
attr_accessor :api_key, :throws_exceptions, :open_timeout, :read_timeout
|
4
4
|
|
5
5
|
def self.extended(base)
|
6
6
|
base.reset
|
@@ -13,6 +13,8 @@ module Onfido
|
|
13
13
|
def reset
|
14
14
|
self.api_key = nil
|
15
15
|
self.throws_exceptions = true
|
16
|
+
self.open_timeout = 30
|
17
|
+
self.read_timeout = 80
|
16
18
|
RestClient.log = nil
|
17
19
|
end
|
18
20
|
|
@@ -19,5 +19,13 @@ specified in the Onfido documentation e.g.
|
|
19
19
|
module Onfido
|
20
20
|
class RequestError < StandardError
|
21
21
|
attr_accessor :type, :fields, :response_code
|
22
|
+
|
23
|
+
def initialize(message=nil, type: nil, fields: nil, response_code: nil)
|
24
|
+
@type = type
|
25
|
+
@fields = fields
|
26
|
+
@response_code = response_code
|
27
|
+
|
28
|
+
super(message)
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
data/lib/onfido/resource.rb
CHANGED
@@ -2,26 +2,53 @@ module Onfido
|
|
2
2
|
class Resource
|
3
3
|
VALID_HTTP_METHODS = %i(get post)
|
4
4
|
|
5
|
-
include Requestable
|
6
|
-
|
7
5
|
def url_for(path)
|
8
6
|
Onfido.endpoint + path
|
9
7
|
end
|
10
8
|
|
11
|
-
|
12
|
-
|
9
|
+
VALID_HTTP_METHODS.each do |method|
|
10
|
+
define_method method do |*args|
|
13
11
|
make_request(
|
12
|
+
method: method.to_sym,
|
14
13
|
url: args.first.fetch(:url),
|
15
|
-
payload: build_query(args.first.fetch(:payload))
|
16
|
-
method: method.to_sym
|
14
|
+
payload: build_query(args.first.fetch(:payload))
|
17
15
|
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def make_request(options)
|
22
|
+
url = options.fetch(:url)
|
23
|
+
payload = options.fetch(:payload)
|
24
|
+
method = options.fetch(:method)
|
25
|
+
|
26
|
+
request_options = {
|
27
|
+
url: url,
|
28
|
+
payload: payload,
|
29
|
+
method: method,
|
30
|
+
headers: headers,
|
31
|
+
open_timeout: Onfido.open_timeout,
|
32
|
+
timeout: Onfido.read_timeout
|
33
|
+
}
|
34
|
+
|
35
|
+
response = RestClient::Request.execute(request_options)
|
36
|
+
|
37
|
+
parse(response)
|
38
|
+
rescue RestClient::ExceptionWithResponse => e
|
39
|
+
if e.response
|
40
|
+
handle_api_error(e.response)
|
18
41
|
else
|
19
|
-
|
42
|
+
handle_restclient_error(e, url)
|
20
43
|
end
|
44
|
+
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
45
|
+
handle_restclient_error(e, url)
|
21
46
|
end
|
22
47
|
|
23
|
-
def
|
24
|
-
|
48
|
+
def parse(response)
|
49
|
+
JSON.parse(response.body)
|
50
|
+
rescue JSON::ParserError
|
51
|
+
general_api_error(response.code, response.body)
|
25
52
|
end
|
26
53
|
|
27
54
|
def headers
|
@@ -31,8 +58,6 @@ module Onfido
|
|
31
58
|
}
|
32
59
|
end
|
33
60
|
|
34
|
-
private
|
35
|
-
|
36
61
|
# There seems to be a serialization issue with the HTTP client
|
37
62
|
# which does not serialize the payload properly.
|
38
63
|
# Have a look here https://gist.github.com/PericlesTheo/cb35139c57107ab3c84a
|
@@ -44,5 +69,66 @@ module Onfido
|
|
44
69
|
Rack::Utils.build_nested_query(payload)
|
45
70
|
end
|
46
71
|
end
|
72
|
+
|
73
|
+
def handle_api_error(response)
|
74
|
+
parsed_response = parse(response)
|
75
|
+
|
76
|
+
unless parsed_response["error"]
|
77
|
+
general_api_error(response.code, response.body)
|
78
|
+
end
|
79
|
+
|
80
|
+
if Onfido.throws_exceptions
|
81
|
+
raise RequestError.new(
|
82
|
+
parsed_response["error"]['message'],
|
83
|
+
type: parsed_response["error"]["type"],
|
84
|
+
fields: parsed_response["error"]["fields"],
|
85
|
+
response_code: response.code)
|
86
|
+
else
|
87
|
+
parsed_response
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def general_api_error(response_code, response_body)
|
92
|
+
raise RequestError.new(
|
93
|
+
"Invalid response object from API: #{response_body} " \
|
94
|
+
"(HTTP response code was #{response_code})",
|
95
|
+
response_code: response_code
|
96
|
+
)
|
97
|
+
end
|
98
|
+
|
99
|
+
def handle_restclient_error(e, url)
|
100
|
+
connection_message =
|
101
|
+
"Please check your internet connection and try again. " \
|
102
|
+
"If this problem persists, you should let us know at info@onfido.com."
|
103
|
+
|
104
|
+
message =
|
105
|
+
case e
|
106
|
+
when RestClient::RequestTimeout
|
107
|
+
"Could not connect to Onfido (#{url}). #{connection_message}"
|
108
|
+
|
109
|
+
when RestClient::ServerBrokeConnection
|
110
|
+
"The connection to the server (#{url}) broke before the " \
|
111
|
+
"request completed. #{connection_message}"
|
112
|
+
|
113
|
+
when RestClient::SSLCertificateNotVerified
|
114
|
+
"Could not verify Onfido's SSL certificate. Please make sure " \
|
115
|
+
"that your network is not intercepting certificates. " \
|
116
|
+
"(Try going to #{Onfido.endpoint} in your browser.) " \
|
117
|
+
"If this problem persists, let us know at info@onfido.com."
|
118
|
+
|
119
|
+
when SocketError
|
120
|
+
"Unexpected error when trying to connect to Onfido. " \
|
121
|
+
"You may be seeing this message because your DNS is not working. " \
|
122
|
+
"To check, try running 'host onfido.com' from the command line."
|
123
|
+
|
124
|
+
else
|
125
|
+
"Unexpected error communicating with Onfido. " \
|
126
|
+
"If this problem persists, let us know at info@onfido.com."
|
127
|
+
end
|
128
|
+
|
129
|
+
full_message = message + "\n\n(Network error: #{e.message})"
|
130
|
+
|
131
|
+
raise ConnectionError.new(full_message)
|
132
|
+
end
|
47
133
|
end
|
48
134
|
end
|
data/lib/onfido/version.rb
CHANGED
data/onfido.gemspec
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
describe Onfido::Resource do
|
2
|
+
let(:resource) { described_class.new }
|
3
|
+
let(:url) { Onfido.endpoint + path }
|
4
|
+
let(:api_key) { 'some_key' }
|
5
|
+
let(:payload) { { postcode: 'SE1 4NG' } }
|
6
|
+
|
7
|
+
|
8
|
+
before do
|
9
|
+
allow(Onfido).to receive(:api_key).and_return(api_key)
|
10
|
+
end
|
11
|
+
|
12
|
+
context '4xx response' do
|
13
|
+
let(:path) { '4xx_response' }
|
14
|
+
|
15
|
+
context "when 'throws_exceptions' is true" do
|
16
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(true) }
|
17
|
+
|
18
|
+
it 'raises a custom error' do
|
19
|
+
expect { resource.get({ url: url, payload: payload }) }.
|
20
|
+
to raise_error(Onfido::RequestError, 'Something went wrong')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when 'throws_exceptions' is false" do
|
25
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(false) }
|
26
|
+
|
27
|
+
it 'returns the body as a hash' do
|
28
|
+
response = resource.get({ url: url, payload: payload })
|
29
|
+
expect(response['error']).not_to be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'unexpected error format' do
|
35
|
+
let(:path) { 'unexpected_error_format' }
|
36
|
+
|
37
|
+
context "when 'throws_exceptions' is true" do
|
38
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(true) }
|
39
|
+
|
40
|
+
it 'raises a custom error' do
|
41
|
+
expect { resource.get({ url: url, payload: payload }) }.
|
42
|
+
to raise_error(Onfido::RequestError, /response code was 400/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when 'throws_exceptions' is false" do
|
47
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(false) }
|
48
|
+
|
49
|
+
it 'still raises a custom error' do
|
50
|
+
expect { resource.get({ url: url, payload: payload }) }.
|
51
|
+
to raise_error(Onfido::RequestError, /response code was 400/)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'unparseable JSON' do
|
57
|
+
let(:path) { 'unparseable_response' }
|
58
|
+
|
59
|
+
context "when 'throws_exceptions' is true" do
|
60
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(true) }
|
61
|
+
|
62
|
+
it 'raises a custom error' do
|
63
|
+
expect { resource.get({ url: url, payload: payload }) }.
|
64
|
+
to raise_error(Onfido::RequestError, /response code was 504/)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when 'throws_exceptions' is false" do
|
69
|
+
before { allow(Onfido).to receive(:throws_exceptions).and_return(false) }
|
70
|
+
|
71
|
+
it 'still raises a custom error' do
|
72
|
+
expect { resource.get({ url: url, payload: payload }) }.
|
73
|
+
to raise_error(Onfido::RequestError, /response code was 504/)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'timeout' do
|
79
|
+
before do
|
80
|
+
allow(RestClient::Request).
|
81
|
+
to receive(:execute).
|
82
|
+
and_raise(RestClient::RequestTimeout)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'raises a ConnectionError' do
|
86
|
+
expect { resource.get({ url: Onfido.endpoint, payload: payload }) }.
|
87
|
+
to raise_error(Onfido::ConnectionError, /Could not connect/)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'broken connection' do
|
92
|
+
before do
|
93
|
+
allow(RestClient::Request).
|
94
|
+
to receive(:execute).
|
95
|
+
and_raise(RestClient::ServerBrokeConnection)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'raises a ConnectionError' do
|
99
|
+
expect { resource.get({ url: Onfido.endpoint, payload: payload }) }.
|
100
|
+
to raise_error(Onfido::ConnectionError, /connection to the server/)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "bad SSL certificate" do
|
105
|
+
before do
|
106
|
+
allow(RestClient::Request).
|
107
|
+
to receive(:execute).
|
108
|
+
and_raise(RestClient::SSLCertificateNotVerified.new(nil))
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'raises a ConnectionError' do
|
112
|
+
expect { resource.get({ url: Onfido.endpoint, payload: payload }) }.
|
113
|
+
to raise_error(Onfido::ConnectionError, /SSL certificate/)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -25,7 +25,9 @@ describe Onfido::Resource do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
+
end
|
28
29
|
|
30
|
+
describe "valid http methods" do
|
29
31
|
%i(get post).each do |method|
|
30
32
|
context "for supported HTTP method: #{method}" do
|
31
33
|
let(:url) { endpoint + path }
|
@@ -49,13 +51,18 @@ describe Onfido::Resource do
|
|
49
51
|
url: url,
|
50
52
|
payload: Rack::Utils.build_query(payload),
|
51
53
|
method: method,
|
52
|
-
headers: resource.headers
|
53
|
-
|
54
|
-
|
54
|
+
headers: resource.send(:headers),
|
55
|
+
open_timeout: 30,
|
56
|
+
timeout: 80
|
57
|
+
).and_call_original
|
58
|
+
|
59
|
+
WebMock.stub_request(method, url).
|
60
|
+
to_return(body: response.to_json, status: 200)
|
55
61
|
end
|
56
62
|
|
57
63
|
it 'makes a request to an endpoint' do
|
58
|
-
expect(resource.public_send(method, {url: url, payload: payload})).
|
64
|
+
expect(resource.public_send(method, {url: url, payload: payload})).
|
65
|
+
to eq(response)
|
59
66
|
end
|
60
67
|
end
|
61
68
|
end
|
@@ -47,6 +47,16 @@ class FakeOnfidoAPI < Sinatra::Base
|
|
47
47
|
json_response(422, '4xx_response.json')
|
48
48
|
end
|
49
49
|
|
50
|
+
get '/v1/unexpected_error_format' do
|
51
|
+
json_response(400, 'unexpected_error_format.json')
|
52
|
+
end
|
53
|
+
|
54
|
+
get '/v1/unparseable_response' do
|
55
|
+
content_type :json
|
56
|
+
status 504
|
57
|
+
''
|
58
|
+
end
|
59
|
+
|
50
60
|
private
|
51
61
|
|
52
62
|
def json_response(response_code, file_name)
|
metadata
CHANGED
@@ -1,55 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onfido
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pericles Theodorou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.7'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: webmock
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.22'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.22'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rest-client
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ~>
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: 1.8.0
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ~>
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: 1.8.0
|
55
69
|
description: A wrapper for Onfido API 1.0
|
@@ -59,9 +73,10 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
79
|
+
- CHANGELOG.md
|
65
80
|
- Gemfile
|
66
81
|
- LICENSE
|
67
82
|
- LICENSE.txt
|
@@ -74,23 +89,21 @@ files:
|
|
74
89
|
- lib/onfido/check.rb
|
75
90
|
- lib/onfido/configuration.rb
|
76
91
|
- lib/onfido/document.rb
|
92
|
+
- lib/onfido/errors/connection_error.rb
|
93
|
+
- lib/onfido/errors/request_error.rb
|
77
94
|
- lib/onfido/null_logger.rb
|
78
95
|
- lib/onfido/report.rb
|
79
|
-
- lib/onfido/request_error.rb
|
80
|
-
- lib/onfido/requestable.rb
|
81
96
|
- lib/onfido/resource.rb
|
82
|
-
- lib/onfido/response_handler.rb
|
83
97
|
- lib/onfido/version.rb
|
84
98
|
- onfido.gemspec
|
85
|
-
- spec/integrations/4xx_response_spec.rb
|
86
99
|
- spec/integrations/address_spec.rb
|
87
100
|
- spec/integrations/applicant_spec.rb
|
88
101
|
- spec/integrations/check_spec.rb
|
89
102
|
- spec/integrations/document_spec.rb
|
103
|
+
- spec/integrations/exceptions_spec.rb
|
90
104
|
- spec/integrations/report_spec.rb
|
91
105
|
- spec/onfido/request_error_spec.rb
|
92
106
|
- spec/onfido/resource_spec.rb
|
93
|
-
- spec/onfido/response_handler_spec.rb
|
94
107
|
- spec/onfido_spec.rb
|
95
108
|
- spec/spec_helper.rb
|
96
109
|
- spec/support/fake_onfido_api.rb
|
@@ -103,6 +116,7 @@ files:
|
|
103
116
|
- spec/support/fixtures/document.json
|
104
117
|
- spec/support/fixtures/report.json
|
105
118
|
- spec/support/fixtures/reports.json
|
119
|
+
- spec/support/fixtures/unexpected_error_format.json
|
106
120
|
homepage: http://github.com/hvssle/onfido
|
107
121
|
licenses:
|
108
122
|
- MIT
|
@@ -113,12 +127,12 @@ require_paths:
|
|
113
127
|
- lib
|
114
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
129
|
requirements:
|
116
|
-
- -
|
130
|
+
- - '>='
|
117
131
|
- !ruby/object:Gem::Version
|
118
132
|
version: '0'
|
119
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
134
|
requirements:
|
121
|
-
- -
|
135
|
+
- - '>='
|
122
136
|
- !ruby/object:Gem::Version
|
123
137
|
version: '0'
|
124
138
|
requirements: []
|
@@ -128,15 +142,14 @@ signing_key:
|
|
128
142
|
specification_version: 4
|
129
143
|
summary: A wrapper for Onfido API 1.0
|
130
144
|
test_files:
|
131
|
-
- spec/integrations/4xx_response_spec.rb
|
132
145
|
- spec/integrations/address_spec.rb
|
133
146
|
- spec/integrations/applicant_spec.rb
|
134
147
|
- spec/integrations/check_spec.rb
|
135
148
|
- spec/integrations/document_spec.rb
|
149
|
+
- spec/integrations/exceptions_spec.rb
|
136
150
|
- spec/integrations/report_spec.rb
|
137
151
|
- spec/onfido/request_error_spec.rb
|
138
152
|
- spec/onfido/resource_spec.rb
|
139
|
-
- spec/onfido/response_handler_spec.rb
|
140
153
|
- spec/onfido_spec.rb
|
141
154
|
- spec/spec_helper.rb
|
142
155
|
- spec/support/fake_onfido_api.rb
|
@@ -149,3 +162,4 @@ test_files:
|
|
149
162
|
- spec/support/fixtures/document.json
|
150
163
|
- spec/support/fixtures/report.json
|
151
164
|
- spec/support/fixtures/reports.json
|
165
|
+
- spec/support/fixtures/unexpected_error_format.json
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.3
|
data/lib/onfido/requestable.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
module Onfido
|
2
|
-
module Requestable
|
3
|
-
def make_request(options)
|
4
|
-
url = options.fetch(:url)
|
5
|
-
payload = options.fetch(:payload)
|
6
|
-
method = options.fetch(:method)
|
7
|
-
RestClient::Request.execute(url: url, payload: payload, method: method, headers: headers) do |response, *|
|
8
|
-
ResponseHandler.new(response).parse!
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Onfido
|
2
|
-
class ResponseHandler
|
3
|
-
attr_reader :response
|
4
|
-
|
5
|
-
def initialize(response)
|
6
|
-
@response = response
|
7
|
-
end
|
8
|
-
|
9
|
-
def parse!
|
10
|
-
if Onfido.throws_exceptions && parsed_response["error"]
|
11
|
-
raise request_error
|
12
|
-
else
|
13
|
-
parsed_response
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def parsed_response
|
20
|
-
@parsed_response ||=
|
21
|
-
begin
|
22
|
-
JSON.parse(response)
|
23
|
-
rescue JSON::ParserError
|
24
|
-
{
|
25
|
-
'error' => {"message" => "Unparseable response: #{response}"}
|
26
|
-
}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def request_error
|
31
|
-
RequestError.new(parsed_response['error']['message']).tap do |error|
|
32
|
-
error.type = parsed_response['error']["type"]
|
33
|
-
error.fields = parsed_response['error']["fields"]
|
34
|
-
error.response_code = response.code if response.respond_to?(:code)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
describe Onfido::Resource do
|
2
|
-
let(:resource) { described_class.new }
|
3
|
-
let(:url) { Onfido.endpoint + path }
|
4
|
-
let(:api_key) { 'some_key' }
|
5
|
-
let(:payload) { {postcode: 'SE1 4NG'} }
|
6
|
-
|
7
|
-
|
8
|
-
before do
|
9
|
-
allow(Onfido).to receive(:api_key).and_return(api_key)
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'when a response is a 4xx' do
|
13
|
-
let(:path) { '4xx_response' }
|
14
|
-
|
15
|
-
context "when 'throws_exceptions' is true" do
|
16
|
-
it 'raises a custom error' do
|
17
|
-
expect {
|
18
|
-
resource.get({url: url, payload: payload})
|
19
|
-
}.to raise_error(
|
20
|
-
Onfido::RequestError, 'Something went wrong')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "when 'throws_exceptions' is false" do
|
25
|
-
before do
|
26
|
-
allow(Onfido).to receive(:throws_exceptions).and_return(false)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'returns the body as a hash' do
|
30
|
-
response = resource.get({url: url, payload: payload})
|
31
|
-
expect(response['error']).not_to be_nil
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
describe Onfido::ResponseHandler do
|
2
|
-
subject(:handler) { described_class.new(response) }
|
3
|
-
|
4
|
-
describe '#parse!' do
|
5
|
-
before do
|
6
|
-
allow(Onfido).to receive(:throws_exceptions).and_return(throws_exceptions)
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:throws_exceptions) { true }
|
10
|
-
|
11
|
-
context 'when the response is successful' do
|
12
|
-
let(:response) { hashified_response.to_json }
|
13
|
-
let(:hashified_response) do
|
14
|
-
{'success' => 'applicant was successfully created'}
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'parses the body and returns it' do
|
18
|
-
expect(handler.parse!).to eq(hashified_response)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when the response has gracefully errored' do
|
23
|
-
let(:response) { hashified_response.to_json }
|
24
|
-
let(:hashified_response) do
|
25
|
-
{
|
26
|
-
'error' => {
|
27
|
-
'message' => 'Authorization error: please re-check your credentials'
|
28
|
-
}
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'when throw_exceptions configuration is set to true' do
|
33
|
-
it 'raises an error' do
|
34
|
-
expect { handler.parse! }.to raise_error(
|
35
|
-
Onfido::RequestError,
|
36
|
-
'Authorization error: please re-check your credentials'
|
37
|
-
)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'when throw_exceptions configuration is set to false' do
|
42
|
-
let(:throws_exceptions) { false }
|
43
|
-
|
44
|
-
|
45
|
-
it 'parses the body and returns it' do
|
46
|
-
expect(handler.parse!).to eq(hashified_response)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'when the response is unparseable' do
|
52
|
-
let(:response) { 'something : wrong' }
|
53
|
-
|
54
|
-
context 'when throw_exceptions configuration is set to true' do
|
55
|
-
it 'raises an error' do
|
56
|
-
expect { handler.parse! }.to raise_error(
|
57
|
-
Onfido::RequestError,
|
58
|
-
'Unparseable response: something : wrong'
|
59
|
-
)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'when throw_exceptions configuration is set to false' do
|
64
|
-
let(:throws_exceptions) { false }
|
65
|
-
|
66
|
-
|
67
|
-
it 'parses the body and returns it' do
|
68
|
-
expect(handler.parse!).to eq(
|
69
|
-
{
|
70
|
-
'error' => {
|
71
|
-
'message' => 'Unparseable response: something : wrong'
|
72
|
-
}
|
73
|
-
}
|
74
|
-
)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|