belvo 0.4.0 → 0.6.2

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: ff048795b869d8968a35be333ebbd05e4455b11324c0112e936bb864c2ed6b54
4
- data.tar.gz: 5cbe5998bc9c47cd37918a1f7d511608316076ac95fa8b5219c6f5a5fa6e56fe
3
+ metadata.gz: f7e008d86a0b4f4ff368e9027711fc3b32a81886e8a5f392d5c67f84bb417c89
4
+ data.tar.gz: 7aa7a82b3ee88a0b0cb6f837edaab45996fc8f6eed41024996711cdebd3f9905
5
5
  SHA512:
6
- metadata.gz: 7823be7ba6522dd1e137d0cb74afe0e732384f18bbc887e617320693de58511c51fdad8db8c4582d013c897a38505662a938f4412e92acc068c0804b9bcc3237
7
- data.tar.gz: a3ff06d08002a13e6ea8107d1c5d8e89c3ef3ae881b601b8dd1b0c5e95d8c986e51140d53400537d75bbe347d376f30a270955bc59ad53a9a4615616527d210c
6
+ metadata.gz: a03bc5b178bf8065bdbd8a04eaf94ba627abbabe212c272ec64d782ba4edf804a22eae7e5c75275857501e22d23708eab6efe3521dc0d589a862ce01c61ee7a8
7
+ data.tar.gz: 28f60a6dc881c85b213a64c6881eca73fac7f18659a534e16a3bc6eff5c4013c09db9d635a79c2f3c59af90c5214311559335d989f37f35e401db0273610e29f
@@ -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.4.0)
4
+ belvo (0.6.2)
5
5
  faraday
6
6
  faraday_middleware
7
7
  typhoeus
@@ -34,9 +34,9 @@ GEM
34
34
  json (2.3.0)
35
35
  multipart-post (2.1.1)
36
36
  parallel (1.19.1)
37
- parser (2.7.1.0)
37
+ parser (2.7.1.2)
38
38
  ast (~> 2.4.0)
39
- public_suffix (4.0.4)
39
+ public_suffix (4.0.5)
40
40
  rainbow (3.0.0)
41
41
  rake (12.3.3)
42
42
  rexml (3.2.4)
@@ -44,15 +44,15 @@ GEM
44
44
  rspec-core (~> 3.9.0)
45
45
  rspec-expectations (~> 3.9.0)
46
46
  rspec-mocks (~> 3.9.0)
47
- rspec-core (3.9.1)
48
- rspec-support (~> 3.9.1)
49
- rspec-expectations (3.9.1)
47
+ rspec-core (3.9.2)
48
+ rspec-support (~> 3.9.3)
49
+ rspec-expectations (3.9.2)
50
50
  diff-lcs (>= 1.2.0, < 2.0)
51
51
  rspec-support (~> 3.9.0)
52
52
  rspec-mocks (3.9.1)
53
53
  diff-lcs (>= 1.2.0, < 2.0)
54
54
  rspec-support (~> 3.9.0)
55
- rspec-support (3.9.2)
55
+ rspec-support (3.9.3)
56
56
  rubocop (0.81.0)
57
57
  jaro_winkler (~> 1.5.1)
58
58
  parallel (~> 1.10)
@@ -61,7 +61,7 @@ GEM
61
61
  rexml
62
62
  ruby-progressbar (~> 1.7)
63
63
  unicode-display_width (>= 1.4.0, < 2.0)
64
- rubocop-rspec (1.38.1)
64
+ rubocop-rspec (1.39.0)
65
65
  rubocop (>= 0.68.1)
66
66
  ruby-progressbar (1.10.1)
67
67
  safe_yaml (1.0.5)
@@ -74,9 +74,9 @@ 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.25.0)
78
78
  sync
79
- typhoeus (1.3.1)
79
+ typhoeus (1.4.0)
80
80
  ethon (>= 0.9.0)
81
81
  unicode-display_width (1.7.0)
82
82
  webmock (3.8.3)
@@ -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,13 +7,19 @@ 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 password2 [rw] End-user secondary password, if any
10
12
  # @!attribute encryption_key [rw] Custom encryption key
11
13
  # @!attribute username_type [rw] Type of the username provided
12
14
  class LinkOptions < Faraday::Options.new(
13
15
  :access_mode,
14
16
  :token,
17
+ :username2,
18
+ :password2,
15
19
  :encryption_key,
16
- :username_type
20
+ :username_type,
21
+ :certificate,
22
+ :private_key
17
23
  )
18
24
  end
19
25
 
@@ -84,6 +90,16 @@ module Belvo
84
90
  )
85
91
  end
86
92
 
93
+ # @!class IncomeOptions < Faraday::Options
94
+ # Contains configurable properties of an Income
95
+ # @!attribute save_data [rw] Should data be persisted or not.
96
+ # @!attribute encryption_key [rw] Custom encryption key
97
+ class IncomeOptions < Faraday::Options.new(
98
+ :encryption_key,
99
+ :save_data
100
+ )
101
+ end
102
+
87
103
  # @!class InvoiceOptions < Faraday::Options
