flinks 0.3.0 → 0.3.1
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/.travis.yml +3 -3
- data/README.md +22 -4
- data/VERSION +1 -1
- data/flinks.gemspec +3 -3
- data/lib/flinks/api/account.rb +6 -6
- data/lib/flinks/api/authorize.rb +9 -9
- data/lib/flinks/api/statement.rb +2 -4
- data/lib/flinks/client.rb +14 -0
- data/lib/flinks/request.rb +21 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b7a392806d3c94ce6e355367e627315f520970216796aa47b77f9a0208e55e1
|
4
|
+
data.tar.gz: f17b1804a6d60dbe6c11342b01b95a978e94cd6a15297a07b164402080c6941f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c19e8dc8039795b03b503ebbedf33cfb5b6012cf34d78204d32a34ecd5f2b7355b45032a93d27e43ec6f3f8ffe6a7e902a40d264fe32a91a78e50ba604adccec
|
7
|
+
data.tar.gz: 3482beb2baf3ad3d5a2fcfd40a47e40509c7dfcf4bc2c4a498ea74b75ae81195f32abb5cb13fd1a4d882da76896dd009d387ea15a74c0bc83027ce5c2067687e
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -21,34 +21,42 @@ gem 'flinks', require: 'flinks'
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
This library needs to be configured with your API customer ID.
|
24
|
+
This library needs to be configured with your API customer ID and API endpoint.
|
25
25
|
|
26
26
|
```ruby
|
27
|
-
flinks = Flinks.new(customer_id: ENV['FLINKS_CUSTOMER_ID'])
|
27
|
+
flinks = Flinks.new(customer_id: ENV['FLINKS_CUSTOMER_ID'], api_endpoint: "https://YOURNAME-api.private.fin.ag/v3/")
|
28
28
|
```
|
29
29
|
|
30
|
-
Configure `on_error` to catch API requests returning a 400..599 HTTP status.
|
30
|
+
Configure `on_error` to catch API requests returning a `400..599` HTTP status.
|
31
31
|
|
32
32
|
```ruby
|
33
33
|
flinks = Flinks.new({
|
34
34
|
customer_id: ENV['FLINKS_CUSTOMER_ID'],
|
35
|
+
api_endpoint: "https://YOURNAME-api.private.fin.ag/v3/",
|
35
36
|
on_error: Proc.new do |status, message, body|
|
36
37
|
p [status, message, body]
|
37
38
|
end
|
38
39
|
})
|
39
40
|
```
|
40
41
|
|
41
|
-
Configure `debug` to print every API responses.
|
42
|
+
Configure `debug` to print every API requests and responses.
|
42
43
|
|
43
44
|
```ruby
|
44
45
|
flinks = Flinks.new({
|
45
46
|
customer_id: ENV['FLINKS_CUSTOMER_ID'],
|
47
|
+
api_endpoint: "https://YOURNAME-api.private.fin.ag/v3/",
|
46
48
|
debug: true
|
47
49
|
})
|
48
50
|
```
|
49
51
|
|
50
52
|
### Endpoints
|
51
53
|
|
54
|
+
#### Authorize
|
55
|
+
|
56
|
+
- `authorize(login_id:, options:)`
|
57
|
+
- `authorize_with_credentials(username:, password:, institution:, options:)`
|
58
|
+
- `authorize_multiple(login_ids:)`
|
59
|
+
|
52
60
|
#### Account
|
53
61
|
|
54
62
|
- `accounts_summary(request_id:, options:)`
|
@@ -75,6 +83,12 @@ flinks = Flinks.new({
|
|
75
83
|
|
76
84
|
See the [API docs](https://sandbox-api.flinks.io).
|
77
85
|
|
86
|
+
## Supported Ruby versions
|
87
|
+
|
88
|
+
- MRI 2.3
|
89
|
+
- MRI 2.4
|
90
|
+
- MRI 2.5
|
91
|
+
|
78
92
|
## Development
|
79
93
|
|
80
94
|
Run all tests:
|
@@ -82,3 +96,7 @@ Run all tests:
|
|
82
96
|
```bash
|
83
97
|
bundle exec rspec
|
84
98
|
```
|
99
|
+
|
100
|
+
## License
|
101
|
+
|
102
|
+
[MIT](LICENSE.txt)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/flinks.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: flinks 0.3.
|
5
|
+
# stub: flinks 0.3.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "flinks".freeze
|
9
|
-
s.version = "0.3.
|
9
|
+
s.version = "0.3.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Philippe Dionne".freeze]
|
14
|
-
s.date = "2018-02-
|
14
|
+
s.date = "2018-02-16"
|
15
15
|
s.description = "Flinks financial services API client".freeze
|
16
16
|
s.email = "dionne.phil@gmail.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
data/lib/flinks/api/account.rb
CHANGED
@@ -41,10 +41,10 @@ module Flinks
|
|
41
41
|
# @param options [Hash]
|
42
42
|
# @return [Hash]
|
43
43
|
def accounts_summary(request_id:, options: {})
|
44
|
-
payload =
|
45
|
-
|
44
|
+
payload = options.merge(request_id: request_id)
|
45
|
+
validate_request!(AccountSummaryRequestSchema, payload)
|
46
46
|
|
47
|
-
post("#{customer_id}/BankingServices/GetAccountsSummary", body: payload
|
47
|
+
post("#{customer_id}/BankingServices/GetAccountsSummary", body: payload)
|
48
48
|
end
|
49
49
|
|
50
50
|
# @see https://sandbox-api.flinks.io/Readme/#get-accounts-detail
|
@@ -52,10 +52,10 @@ module Flinks
|
|
52
52
|
# @param options [Hash]
|
53
53
|
# @return [Hash]
|
54
54
|
def accounts_detail(request_id:, options: {})
|
55
|
-
payload =
|
56
|
-
|
55
|
+
payload = options.merge(request_id: request_id)
|
56
|
+
validate_request!(AccountDetailRequestSchema, payload)
|
57
57
|
|
58
|
-
post("#{customer_id}/BankingServices/GetAccountsDetail", body: payload
|
58
|
+
post("#{customer_id}/BankingServices/GetAccountsDetail", body: payload)
|
59
59
|
end
|
60
60
|
|
61
61
|
# @see https://sandbox-api.flinks.io/Readme/#get-accounts-summary
|
data/lib/flinks/api/authorize.rb
CHANGED
@@ -42,10 +42,10 @@ module Flinks
|
|
42
42
|
# @param options [Hash]
|
43
43
|
# @return [Hash]
|
44
44
|
def authorize(login_id:, options: {})
|
45
|
-
payload =
|
46
|
-
|
45
|
+
payload = options.merge(login_id: login_id)
|
46
|
+
validate_request!(AuthorizeRequestSchema, payload)
|
47
47
|
|
48
|
-
post("#{customer_id}/BankingServices/Authorize", body: payload
|
48
|
+
post("#{customer_id}/BankingServices/Authorize", body: payload)
|
49
49
|
end
|
50
50
|
|
51
51
|
# @see https://sandbox-api.flinks.io/Readme/#authorize
|
@@ -54,20 +54,20 @@ module Flinks
|
|
54
54
|
# @param institution [String]
|
55
55
|
# @param options [Hash]
|
56
56
|
def authorize_with_credentials(username:, password:, institution:, options: {})
|
57
|
-
payload =
|
58
|
-
|
57
|
+
payload = options.merge(username: username, password: password, institution: institution)
|
58
|
+
validate_request!(AuthorizeWithCredentialsRequestSchema, payload)
|
59
59
|
|
60
|
-
post("#{customer_id}/BankingServices/Authorize", body: payload
|
60
|
+
post("#{customer_id}/BankingServices/Authorize", body: payload)
|
61
61
|
end
|
62
62
|
|
63
63
|
# @see https://sandbox-api.flinks.io/Readme/#authorize-multiple
|
64
64
|
# @param login_ids [Array]
|
65
65
|
# @return [Hash]
|
66
66
|
def authorize_multiple(login_ids:)
|
67
|
-
payload =
|
68
|
-
|
67
|
+
payload = options.merge(login_ids: login_ids)
|
68
|
+
validate_request!(AuthorizeMultipleRequestSchema, payload)
|
69
69
|
|
70
|
-
post("#{customer_id}/BankingServices/AuthorizeMultiple", body: payload
|
70
|
+
post("#{customer_id}/BankingServices/AuthorizeMultiple", body: payload)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
data/lib/flinks/api/statement.rb
CHANGED
@@ -15,10 +15,8 @@ module Flinks
|
|
15
15
|
# @param options [Hash]
|
16
16
|
# @return [Hash]
|
17
17
|
def statements(options: {})
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
post("#{customer_id}/BankingServices/GetStatements", body: payload.to_h)
|
18
|
+
validate_request!(StatementRequestSchema, options)
|
19
|
+
post("#{customer_id}/BankingServices/GetStatements", body: options)
|
22
20
|
end
|
23
21
|
|
24
22
|
# @see https://sandbox-api.flinks.io/Readme/#get-pdf-statements
|
data/lib/flinks/client.rb
CHANGED
@@ -26,11 +26,25 @@ module Flinks
|
|
26
26
|
option :on_error, default: proc { proc {} }
|
27
27
|
option :debug, default: proc { false }
|
28
28
|
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Builds an error message from a validation object
|
29
33
|
#
|
30
34
|
# @param validation [Dry::Validation::Result]
|
31
35
|
# @return [String]
|
32
36
|
def error_message(validation)
|
33
37
|
validation.messages(full: true).values.flatten.to_sentence
|
34
38
|
end
|
39
|
+
|
40
|
+
# Validates a request payload against a schema object
|
41
|
+
#
|
42
|
+
# @param schema [Class]
|
43
|
+
# @param options [Hash]
|
44
|
+
# @raise [ArgumentError]
|
45
|
+
def validate_request!(schema, options)
|
46
|
+
payload = schema.call(options)
|
47
|
+
raise ArgumentError, error_message(payload) unless payload.success?
|
48
|
+
end
|
35
49
|
end
|
36
50
|
end
|
data/lib/flinks/request.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
1
2
|
require 'http'
|
2
3
|
|
3
4
|
require 'flinks/error'
|
@@ -10,7 +11,7 @@ module Flinks
|
|
10
11
|
# @param path [String]
|
11
12
|
# @param params [Hash]
|
12
13
|
def get(path, params: {})
|
13
|
-
request(:get,
|
14
|
+
request(:get, path, params: params)
|
14
15
|
end
|
15
16
|
|
16
17
|
# Performs a HTTP Post request
|
@@ -19,7 +20,7 @@ module Flinks
|
|
19
20
|
# @param params [Hash]
|
20
21
|
# @param body [Hash]
|
21
22
|
def post(path, params: {}, body: {})
|
22
|
-
request(:post,
|
23
|
+
request(:post, path, params: params, body: body)
|
23
24
|
end
|
24
25
|
|
25
26
|
# Performs a HTTP Patch request
|
@@ -28,7 +29,7 @@ module Flinks
|
|
28
29
|
# @param params [Hash]
|
29
30
|
# @param body [Hash]
|
30
31
|
def patch(path, params: {}, body: {})
|
31
|
-
request(:patch,
|
32
|
+
request(:patch, path, params: params, body: body)
|
32
33
|
end
|
33
34
|
|
34
35
|
|
@@ -38,18 +39,26 @@ module Flinks
|
|
38
39
|
# @raise [Flinks::Error]
|
39
40
|
def request(method, path, params: {}, body: {})
|
40
41
|
headers = {
|
41
|
-
'
|
42
|
-
'
|
42
|
+
'Content-Type' => "application/json",
|
43
|
+
'Accept' => "application/json",
|
44
|
+
'User-Agent' => user_agent
|
43
45
|
}
|
44
46
|
|
47
|
+
# Build URL
|
48
|
+
url = URI.parse(api_endpoint).merge(path)
|
49
|
+
|
45
50
|
# Build payload
|
46
51
|
payload = body.transform_keys { |k| k.to_s.camelize }
|
47
52
|
|
48
53
|
# Perform request
|
49
|
-
response = Http.headers(headers).send(method,
|
54
|
+
response = Http.headers(headers).send(method, url, params: params, json: payload)
|
50
55
|
|
51
56
|
if debug
|
52
|
-
p
|
57
|
+
p "Method: #{method}"
|
58
|
+
p "Url: #{url}"
|
59
|
+
p "Headers: #{headers}"
|
60
|
+
p "Payload: #{payload}"
|
61
|
+
p "Response: #{response}"
|
53
62
|
end
|
54
63
|
|
55
64
|
# Pass on errors when HTTP status included in 400 to 599
|
@@ -59,8 +68,11 @@ module Flinks
|
|
59
68
|
on_error.call(response.code, response.reason, body)
|
60
69
|
end
|
61
70
|
|
62
|
-
#
|
63
|
-
response.parse
|
71
|
+
# Parse body
|
72
|
+
data = response.parse
|
73
|
+
|
74
|
+
# Transform data
|
75
|
+
data.deep_transform_keys { |k| k.underscore }.with_indifferent_access
|
64
76
|
end
|
65
77
|
end
|
66
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flinks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philippe Dionne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|