belvo 0.5.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd5733a59d486efcc6a6d9e62331a2d6734304bc231e76a19f27a285f7b4c47f
4
- data.tar.gz: 408ae0cb0d7a27e8b4f8f4f8a9b7a7a6b3a6d08539d5f938e328af137f26bcb4
3
+ metadata.gz: 8eec099b22dbcb9dbac55982ac84c447bdae2f69c5f06bb310ea8a1be8889b1d
4
+ data.tar.gz: dfe77adac6722c395f8b31c867a2a803dabd226fcbda6452ffb29dbe6310e412
5
5
  SHA512:
6
- metadata.gz: 84f3d999c67f38697b1c18973a70503787a2a4009d41b4bb7d9525bfbc8844451cdfb7f9b1bb71b150df5e1cf76f6164c527d92c4129d49696a80f5526662fbf
7
- data.tar.gz: ff94f967de7f91895bc8323f0c6265d405991f4ce547582b920ec657b4c76926225adb6ddade63c72fe3b0e4f1c2e80ea6a7d12764c4ac9d7c3d83c93c6583dc
6
+ metadata.gz: 71f7405acc9de362147b1182644c0af7bfe358160d070eaaae59b41d95caec18800d9bb589e61ef7dd0ae6ef2c22418cda0dfcd636d1f5165ae430d01b5dd0be
7
+ data.tar.gz: 90c3ce711c21df50880301629d3555f8dff981441e1dc30e1065e5182550dfd1e1bf43e282d47e58da05cd8131669eb00974f48aa7879ca22c06cf11b94d46a7
@@ -1,4 +1,3 @@
1
- ---
2
1
  language: ruby
3
2
  cache: bundler
4
3
  rvm:
@@ -7,3 +6,12 @@ before_install: gem install bundler -v 2.1.4
7
6
  script:
8
7
  - bundle exec rubocop
9
8
  - bundle exec rspec spec
9
+ deploy:
10
+ provider: rubygems
11
+ api_key:
12
+ secure: nsKurIEds1W6zwyj0mDmYx77amlDJOycegZV9o+OrBOzRRcpT+O3oFHGouMzAQyIbdUtmWyXp9uJHBEz7Q6Zc5fy6iG05sGO7tFoJMlKiPE5piiOTM5y6qt1GjZ1MYIU0rpnsp9QDsVUR1ATGpoD9O/zzn/lOPbxp2FoWHqWra84D/1jvVXPTqslLgup+GDsxseiAfwTMoTy65TXodISkvoYtlPL3EBV4/XQVBjVGGtM5mdjDJg+YA4yVA2NwCCjhFcj88fRxBmqWRnG/pzmX3nyRlMGjtUBm8OpLSR1NiXXqgzYUAVMD8/8VL/h3OsBqvwqgjZKMO6rXqNKFJQAxYUqvJaLcHP8D05dxWlumqwxlHzscKWLjAe7JbVo2DiAMvMTR8NTJOI7LOraU10iFHtmwAVnyBOaSJUVJuFgAoybq9tqYoZ/uZ7shCuWVNUIWIQM7HN9v99tfvemXMB+2RIN565bzBWSorn5MvXsApvqCLLDFuRnt7urR+0ZyT4dKXgvWRhnNOQgiMwEE/8+Y66nKVB7iNxFDw6LtittyoOZ0HvbHQDtqXOkzT/yaq2Ff2zwuUNYrCHqcdnxg5TBOYg5ndurcFxAc77ZlNSvidEC9tgXHA1m+r0Vq+ZCWOiyyohX33ZfA/UsAIStKr7a6ZLZZywuiqXasg1O9XoRB74=
13
+ gem: belvo
14
+ on:
15
+ tags: true
16
+ repo: belvo-finance/belvo-ruby
17
+ skip_cleanup: 'true'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- belvo (0.5.0)
4
+ belvo (0.7.0)
5
5
  faraday
6
6
  faraday_middleware
7
7
  typhoeus
@@ -11,48 +11,48 @@ GEM
11
11
  specs:
12
12
  addressable (2.7.0)
13
13
  public_suffix (>= 2.0.2, < 5.0)
14
- ast (2.4.0)
14
+ ast (2.4.1)
15
15
  coveralls (0.8.23)
16
16
  json (>= 1.8, < 3)
17
17
  simplecov (~> 0.16.1)
18
18
  term-ansicolor (~> 1.3)
19
19
  thor (>= 0.19.4, < 2.0)
20
20
  tins (~> 1.6)
21
- crack (0.4.3)
22
- safe_yaml (~> 1.0.0)
23
- diff-lcs (1.3)
21
+ crack (0.4.4)
22
+ diff-lcs (1.4.4)
24
23
  docile (1.3.2)