88
104
  # Contains configurable properties of an Invoice
89
105
  # @!attribute save_data [rw] Should data be persisted or not.
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'date'
4
4
  require 'belvo/options'
5
+ require 'belvo/utils'
5
6
 
6
7
  module Belvo
7
8
  # Represents a consumable REST resource from Belvo API
@@ -76,7 +77,6 @@ module Belvo
76
77
  # @param institution [String] Institution name
77
78
  # @param username [String] End-user username
78
79
  # @param password [String] End-user password
79
- # @param password2 [String, nil] End-user secondary password, if any
80
80
  # @param options [LinkOptions] Configurable properties
81
81
  # @return [Hash] created link details
82
82
  # @raise [RequestError] If response code is different than 2XX
@@ -84,19 +84,16 @@ module Belvo
84
84
  institution:,
85
85
  username:,
86
86
  password:,
87
- password2: nil,
88
87
  options: nil
89
88
  )
90
89
  options = LinkOptions.from(options)
90
+ options.certificate = Utils.read_file_to_b64(options.certificate)
91
+ options.private_key = Utils.read_file_to_b64(options.private_key)
91
92
  body = {
92
93
  institution: institution,
93
94
  username: username,
94
95
  password: password,
95
- password2: password2,
96
- token: options.token,
97
- encryption_key: options.encryption_key,
98
- access_mode: options.access_mode || AccessMode::SINGLE,
99
- username_type: options.username_type
96
+ access_mode: options.access_mode || AccessMode::SINGLE
100
97
  }.merge(options)
101
98
  body = clean body: body
102
99
  @session.post(@endpoint, body)
@@ -109,17 +106,34 @@ module Belvo
109
106
  # @param options [LinkOptions] Configurable properties
110
107
  # @return [Hash] link details
111
108
  # @raise [RequestError] If response code is different than 2XX
112
- def update(id:, password:, password2: nil, options: nil)
109
+ def update(id:, password: nil, password2: nil, options: nil)
113
110
  options = LinkOptions.from(options)
111
+ options.certificate = Utils.read_file_to_b64(options.certificate)
112
+ options.private_key = Utils.read_file_to_b64(options.private_key)
114
113
  body = {
115
114
  password: password,
116
115
  password2: password2,
117
116
  token: options.token,
118
- encryption_key: options.encryption_key
117
+ encryption_key: options.encryption_key,
118
+ username_type: options.username_type,
119
+ certificate: options.certificate,
120
+ private_key: options.private_key
119
121
  }.merge(options)
120
122
  body = clean body: body
121
123
  @session.put(@endpoint, id, body)
122
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
123
137
  end
124
138
 
125
139
  # An Account is the representation of a bank account inside a financial
@@ -267,6 +281,30 @@ module Belvo
267
281
  end
268
282
  end
269
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
+
270
308
  # An Invoice is the representation of an electronic invoice, that can be
271
309
  # received or sent, by a business or an individual and has been uploaded
272
310
  # to the fiscal institution website
@@ -373,4 +411,23 @@ module Belvo
373
411
  @endpoint = 'institutions/'
374
412
  end
375
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
376
433
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'base64'
4
+
5
+ # Class with helper functions
6
+ class Utils
7
+ def self.read_file_to_b64(path)
8
+ return if path.nil? || !File.file?(path)
9
+
10
+ data = File.open(path).read
11
+ Base64.encode64(data)
12
+ end
13
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Belvo
4
4
  # belvo-ruby current version
5
- VERSION = '0.4.0'
5
+ VERSION = '0.6.2'
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.4.0
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Belvo Finance S.L.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-28 00:00:00.000000000 Z
11
+ date: 2020-10-08 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: []
@@ -167,6 +167,7 @@ files:
167
167
  - lib/belvo/http.rb
168
168
  - lib/belvo/options.rb
169
169
  - lib/belvo/resources.rb
170
+ - lib/belvo/utils.rb
170
171
  - lib/belvo/version.rb
171
172
  homepage: https://github.com/belvo-finance/belvo-ruby
172
173
  licenses:
@@ -175,7 +176,7 @@ metadata:
175
176
  homepage_uri: https://github.com/belvo-finance/belvo-ruby
176
177
  source_code_uri: https://github.com/belvo-finance/belvo-ruby
177
178
  changelog_uri: https://github.com/belvo-finance/belvo-ruby/blob/master/README.md
178
- post_install_message:
179
+ post_install_message:
179
180
  rdoc_options: []
180
181
  require_paths:
181
182
  - lib
@@ -190,9 +191,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
191
  - !ruby/object:Gem::Version
191
192
  version: '0'
192
193
  requirements: []
193
- rubyforge_project:
194
- rubygems_version: 2.7.6
195
- signing_key:
194
+ rubygems_version: 3.1.4
195
+ signing_key:
196
196
  specification_version: 4
197
197
  summary: The Ruby gem for the Belvo API
198
198
  test_files: []