onfido 0.6.1 → 0.7.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 +7 -0
- data/README.md +6 -0
- data/lib/onfido/api.rb +5 -1
- data/lib/onfido/resource.rb +11 -2
- data/lib/onfido/version.rb +1 -1
- data/spec/onfido/api_spec.rb +18 -0
- data/spec/onfido/resource_spec.rb +96 -32
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc0898839314c34c40e417562dee6591d2972a96
|
4
|
+
data.tar.gz: 587d19739d05918ce9346af1a8adef01a8703207
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c5e9a7b81593a84b9dc420aed0e07436d49950b3424dde6daa53875c9a41e2d55a3640ccaebf6904d2ca51d9d809d09e9fb20429e0613fd0bb5199863642ab1
|
7
|
+
data.tar.gz: e554fbca86a69f397d14fb6d82b7cefab9f524a96c27623823bae25d2e40bf9c1609b26a5739836d6b4a366ced3824660e31193b93afa035afa6665d67021326
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## v0.7.0, 8 August 2016
|
2
|
+
|
3
|
+
- Add support for dynamic API keys
|
4
|
+
(see https://github.com/hvssle/onfido#usage)
|
5
|
+
- Fix `Onfido::Resource` so it raises `Onfido::ConnectionError` on
|
6
|
+
HTTP Error 408 Request Timeout
|
7
|
+
|
1
8
|
## v0.6.1, 15 July 2016
|
2
9
|
|
3
10
|
- Fix `Onfido::API.live_photo` so it returns an `Onfido::LivePhoto` instance
|
data/README.md
CHANGED
@@ -37,6 +37,12 @@ You can make API calls by using an instance of the `API` class:
|
|
37
37
|
api = Onfido::API.new
|
38
38
|
```
|
39
39
|
|
40
|
+
Alternatively, you can set an API key here instead of in the initializer:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
api = Onfido::API.new(api_key: 'API_KEY')
|
44
|
+
```
|
45
|
+
|
40
46
|
### Resources
|
41
47
|
|
42
48
|
All resources share the same interface when making API calls. Use `.create` to create a resource, `.find` to find one, and `.all` to fetch all resources.
|
data/lib/onfido/api.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
module Onfido
|
2
2
|
class API
|
3
|
+
def initialize(options = {})
|
4
|
+
@api_key = options[:api_key]
|
5
|
+
end
|
6
|
+
|
3
7
|
def method_missing(method, *args)
|
4
8
|
klass = method.to_s.split('_').collect(&:capitalize).join
|
5
|
-
Object.const_get("Onfido::#{klass}").new
|
9
|
+
Object.const_get("Onfido::#{klass}").new(@api_key)
|
6
10
|
rescue NameError
|
7
11
|
super
|
8
12
|
end
|
data/lib/onfido/resource.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
module Onfido
|
2
2
|
class Resource
|
3
3
|
VALID_HTTP_METHODS = %i(get post).freeze
|
4
|
+
REQUEST_TIMEOUT_HTTP_CODE = 408
|
5
|
+
|
6
|
+
def initialize(api_key = nil)
|
7
|
+
@api_key = api_key || Onfido.api_key
|
8
|
+
end
|
4
9
|
|
5
10
|
def url_for(path)
|
6
11
|
Onfido.endpoint + path
|
@@ -36,7 +41,7 @@ module Onfido
|
|
36
41
|
|
37
42
|
parse(response)
|
38
43
|
rescue RestClient::ExceptionWithResponse => error
|
39
|
-
if error.response
|
44
|
+
if error.response && !timeout_response?(error.response)
|
40
45
|
handle_api_error(error.response)
|
41
46
|
else
|
42
47
|
handle_restclient_error(error, url)
|
@@ -51,9 +56,13 @@ module Onfido
|
|
51
56
|
general_api_error(response.code, response.body)
|
52
57
|
end
|
53
58
|
|
59
|
+
def timeout_response?(response)
|
60
|
+
response.code.to_i == REQUEST_TIMEOUT_HTTP_CODE
|
61
|
+
end
|
62
|
+
|
54
63
|
def headers
|
55
64
|
{
|
56
|
-
'Authorization' => "Token token=#{
|
65
|
+
'Authorization' => "Token token=#{@api_key}",
|
57
66
|
'Accept' => "application/json"
|
58
67
|
}
|
59
68
|
end
|
data/lib/onfido/version.rb
CHANGED
data/spec/onfido/api_spec.rb
CHANGED
@@ -12,4 +12,22 @@ describe Onfido::API do
|
|
12
12
|
describe 'given an unknown resource' do
|
13
13
|
specify { expect { api.blood_test }.to raise_error(NameError) }
|
14
14
|
end
|
15
|
+
|
16
|
+
describe 'given no API key' do
|
17
|
+
it 'uses nil for the resource API key' do
|
18
|
+
expect(Onfido::Address).to receive(:new).with(nil)
|
19
|
+
api.address
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'given an API key' do
|
24
|
+
let(:api_key) { 'some_key' }
|
25
|
+
|
26
|
+
subject(:api) { described_class.new(api_key: api_key) }
|
27
|
+
|
28
|
+
it 'uses that key to create the resource' do
|
29
|
+
expect(Onfido::Address).to receive(:new).with(api_key)
|
30
|
+
api.address
|
31
|
+
end
|
32
|
+
end
|
15
33
|
end
|
@@ -1,8 +1,26 @@
|
|
1
|
+
require 'onfido/errors/connection_error'
|
2
|
+
|
1
3
|
describe Onfido::Resource do
|
2
4
|
subject(:resource) { described_class.new }
|
5
|
+
|
3
6
|
let(:endpoint) { 'https://api.onfido.com/v2/' }
|
4
|
-
let(:path)
|
5
|
-
let(:
|
7
|
+
let(:path) { 'addresses/pick' }
|
8
|
+
let(:url) { endpoint + path }
|
9
|
+
let(:payload) { { postcode: 'SE1 4NG' } }
|
10
|
+
let(:api_key) { 'some_key' }
|
11
|
+
|
12
|
+
let(:response) do
|
13
|
+
{
|
14
|
+
'addresses' => [
|
15
|
+
{
|
16
|
+
'street' => 'Main Street',
|
17
|
+
'town' => 'London',
|
18
|
+
'postcode' => 'SW4 6EH',
|
19
|
+
'country' => 'GBR'
|
20
|
+
}
|
21
|
+
]
|
22
|
+
}
|
23
|
+
end
|
6
24
|
|
7
25
|
before { allow(Onfido).to receive(:endpoint).and_return(endpoint) }
|
8
26
|
before { allow(Onfido).to receive(:api_key).and_return(api_key) }
|
@@ -25,42 +43,88 @@ describe Onfido::Resource do
|
|
25
43
|
end
|
26
44
|
end
|
27
45
|
|
46
|
+
describe "API key" do
|
47
|
+
subject(:resource) { described_class.new(specific_api_key) }
|
48
|
+
|
49
|
+
before do
|
50
|
+
expect(RestClient::Request).to receive(:execute).
|
51
|
+
with(
|
52
|
+
url: url,
|
53
|
+
payload: Rack::Utils.build_query(payload),
|
54
|
+
method: :get,
|
55
|
+
headers: resource.send(:headers),
|
56
|
+
open_timeout: 30,
|
57
|
+
timeout: 80
|
58
|
+
).and_call_original
|
59
|
+
|
60
|
+
WebMock.stub_request(:get, url).
|
61
|
+
to_return(body: response.to_json, status: 200)
|
62
|
+
end
|
63
|
+
|
64
|
+
context "when using a specific key" do
|
65
|
+
let(:specific_api_key) { "specific_key" }
|
66
|
+
|
67
|
+
it "uses that key when making the request" do
|
68
|
+
resource.get(url: url, payload: payload)
|
69
|
+
|
70
|
+
expect(WebMock).to have_requested(:get, url).with(headers: {
|
71
|
+
'Authorization' => "Token token=#{specific_api_key}",
|
72
|
+
'Accept' => "application/json"
|
73
|
+
})
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when not using a specific key" do
|
78
|
+
let(:specific_api_key) { nil }
|
79
|
+
|
80
|
+
it "uses the general config key when making the request" do
|
81
|
+
resource.get(url: url, payload: payload)
|
82
|
+
|
83
|
+
expect(WebMock).to have_requested(:get, url).with(headers: {
|
84
|
+
'Authorization' => "Token token=#{api_key}",
|
85
|
+
'Accept' => "application/json"
|
86
|
+
})
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
28
91
|
describe "valid http methods" do
|
29
92
|
%i(get post).each do |method|
|
30
93
|
context "for supported HTTP method: #{method}" do
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
]
|
43
|
-
}
|
44
|
-
end
|
94
|
+
context "with a success response" do
|
95
|
+
before do
|
96
|
+
expect(RestClient::Request).to receive(:execute).
|
97
|
+
with(
|
98
|
+
url: url,
|
99
|
+
payload: Rack::Utils.build_query(payload),
|
100
|
+
method: method,
|
101
|
+
headers: resource.send(:headers),
|
102
|
+
open_timeout: 30,
|
103
|
+
timeout: 80
|
104
|
+
).and_call_original
|
45
105
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
timeout: 80
|
55
|
-
).and_call_original
|
56
|
-
|
57
|
-
WebMock.stub_request(method, url).
|
58
|
-
to_return(body: response.to_json, status: 200)
|
106
|
+
WebMock.stub_request(method, url).
|
107
|
+
to_return(body: response.to_json, status: 200)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'makes a request to an endpoint' do
|
111
|
+
expect(resource.public_send(method, url: url, payload: payload)).
|
112
|
+
to eq(response)
|
113
|
+
end
|
59
114
|
end
|
60
115
|
|
61
|
-
|
62
|
-
|
63
|
-
|
116
|
+
context "with a timeout error response" do
|
117
|
+
before do
|
118
|
+
allow_any_instance_of(RestClient::ExceptionWithResponse).
|
119
|
+
to receive(:response).and_return(double(body: "", code: "408"))
|
120
|
+
expect(RestClient::Request).to receive(:execute).
|
121
|
+
and_raise(RestClient::ExceptionWithResponse)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "raises a ConnectionError" do
|
125
|
+
expect { resource.public_send(method, url: url, payload: payload) }.
|
126
|
+
to raise_error(Onfido::ConnectionError)
|
127
|
+
end
|
64
128
|
end
|
65
129
|
end
|
66
130
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onfido
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pericles Theodorou
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|