25
24
  ethon (0.12.0)
26
25
  ffi (>= 1.3.0)
27
- faraday (1.0.1)
26
+ faraday (1.1.0)
28
27
  multipart-post (>= 1.2, < 3)
28
+ ruby2_keywords
29
29
  faraday_middleware (1.0.0)
30
30
  faraday (~> 1.0)
31
- ffi (1.12.2)
31
+ ffi (1.13.1)
32
32
  hashdiff (1.0.1)
33
33
  jaro_winkler (1.5.4)
34
- json (2.3.0)
34
+ json (2.3.1)
35
35
  multipart-post (2.1.1)
36
- parallel (1.19.1)
37
- parser (2.7.1.2)
38
- ast (~> 2.4.0)
39
- public_suffix (4.0.5)
36
+ parallel (1.20.0)
37
+ parser (2.7.2.0)
38
+ ast (~> 2.4.1)
39
+ public_suffix (4.0.6)
40
40
  rainbow (3.0.0)
41
41
  rake (12.3.3)
42
42
  rexml (3.2.4)
43
- rspec (3.9.0)
44
- rspec-core (~> 3.9.0)
45
- rspec-expectations (~> 3.9.0)
46
- rspec-mocks (~> 3.9.0)
47
- rspec-core (3.9.2)
48
- rspec-support (~> 3.9.3)
49
- rspec-expectations (3.9.2)
43
+ rspec (3.10.0)
44
+ rspec-core (~> 3.10.0)
45
+ rspec-expectations (~> 3.10.0)
46
+ rspec-mocks (~> 3.10.0)
47
+ rspec-core (3.10.0)
48
+ rspec-support (~> 3.10.0)
49
+ rspec-expectations (3.10.0)
50
50
  diff-lcs (>= 1.2.0, < 2.0)
51
- rspec-support (~> 3.9.0)
52
- rspec-mocks (3.9.1)
51
+ rspec-support (~> 3.10.0)
52
+ rspec-mocks (3.10.0)
53
53
  diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.9.0)
55
- rspec-support (3.9.3)
54
+ rspec-support (~> 3.10.0)
55
+ rspec-support (3.10.0)
56
56
  rubocop (0.81.0)
57
57
  jaro_winkler (~> 1.5.1)
58
58
  parallel (~> 1.10)
@@ -61,10 +61,10 @@ GEM
61
61
  rexml
62
62
  ruby-progressbar (~> 1.7)
63
63
  unicode-display_width (>= 1.4.0, < 2.0)
64
- rubocop-rspec (1.39.0)
64
+ rubocop-rspec (1.41.0)
65
65
  rubocop (>= 0.68.1)
66
66
  ruby-progressbar (1.10.1)
67
- safe_yaml (1.0.5)
67
+ ruby2_keywords (0.0.2)
68
68
  simplecov (0.16.1)
69
69
  docile (~> 1.1)
70
70
  json (>= 1.8, < 3)
@@ -74,12 +74,12 @@ GEM
74
74
  term-ansicolor (1.7.1)
75
75
  tins (~> 1.0)
76
76
  thor (1.0.1)
77
- tins (1.24.1)
77
+ tins (1.26.0)
78
78
  sync
79
79
  typhoeus (1.4.0)
80
80
  ethon (>= 0.9.0)
81
81
  unicode-display_width (1.7.0)
82
- webmock (3.8.3)
82
+ webmock (3.9.5)
83
83
  addressable (>= 2.3.6)
84
84
  crack (>= 0.3.2)
85
85
  hashdiff (>= 0.4.0, < 2.0.0)
data/README.md CHANGED
@@ -5,8 +5,17 @@
5
5
  <a href="https://coveralls.io/github/belvo-finance/belvo-ruby"><img alt="Coveralls github" src="https://img.shields.io/coveralls/github/belvo-finance/belvo-ruby?style=for-the-badge"></a>
6
6
  <a href="https://codeclimate.com/github/belvo-finance/belvo-ruby"><img alt="CodeClimate maintainability" src="https://img.shields.io/codeclimate/maintainability/belvo-finance/belvo-ruby?style=for-the-badge"></a>
7
7
  </p>
8
- <p align="center"><a href="https://developers.belvo.co">Developers portal</a> | <a href="https://belvo-finance.github.io/belvo-ruby">Documentation</a></p>
9
8
 
9
+ ## 📕 Documentation
10
+ How to use `belvo-ruby`: https://belvo-finance.github.io/belvo-ruby/
11
+
12
+ If you want to check the full documentation about Belvo API: https://docs.belvo.co
13
+
14
+ Or if you want to more information about:
15
+ * [Getting Belvo API keys](https://developers.belvo.com/docs/get-your-belvo-api-keys)
16
+ * [Using Connect Widget](https://developers.belvo.com/docs/connect-widget)
17
+ * [Testing in sandbox](https://developers.belvo.com/docs/test-in-sandbox)
18
+ * [Using webhooks and recurrent links](https://developers.belvo.com/docs/webhooks)
10
19
 
11
20
  ## Installation
12
21
 
@@ -39,7 +48,8 @@ begin
39
48
  new_link = belvo.links.register(
40
49
  institution: 'banamex_mx_retail',
41
50
  username: 'janedoe',
42
- password: 'super-secret'
51
+ password: 'super-secret',
52
+ options: { access_mode: Belvo::Link::AccessMode::SINGLE }
43
53
  )
44
54
 
45
55
  belvo.accounts.retrieve(link: new_link['id'])
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.name = 'belvo'
7
7
  spec.version = Belvo::VERSION
8
8
  spec.authors = ['Belvo Finance S.L.']
9
- spec.email = ['hello@belvo.co']
9
+ spec.email = ['sdks@belvo.co']
10
10
  spec.license = 'MIT'
11
11
  spec.summary = 'The Ruby gem for the Belvo API'
12
12
  spec.description = %(Belvo is the leading Open Banking API platform in Latin
@@ -63,6 +63,12 @@ module Belvo
63
63
  @statements = Statement.new @session
64
64
  end
65
65
 
66
+ # Provides access to Incomes resource
67
+ # @return [Income]
68
+ def incomes
69
+ @incomes = Income.new @session
70
+ end
71
+
66
72
  # Provides access to Invoices resource
67
73
  # @return [Invoice]
68
74
  def invoices
@@ -86,5 +92,11 @@ module Belvo
86
92
  def institutions
87
93
  @institutions = Institution.new @session
88
94
  end
95
+
96
+ # Provides access to WidgetToken resource
97
+ # @return [WidgetToken]
98
+ def widget_token
99
+ @widget_token = WidgetToken.new @session
100
+ end
89
101
  end
90
102
  end
@@ -11,6 +11,9 @@ require 'belvo/exceptions'
11
11
  module Belvo
12
12
  # Describes a Belvo API session
13
13
  class APISession
14
+ attr_reader :key_id
15
+ attr_reader :key_password
16
+
14
17
  # @param url [String] Belvo API host url
15
18
  # @return [Faraday::Connection]
16
19
  def initialize(url)
@@ -117,6 +120,19 @@ module Belvo
117
120
  response.body
118
121
  end
119
122
 
123
+ # Perform a POST request to an API endpoint
124
+ # @param path [String] API endpoint
125
+ # @param id [String] Resource UUID
126
+ # @param data [object] JSON parseable object
127
+ # @return [Hash] Response details
128
+ # @raise [RequestError] If response code is different than 2XX
129
+ def token(path, id, data)
130
+ resource_path = format('%<path>s%<id>s/token/', path: path, id: id)
131
+ response = @session.post(resource_path, data.to_json)
132
+ raise_for_status response
133
+ response.body
134
+ end
135
+
120
136
  # Perform a POST request to an API endpoint
121
137
  # @param path [String] API endpoint
122
138
  # @param data [object] JSON parseable object
@@ -7,11 +7,17 @@ module Belvo
7
7
  # Contains the configurable properties for a Link
8
8
  # @!attribute access_mode [rw] Link access mode (SINGLE or RECURRENT)
9
9
  # @!attribute token [rw] OTP token required by the institution
10
+ # @!attribute username2 [rw] End-user secondary username, if any
11
+ # @!attribute username3 [rw] End-user tertiary username, if any
12
+ # @!attribute password2 [rw] End-user secondary password, if any
10
13
  # @!attribute encryption_key [rw] Custom encryption key
11
14
  # @!attribute username_type [rw] Type of the username provided
12
15
  class LinkOptions < Faraday::Options.new(
13
16
  :access_mode,
14
17
  :token,
18
+ :username2,
19
+ :username3,
20
+ :password2,
15
21
  :encryption_key,
16
22
  :username_type,
17
23
  :certificate,
@@ -86,6 +92,16 @@ module Belvo
86
92
  )
87
93
  end
88
94
 
95
+ # @!class IncomeOptions < Faraday::Options
96
+ # Contains configurable properties of an Income
97
+ # @!attribute save_data [rw] Should data be persisted or not.
98
+ # @!attribute encryption_key [rw] Custom encryption key
99
+ class IncomeOptions < Faraday::Options.new(
100
+ :encryption_key,
101
+ :save_data
102
+ )
103
+ end
104
+
89
105
  # @!class InvoiceOptions < Faraday::Options
90
106
  # Contains configurable properties of an Invoice
91
107
  # @!attribute save_data [rw] Should data be persisted or not.
@@ -77,7 +77,6 @@ module Belvo
77
77
  # @param institution [String] Institution name
78
78
  # @param username [String] End-user username
79
79
  # @param password [String] End-user password
80
- # @param password2 [String, nil] End-user secondary password, if any
81
80
  # @param options [LinkOptions] Configurable properties
82
81
  # @return [Hash] created link details
83
82
  # @raise [RequestError] If response code is different than 2XX
@@ -85,7 +84,6 @@ module Belvo
85
84
  institution:,
86
85
  username:,
87
86
  password:,
88
- password2: nil,
89
87
  options: nil
90
88
  )
91
89
  options = LinkOptions.from(options)
@@ -95,13 +93,7 @@ module Belvo
95
93
  institution: institution,
96
94
  username: username,
97
95
  password: password,
98
- password2: password2,
99
- token: options.token,
100
- encryption_key: options.encryption_key,
101
- access_mode: options.access_mode || AccessMode::SINGLE,
102
- username_type: options.username_type,
103
- certificate: options.certificate,
104
- private_key: options.private_key
96
+ access_mode: options.access_mode
105
97
  }.merge(options)
106
98
  body = clean body: body
107
99
  @session.post(@endpoint, body)
@@ -130,6 +122,18 @@ module Belvo
130
122
  body = clean body: body
131
123
  @session.put(@endpoint, id, body)
132
124
  end
125
+
126
+ # Allows to create a token with client-specified scope and short TTL.
127
+ # @param id [String] Link UUID
128
+ # @param scopes [String] Configurable scopes eg: "read_links,write_links"
129
+ # @return [Hash] with a "refresh" and "access" token
130
+ # @raise [RequestError] If response code is different than 2XX
131
+ def token(id:, scopes:)
132
+ body = {
133
+ scopes: scopes
134
+ }
135
+ @session.token(@endpoint, id, body)
136
+ end
133
137
  end
134
138
 
135
139
  # An Account is the representation of a bank account inside a financial
@@ -277,6 +281,30 @@ module Belvo
277
281
  end
278
282
  end
279
283
 
284
+ # A Income contains a resume of monthly Transactions inside an Account.
285
+ class Income < Resource
286
+ def initialize(session)
287
+ super(session)
288
+ @endpoint = 'incomes/'
289
+ end
290
+
291
+ # Retrieve incomes information from a specific banking link.
292
+ # @param link [String] Link UUID
293
+ # @param options [IncomesOptions] Configurable properties
294
+ # @return [Hash] created incomes details
295
+ # @raise [RequestError] If response code is different than 2XX
296
+ def retrieve(link:, options: nil)
297
+ options = IncomeOptions.from(options)
298
+ body = {
299
+ link: link,
300
+ encryption_key: options.encryption_key,
301
+ save_data: options.save_data || true
302
+ }.merge(options)
303
+ body = clean body: body
304
+ @session.post(@endpoint, body)
305
+ end
306
+ end
307
+
280
308
  # An Invoice is the representation of an electronic invoice, that can be
281
309
  # received or sent, by a business or an individual and has been uploaded
282
310
  # to the fiscal institution website
@@ -383,4 +411,23 @@ module Belvo
383
411
  @endpoint = 'institutions/'
384
412
  end
385
413
  end
414
+
415
+ # A WidgetToken is a limited scope with short time to live token, that
416
+ # contains access and refresh keys to allow you embedding Belvo's Connect
417
+ # Widget into your app.
418
+ class WidgetToken < Resource
419
+ def initialize(session)
420
+ super(session)
421
+ @endpoint = 'token/'
422
+ end
423
+
424
+ def create
425
+ body = {
426
+ id: @session.key_id,
427
+ password: @session.key_password,
428
+ scopes: 'read_institutions,write_links,read_links,delete_links'
429
+ }
430
+ @session.post(@endpoint, body)
431
+ end
432
+ end
386
433
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Belvo
4
4
  # belvo-ruby current version
5
- VERSION = '0.5.0'
5
+ VERSION = '0.7.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: belvo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Belvo Finance S.L.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-12 00:00:00.000000000 Z
11
+ date: 2020-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -141,7 +141,7 @@ description: |-
141
141
  America and the easiest way for users to connect their
142
142
  account to an app
143
143
  email:
144
- - hello@belvo.co
144
+ - sdks@belvo.co
145
145
  executables: []
146
146
  extensions: []
147
147
  extra_rdoc_files: []
@@ -191,8 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
191
  - !ruby/object:Gem::Version
192
192
  version: '0'
193
193
  requirements: []
194
- rubyforge_project:
195
- rubygems_version: 2.7.6
194
+ rubygems_version: 3.0.8
196
195
  signing_key:
197
196
  specification_version: 4
198
197
  summary: The Ruby gem for the Belvo API