nubank_sdk 0.6.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: aec1c5da9cacf0f6fc08c659866de92d86bc4aeded018f50cd4647ad83d4a08b
4
- data.tar.gz: e8d379085b5e539eac996936bd53b696a9cfbfbc9415e7603baab93739149e3f
3
+ metadata.gz: 053f6750d8819dc5c05fa23831829106314f7002357d65083f45a234a28233f0
4
+ data.tar.gz: 827596b59873ca86d556323dda076f710ee9dc19494bba206ee53cd748fa62ff
5
5
  SHA512:
6
- metadata.gz: c186f8f64658205365a9a086ae7e10c4b506d5a67839bc89a534616c7387235960c4c5f13b30fe5099b528b62ee14c844b084ee98aca822efbb6c94014902c50
7
- data.tar.gz: e3dbe818c89e3ea593cbf2a34411559d1c6af531310f4eec930a254cdf411f9a05c711812a71896da023dbc322293202290fce2bdbc65749bc2ab72e5067a4d9
6
+ metadata.gz: bf061fa7d6423a5c356418a5e9b2a823fa4492766e5b6bb92503bca7118cd323ce220a1042863b715a4af2297547c0539f44de35e95dd4ee1e814accbd8935df
7
+ data.tar.gz: e103553e8c83693f918437f7d4ac7ae5d9121af6f88c71b759c1b0ef9878b0be84c81a9775b770b60b64bbabd9d59be52dca2a985a225fa51829594ab3ac249f
@@ -0,0 +1 @@
1
+ github: [Viserion77]
@@ -14,10 +14,10 @@ jobs:
14
14
 
15
15
  steps:
16
16
  - uses: actions/checkout@v3
17
- - name: Set up Ruby 2.6
17
+ - name: Set up Ruby 3.1
18
18
  uses: actions/setup-ruby@v1
19
19
  with:
20
- ruby-version: 2.6.x
20
+ ruby-version: 3.1.x
21
21
 
22
22
  - name: Publish to RubyGems
23
23
  run: |
@@ -0,0 +1,41 @@
1
+ name: Quality Inspector
2
+ on:
3
+ push:
4
+ branches: [ "develop" ]
5
+ pull_request:
6
+ branches: [ "develop" ]
7
+ jobs:
8
+ Rspec:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ matrix:
12
+ ruby-version: ['3.0']
13
+
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@ee2113536afb7f793eed4ce60e8d3b26db912da4 # v1.127.0
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ bundler-cache: true
21
+ - name: Run tests
22
+ run: bundle exec rspec
23
+ - uses: joshmfrankel/simplecov-check-action@main
24
+ with:
25
+ github_token: ${{ secrets.GITHUB_TOKEN }}
26
+
27
+ Rubocop:
28
+ runs-on: ubuntu-latest
29
+ strategy:
30
+ matrix:
31
+ ruby-version: ['3.0']
32
+
33
+ steps:
34
+ - uses: actions/checkout@v3
35
+ - name: Set up Ruby
36
+ uses: ruby/setup-ruby@ee2113536afb7f793eed4ce60e8d3b26db912da4 # v1.127.0
37
+ with:
38
+ ruby-version: ${{ matrix.ruby-version }}
39
+ bundler-cache: true
40
+ - name: Run rubocop
41
+ run: bundle exec rubocop --format=g
data/.rubocop.yml CHANGED
@@ -1,5 +1,2 @@
1
1
  require:
2
2
  - rubocop-rspec
3
-
4
- Style/BracesAroundHashParameters:
5
- Enabled: false
data/.travis.yml CHANGED
@@ -4,4 +4,4 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.3.3
7
- before_install: gem install bundler -v 1.17.3
7
+ before_install: gem install bundler -v 2.3.26
@@ -15,6 +15,7 @@
15
15
  "account",
16
16
  "github",
17
17
  "user",
18
- "credit"
18
+ "credit",
19
+ "utils"
19
20
  ]
20
21
  }
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nubank_sdk (0.6.0)
4
+ nubank_sdk (0.7.0)
5
5
  faraday (~> 2.7.1)
6
6
  json (~> 2.3)
7
7
 
@@ -16,23 +16,25 @@ GEM
16
16
  ast (2.4.2)
17
17
  concurrent-ruby (1.1.10)
18
18
  diff-lcs (1.5.0)
19
+ docile (1.4.0)
19
20
  factory_bot (4.8.2)
20
21
  activesupport (>= 3.0.0)
21
- faraday (2.7.1)
22
+ faraday (2.7.2)
22
23
  faraday-net_http (>= 2.0, < 3.1)
23
24
  ruby2_keywords (>= 0.0.4)
24
25
  faraday-net_http (3.0.2)
26
+ gem-release (2.2.2)
25
27
  i18n (1.12.0)
26
28
  concurrent-ruby (~> 1.0)
27
- jaro_winkler (1.5.4)
28
29
  json (2.6.2)
29
30
  minitest (5.15.0)
30
- parallel (1.19.2)
31
- parser (3.1.2.1)
31
+ parallel (1.22.1)
32
+ parser (3.1.3.0)
32
33
  ast (~> 2.4.1)
33
- powerpack (0.1.3)
34
34
  rainbow (3.1.1)
35
- rake (10.5.0)
35
+ rake (13.0.6)
36
+ regexp_parser (2.6.1)
37
+ rexml (3.2.5)
36
38
  rspec (3.11.0)
37
39
  rspec-core (~> 3.11.0)
38
40
  rspec-expectations (~> 3.11.0)
@@ -46,22 +48,35 @@ GEM
46
48
  diff-lcs (>= 1.2.0, < 2.0)
47
49
  rspec-support (~> 3.11.0)
48
50
  rspec-support (3.11.1)
49
- rubocop (0.57.2)
50
- jaro_winkler (~> 1.5.1)
51
+ rubocop (1.41.0)
52
+ json (~> 2.3)
51
53
  parallel (~> 1.10)
52
- parser (>= 2.5)
53
- powerpack (~> 0.1)
54
+ parser (>= 3.1.2.1)
54
55
  rainbow (>= 2.2.2, < 4.0)
56
+ regexp_parser (>= 1.8, < 3.0)
57
+ rexml (>= 3.2.5, < 4.0)
58
+ rubocop-ast (>= 1.23.0, < 2.0)
55
59
  ruby-progressbar (~> 1.7)
56
- unicode-display_width (~> 1.0, >= 1.0.1)
57
- rubocop-rspec (1.27.0)
58
- rubocop (>= 0.56.0)
60
+ unicode-display_width (>= 1.4.0, < 3.0)
61
+ rubocop-ast (1.24.0)
62
+ parser (>= 3.1.1.0)
63
+ rubocop-rspec (2.16.0)
64
+ rubocop (~> 1.33)
59
65
  ruby-progressbar (1.11.0)
60
66
  ruby2_keywords (0.0.5)
67
+ simplecov (0.21.2)
68
+ docile (~> 1.1)
69
+ simplecov-html (~> 0.11)
70
+ simplecov_json_formatter (~> 0.1)
71
+ simplecov-html (0.12.3)
72
+ simplecov-json (0.2.3)
73
+ json
74
+ simplecov
75
+ simplecov_json_formatter (0.1.4)
61
76
  thread_safe (0.3.6)
62
77
  tzinfo (1.2.10)
63
78
  thread_safe (~> 0.1)
64
- unicode-display_width (1.8.0)
79
+ unicode-display_width (2.3.0)
65
80
  webrick (1.7.0)
66
81
  yard (0.9.28)
67
82
  webrick (~> 1.7.0)
@@ -70,14 +85,17 @@ PLATFORMS
70
85
  ruby
71
86
 
72
87
  DEPENDENCIES
73
- bundler (~> 1.17)
88
+ bundler (~> 2.3.26)
74
89
  factory_bot (~> 4.8.2)
90
+ gem-release (~> 2.2.2)
75
91
  nubank_sdk!
76
- rake (~> 10.0)
92
+ rake (~> 13.0)
77
93
  rspec (~> 3.0)
78
- rubocop (~> 0.57.2)
79
- rubocop-rspec (~> 1.27.0)
94
+ rubocop (~> 1.41.0)
95
+ rubocop-rspec (~> 2.16.0)
96
+ simplecov (~> 0.21.2)
97
+ simplecov-json (~> 0.2.3)
80
98
  yard (~> 0.9.12)
81
99
 
82
100
  BUNDLED WITH
83
- 1.17.3
101
+ 2.3.26
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
- ![Gem](https://img.shields.io/gem/dt/nubank_sdk?color=%23701516&logo=ruby&logoColor=%23701516&style=for-the-badge)
1
+ # NubankSdk
2
2
 
3
- # NubankSdk (Work in progress)
3
+ [![Version](https://img.shields.io/gem/v/nubank_sdk?color=%23701516&logo=ruby&logoColor=%23701516&style=for-the-badge)](https://rubygems.org/gems/nubank_sdk)
4
+ [![Downloads](https://img.shields.io/gem/dt/nubank_sdk?color=%23701516&logo=ruby&logoColor=%23701516&style=for-the-badge)](https://rubygems.org/gems/nubank_sdk)
5
+ [![Quality Inspector](https://github.com/Viserion77/nubank_sdk/actions/workflows/quality-inspector.yml/badge.svg?branch=develop&&event=push)](https://github.com/Viserion77/nubank_sdk/actions/workflows/quality-inspector.yml?branch=develop)
4
6
 
5
7
  A gem to make it ease to monitorize your Nubank account.
6
8
 
7
- <!-- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/nubank_sdk`. To experiment with that code, run `bin/console` for an interactive prompt. -->
8
-
9
9
  ## Installation
10
10
 
11
11
  Add this line to your application's Gemfile:
@@ -16,11 +16,15 @@ gem 'nubank_sdk'
16
16
 
17
17
  And then execute:
18
18
 
19
- $ bundle
19
+ ```shell
20
+ bundle
21
+ ```
20
22
 
21
23
  Or install it yourself as:
22
24
 
23
- $ gem install nubank_sdk
25
+ ```shell
26
+ gem install nubank_sdk
27
+ ```
24
28
 
25
29
  ## Usage
26
30
 
@@ -28,13 +32,11 @@ Or install it yourself as:
28
32
  require 'nubank_sdk'
29
33
 
30
34
  # instance a nubank account object
31
- user = NubankSdk::User.new(cpf: '12345678909')
35
+ user = NubankSdk::User.new cpf: '12345678909'
32
36
  password = 'dracarys'
33
37
  ```
34
38
 
35
- > First time?
36
- >
37
- > authenticate the account
39
+ > First time? authenticate the account!
38
40
  >
39
41
  > ```ruby
40
42
  > # request an email code
@@ -46,27 +48,75 @@ password = 'dracarys'
46
48
  > user.auth.exchange_certs(email_code, password)
47
49
  > ```
48
50
  >
49
- ---
50
- >
51
- > Has a certificate?
52
- >
53
- > generate a access token
54
- >
55
- > ```ruby
56
- > user.auth.authenticate_with_certificate(password)
57
- > ```
51
+
52
+ Has a certificate? generate a access token :D
53
+ ```ruby
54
+ user.auth.authenticate_with_certificate(password)
55
+ ```
58
56
 
59
57
  get the account balance
60
58
 
61
59
  ```ruby
62
- user.account.balance # => 77.0
60
+ account_balance = user.account.balance # => 77.0
63
61
  ```
64
62
 
65
63
  ## Development
66
64
 
67
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
65
+ > <details>
66
+ >
67
+ > <summary>Prerequisites</summary>
68
+ >
69
+ > - Ruby 2.7.2
70
+ > - Bundler
71
+ > - git
72
+ >
73
+ > Clone the repository:
74
+ > ```shell
75
+ > git clone https://github.com/viserion77/nubank_sdk.git
76
+ > ```
77
+ >
78
+ > Install the dependencies:
79
+ > ```shell
80
+ > bundle install
81
+ > ```
82
+ >
83
+ > </details>
84
+
85
+ - Create a new branch for your feature or bugfix
86
+ - Commit your changes, and push your branch to GitHub
87
+ - Open a Pull Request to the `develop` branch
88
+ - Write a description for your PR, and how to test it!
89
+ - Wait for the CI to run the tests and check the code quality
90
+ - If everything is ok, your PR will be merged
91
+
92
+ ## Deployment
68
93
 
69
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
94
+ > <details>
95
+ >
96
+ > <summary>Prerequisites</summary>
97
+ >
98
+ > - Ruby 2.7.2
99
+ > - Bundler
100
+ > - git
101
+ >
102
+ > Clone the repository:
103
+ > ```shell
104
+ > git clone https://github.com/viserion77/nubank_sdk.git
105
+ > ```
106
+ >
107
+ > Install the dependencies:
108
+ > ```shell
109
+ > bundle install
110
+ > ```
111
+ >
112
+ > </details>
113
+
114
+ - Create a new branch from `develop` for bumping the version
115
+ - run `bundle exec rake start_new_release` to bump the version and a new tag
116
+ - Open a Pull Request to the `main` branch
117
+ - If everything is ok, your PR will be merged
118
+ - After the merge, the CI will publish the new version to rubygems.org
119
+ - If all goes well, you need release the new tag to GitHub. ([tags](https://github.com/Viserion77/nubank_sdk/tags))
70
120
 
71
121
  ## Contributing
72
122
 
data/Rakefile CHANGED
@@ -1,26 +1,31 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
  Bundler::GemHelper.install_tasks
6
8
 
7
- task :default => :spec
9
+ task default: :spec
8
10
 
9
11
  task :start_new_release do
10
12
  bump = ENV['BUMP'] || 'patch'
11
13
 
12
- sh 'gem install gem-release'
13
14
  sh "gem bump --version #{bump}"
14
-
15
+
15
16
  sh 'bundle'
16
17
  Rake::Task[:build].invoke
17
-
18
+
18
19
  sh 'git add .'
19
- sh "git commit -m \"build(version): :bookmark: bump #{bump}\""
20
+ sh "git commit -m \"build(version): :bookmark: bump #{bump}\""
20
21
  sh 'git push'
21
22
 
23
+ Rake::Task[:generate_git_tag].invoke
24
+ end
25
+
26
+ task :generate_git_tag do
22
27
  version = NubankSdk::VERSION
23
28
  version_tag = "v#{version}"
24
29
  sh "git tag -a #{version_tag} -m \"Version #{version}\""
25
30
  sh 'git push --tags'
26
- end
31
+ end
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "nubank_sdk"
4
+ require 'bundler/setup'
5
+ require 'nubank_sdk'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "nubank_sdk"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -0,0 +1,44 @@
1
+ {
2
+ viewer {
3
+ savingsAccount {
4
+ id
5
+ feed {
6
+ id
7
+ __typename
8
+ title
9
+ detail
10
+ postDate
11
+ ... on TransferInEvent {
12
+ amount
13
+ originAccount {
14
+ name
15
+ }
16
+ }
17
+ ... on TransferOutEvent {
18
+ amount
19
+ destinationAccount {
20
+ name
21
+ }
22
+ }
23
+ ... on TransferOutReversalEvent {
24
+ amount
25
+ }
26
+ ... on BillPaymentEvent {
27
+ amount
28
+ }
29
+ ... on DebitPurchaseEvent {
30
+ amount
31
+ }
32
+ ... on BarcodePaymentEvent {
33
+ amount
34
+ }
35
+ ... on DebitWithdrawalFeeEvent {
36
+ amount
37
+ }
38
+ ... on DebitWithdrawalEvent {
39
+ amount
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
@@ -1,4 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NubankSdk
4
+ #
5
+ # Returns the account statement
6
+ #
2
7
  class Account
3
8
  #
4
9
  # Returns the account statement
@@ -24,8 +29,26 @@ module NubankSdk
24
29
  }
25
30
  )
26
31
 
27
- data = NubankSdk::Client.get_body(response)
32
+ data = Client.get_body(response)
28
33
  data[:data][:viewer][:savingsAccount][:currentSavingsBalance][:netAmount]
29
34
  end
35
+
36
+ #
37
+ # Returns the account feed
38
+ #
39
+ # @return [Array<Hash>]
40
+ def feed
41
+ query_url = @api_routes.entrypoint(path: :ssl, entrypoint: :query)
42
+
43
+ response = @connection.post(
44
+ query_url, {
45
+ 'variables': {},
46
+ 'query': Utils.read_graphql_query('account', 'feed')
47
+ }
48
+ )
49
+
50
+ data = Client.get_body(response)
51
+ data[:data][:viewer][:savingsAccount][:feed]
52
+ end
30
53
  end
31
54
  end
@@ -1,9 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'json'
3
5
 
4
6
  module NubankSdk
7
+ #
8
+ # Controller for the ApiRoutes class
9
+ #
5
10
  class ApiRoutes
6
- DISCOVERY_URI = 'https://prod-s0-webapp-proxy.nubank.com.br'.freeze
11
+ DISCOVERY_URI = 'https://prod-s0-webapp-proxy.nubank.com.br'
7
12
  PROXY_PATHS = {
8
13
  default: '/api/discovery',
9
14
  app: '/api/app/discovery',
@@ -28,7 +33,7 @@ module NubankSdk
28
33
  # @param [Symbol] type, :splitted or :full
29
34
  #
30
35
  # @return [String, Array]
31
- def entrypoint(path: :default, entrypoint:, type: :full)
36
+ def entrypoint(entrypoint:, path: :default, type: :full)
32
37
  discovery(path) if @url_discovery_map[path].nil?
33
38
 
34
39
  url = @url_discovery_map[path][entrypoint]
@@ -47,7 +52,7 @@ module NubankSdk
47
52
  # @param [String] url
48
53
  #
49
54
  # @return [Hash]
50
- def add_entrypoint(path: :default, entrypoint:, url:)
55
+ def add_entrypoint(entrypoint:, url:, path: :default)
51
56
  path_map = @url_discovery_map[path] || {}
52
57
  path_map[entrypoint] = url
53
58
 
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'securerandom'
2
4
 
3
5
  module NubankSdk
6
+ #
7
+ # Auth method to connect with the nubank api
8
+ #
4
9
  class Auth
5
10
  attr_reader :refresh_token, :refresh_before, :access_token
6
11
 
@@ -14,7 +19,7 @@ module NubankSdk
14
19
  def initialize(cpf:, device_id: nil, api_routes: nil, connection_adapter: nil)
15
20
  @cpf = cpf
16
21
  @device_id = device_id || generate_device_id
17
- @api_routes = api_routes || NubankSdk::ApiRoutes.new
22
+ @api_routes = api_routes || ApiRoutes.new
18
23
 
19
24
  @connection_adapter = connection_adapter
20
25
  end
@@ -24,7 +29,7 @@ module NubankSdk
24
29
  #
25
30
  # @return [NubankSdk::Certificate] the certificate instance
26
31
  def certificate
27
- @certificate ||= NubankSdk::Certificate.new(@cpf)
32
+ @certificate ||= Certificate.new(@cpf)
28
33
  end
29
34
 
30
35
  #
@@ -39,9 +44,8 @@ module NubankSdk
39
44
 
40
45
  response_hash = Client.get_body(response)
41
46
 
42
- @refresh_token = response_hash[:refresh_token]
43
- @refresh_before = response_hash[:refresh_before]
44
- @access_token = response_hash[:access_token]
47
+ @refresh_token, @refresh_before, @access_token = response_hash.values_at(:refresh_token, :refresh_before,
48
+ :access_token)
45
49
 
46
50
  update_api_routes(response_hash[:_links])
47
51
  end
@@ -66,11 +70,9 @@ module NubankSdk
66
70
  #
67
71
  # @return [File] the certificate file
68
72
  def exchange_certs(email_code, password)
69
- response = default_connection.post(@gen_certificate_path, payload(password).merge({
70
- code: email_code,
71
- 'encrypted-code': @encrypted_code
72
- })
73
- )
73
+ new_payload = payload(password)
74
+ .merge({ code: email_code, 'encrypted-code': @encrypted_code })
75
+ response = default_connection.post(@gen_certificate_path, new_payload)
74
76
 
75
77
  response_data = Client.get_body(response)
76
78
  certificate.process_decoded(key, response_data[:certificate])
@@ -89,12 +91,12 @@ module NubankSdk
89
91
  parsed = {}
90
92
 
91
93
  chunks.each do |chunk|
92
- key, value = chunk.split('=')
93
- key = key.strip().gsub(' ', '_').gsub('-', '_').to_sym
94
- value = value.gsub('"', '')
95
- parsed[key] = value
94
+ key, value = chunk.split('=')
95
+ key = key.strip.gsub(' ', '_').gsub('-', '_').to_sym
96
+ value = value.gsub('"', '')
97
+ parsed[key] = value
96
98
  end
97
-
99
+
98
100
  parsed
99
101
  end
100
102
 
@@ -110,7 +112,7 @@ module NubankSdk
110
112
  password: password,
111
113
  public_key: key.public_key.to_pem,
112
114
  device_id: @device_id,
113
- model: "NubankSdk Client (#@device_id)",
115
+ model: "NubankSdk Client (#{@device_id})"
114
116
  }
115
117
  end
116
118
 
@@ -145,16 +147,12 @@ module NubankSdk
145
147
  #
146
148
  # @return [NubankSdk::ApiRoutes] the api routes with the new links
147
149
  def update_api_routes(links)
148
- feed_url_keys = [:events, :magnitude]
149
- bills_url_keys = [:bills_summary]
150
- customer_url_keys = [:customer]
151
- account_url_keys = [:account]
152
150
  @api_routes.add_entrypoint(path: :ssl, entrypoint: :revoke_token, url: links[:revoke_token][:href])
153
151
  @api_routes.add_entrypoint(path: :ssl, entrypoint: :query, url: links[:ghostflame][:href])
154
- @api_routes.add_entrypoint(path: :ssl, entrypoint: :feed, url: find_url(feed_url_keys, links))
155
- @api_routes.add_entrypoint(path: :ssl, entrypoint: :bills, url: find_url(bills_url_keys, links))
156
- @api_routes.add_entrypoint(path: :ssl, entrypoint: :customer, url: find_url(customer_url_keys, links))
157
- @api_routes.add_entrypoint(path: :ssl, entrypoint: :account, url: find_url(account_url_keys, links))
152
+ @api_routes.add_entrypoint(path: :ssl, entrypoint: :feed, url: find_url(%i[events magnitude], links))
153
+ @api_routes.add_entrypoint(path: :ssl, entrypoint: :bills, url: find_url([:bills_summary], links))
154
+ @api_routes.add_entrypoint(path: :ssl, entrypoint: :customer, url: find_url([:customer], links))
155
+ @api_routes.add_entrypoint(path: :ssl, entrypoint: :account, url: find_url([:account], links))
158
156
  @api_routes
159
157
  end
160
158
 
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'openssl'
2
4
 
3
5
  module NubankSdk
6
+ #
7
+ # Controller of certifications
8
+ #
4
9
  class Certificate
5
- FILES_PATH = './certificates/'.freeze
10
+ FILES_PATH = './certificates/'
6
11
 
7
12
  #
8
13
  # Controller of certifications
@@ -51,11 +56,21 @@ module NubankSdk
51
56
  #
52
57
  # @return [File]
53
58
  def save(p12)
59
+ create_folder
60
+
54
61
  File.open("#{FILES_PATH}#{@cpf}.p12", 'wb') do |file|
55
62
  file.write p12.to_der
56
63
  end
57
64
  end
58
65
 
66
+ # @!visibility private
67
+ # Create certificates folder
68
+ #
69
+ # @return [File]
70
+ def create_folder
71
+ Dir.mkdir(FILES_PATH) unless Dir.exist?(FILES_PATH)
72
+ end
73
+
59
74
  # @!visibility private
60
75
  # crypt key and certificate to pkcs12
61
76
  #
@@ -1,7 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'json'
3
5
 
4
6
  module NubankSdk
7
+ #
8
+ # Wrapper for Faraday::Connection
9
+ #
5
10
  module Client
6
11
  #
7
12
  # Parse the response body symbolizing keys
@@ -13,6 +18,9 @@ module NubankSdk
13
18
  JSON.parse(response.body, symbolize_names: true)
14
19
  end
15
20
 
21
+ #
22
+ # create a new connection with the given url in Faraday
23
+ #
16
24
  class HTTP
17
25
  #
18
26
  # create a new connection with the given url in Faraday
@@ -51,6 +59,9 @@ module NubankSdk
51
59
  end
52
60
  end
53
61
 
62
+ #
63
+ # Create a new instance of Faraday::Connection with client certificate
64
+ #
54
65
  class HTTPS
55
66
  attr_accessor :headers
56
67
 
@@ -1,4 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NubankSdk
4
+ #
5
+ # Returns the credit statement
6
+ #
2
7
  class Credit
3
8
  #
4
9
  # Returns the credit statement
@@ -22,5 +27,18 @@ module NubankSdk
22
27
 
23
28
  response_hash[:account][:balances]
24
29
  end
30
+
31
+ #
32
+ # Returns the credit feed
33
+ #
34
+ # @return [Array<Hash>] the credit feed
35
+ def feed
36
+ feed_url = @api_routes.entrypoint(path: :ssl, entrypoint: :feed)
37
+
38
+ response = @connection.get(feed_url)
39
+
40
+ data = Client.get_body(response)
41
+ data[:events]
42
+ end
25
43
  end
26
44
  end
@@ -1,4 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NubankSdk
4
+ #
5
+ # Controller of user actions in nubank
6
+ #
2
7
  class User
3
8
  #
4
9
  # Controller of user actions in nubank
@@ -15,7 +20,7 @@ module NubankSdk
15
20
  #
16
21
  # @return [NubankSdk::Auth]
17
22
  def auth
18
- @auth ||= NubankSdk::Auth.new(
23
+ @auth ||= Auth.new(
19
24
  cpf: @cpf,
20
25
  api_routes: api_routes,
21
26
  connection_adapter: @connection_adapter
@@ -27,7 +32,7 @@ module NubankSdk
27
32
  #
28
33
  # @return [NubankSdk::Account]
29
34
  def account
30
- @account ||= NubankSdk::Account.new(connection: connection, api_routes: api_routes)
35
+ @account ||= Account.new(connection: connection, api_routes: api_routes)
31
36
  end
32
37
 
33
38
  #
@@ -35,7 +40,7 @@ module NubankSdk
35
40
  #
36
41
  # @return [NubankSdk::Credit]
37
42
  def credit
38
- @credit ||= NubankSdk::Credit.new(connection: connection, api_routes: api_routes)
43
+ @credit ||= Credit.new(connection: connection, api_routes: api_routes)
39
44
  end
40
45
 
41
46
  #
@@ -43,7 +48,7 @@ module NubankSdk
43
48
  #
44
49
  # @return [NubankSdk::ApiRoutes]
45
50
  def api_routes
46
- @api_routes ||= NubankSdk::ApiRoutes.new
51
+ @api_routes ||= ApiRoutes.new
47
52
  end
48
53
 
49
54
  private
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NubankSdk
4
+ #
5
+ # Utils
6
+ module Utils
7
+ #
8
+ # read graphQL query from file in ../graphql/{path}/{query}.gql
9
+ #
10
+ # @param [String] path - path to the query account, credit
11
+ # @param [String] query - query name
12
+ #
13
+ # @return [String]
14
+ def self.read_graphql_query(path, query)
15
+ File.read(File.join('.', 'lib', 'graphql', path, "#{query}.gql"))
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NubankSdk
2
- VERSION = "0.6.0"
4
+ VERSION = '0.7.0'
3
5
  end
data/lib/nubank_sdk.rb CHANGED
@@ -1,11 +1,14 @@
1
- require "nubank_sdk/account"
2
- require "nubank_sdk/api_routes"
3
- require "nubank_sdk/auth"
4
- require "nubank_sdk/certificate"
5
- require "nubank_sdk/credit"
6
- require "nubank_sdk/client"
7
- require "nubank_sdk/user"
8
- require "nubank_sdk/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'nubank_sdk/account'
4
+ require 'nubank_sdk/api_routes'
5
+ require 'nubank_sdk/auth'
6
+ require 'nubank_sdk/certificate'
7
+ require 'nubank_sdk/credit'
8
+ require 'nubank_sdk/client'
9
+ require 'nubank_sdk/user'
10
+ require 'nubank_sdk/version'
11
+ require 'nubank_sdk/utils'
9
12
 
10
13
  module NubankSdk
11
14
  class Error < StandardError; end
data/nubank_sdk.gemspec CHANGED
@@ -1,34 +1,40 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "nubank_sdk/version"
5
+ require 'nubank_sdk/version'
4
6
 
5
7
  Gem::Specification.new do |spec|
6
- spec.name = "nubank_sdk"
8
+ spec.name = 'nubank_sdk'
7
9
  spec.version = NubankSdk::VERSION
8
- spec.authors = ["Viserion77"]
9
- spec.email = ["jeferson.a.oficial@gmail.com"]
10
+ spec.authors = ['Viserion77']
11
+ spec.email = ['jeferson.a.oficial@gmail.com']
10
12
 
11
- spec.summary = %q{A gem to make it ease to monitorize your Nubank account.}
12
- spec.description = %q{Monitorize balances, recent transactions, credit limit etc...}
13
- spec.homepage = "https://github.com/Viserion77/nubank_sdk"
13
+ spec.summary = 'A gem to make it ease to monitorize your Nubank account.'
14
+ spec.description = 'Monitorize balances, recent transactions, credit limit etc...'
15
+ spec.homepage = 'https://github.com/Viserion77/nubank_sdk'
16
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
14
17
 
15
18
  # Specify which files should be added to the gem when it is released.
16
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
17
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
22
  end
20
- spec.bindir = "exe"
23
+ spec.bindir = 'exe'
21
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
25
+ spec.require_paths = ['lib']
23
26
 
24
- spec.add_development_dependency "bundler", "~> 1.17"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "rubocop", "~> 0.57.2"
28
- spec.add_development_dependency "rubocop-rspec", "~> 1.27.0"
29
- spec.add_development_dependency "factory_bot", "~> 4.8.2"
30
- spec.add_development_dependency "yard", "~> 0.9.12"
27
+ spec.add_development_dependency 'bundler', '~> 2.3.26'
28
+ spec.add_development_dependency 'factory_bot', '~> 4.8.2'
29
+ spec.add_development_dependency 'gem-release', '~> 2.2.2'
30
+ spec.add_development_dependency 'rake', '~> 13.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.0'
32
+ spec.add_development_dependency 'rubocop', '~> 1.41.0'
33
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.16.0'
34
+ spec.add_development_dependency 'simplecov', '~> 0.21.2'
35
+ spec.add_development_dependency 'simplecov-json', '~> 0.2.3'
36
+ spec.add_development_dependency 'yard', '~> 0.9.12'
31
37
 
32
- spec.add_dependency "faraday", "~> 2.7.1"
33
- spec.add_dependency "json", "~> 2.3"
38
+ spec.add_dependency 'faraday', '~> 2.7.1'
39
+ spec.add_dependency 'json', '~> 2.3'
34
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nubank_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viserion77
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-03 00:00:00.000000000 Z
11
+ date: 2023-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: 2.3.26
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
- version: '1.17'
26
+ version: 2.3.26
27
+ - !ruby/object:Gem::Dependency
28
+ name: factory_bot
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.8.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.8.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: gem-release
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.2.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.2.2
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '10.0'
61
+ version: '13.0'
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '10.0'
68
+ version: '13.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rspec
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -58,42 +86,56 @@ dependencies:
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.57.2
89
+ version: 1.41.0
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.57.2
96
+ version: 1.41.0
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rubocop-rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: 1.27.0
103
+ version: 2.16.0
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: 1.27.0
110
+ version: 2.16.0
83
111
  - !ruby/object:Gem::Dependency
84
- name: factory_bot
112
+ name: simplecov
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: 4.8.2
117
+ version: 0.21.2
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: 4.8.2
124
+ version: 0.21.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov-json
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.2.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.2.3
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: yard
99
141
  requirement: !ruby/object:Gem::Requirement
@@ -143,7 +185,9 @@ executables: []
143
185
  extensions: []
144
186
  extra_rdoc_files: []
145
187
  files:
188
+ - ".github/FUNDING.yml"
146
189
  - ".github/workflows/gem-push.yml"
190
+ - ".github/workflows/quality-inspector.yml"
147
191
  - ".gitignore"
148
192
  - ".rspec"
149
193
  - ".rubocop.yml"
@@ -157,6 +201,7 @@ files:
157
201
  - bin/console
158
202
  - bin/setup
159
203
  - certificates/.gitkeep
204
+ - lib/graphql/account/feed.gql
160
205
  - lib/nubank_sdk.rb
161
206
  - lib/nubank_sdk/account.rb
162
207
  - lib/nubank_sdk/api_routes.rb
@@ -165,6 +210,7 @@ files:
165
210
  - lib/nubank_sdk/client.rb
166
211
  - lib/nubank_sdk/credit.rb
167
212
  - lib/nubank_sdk/user.rb
213
+ - lib/nubank_sdk/utils.rb
168
214
  - lib/nubank_sdk/version.rb
169
215
  - nubank_sdk.gemspec
170
216
  homepage: https://github.com/Viserion77/nubank_sdk
@@ -178,14 +224,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
178
224
  requirements:
179
225
  - - ">="
180
226
  - !ruby/object:Gem::Version
181
- version: '0'
227
+ version: 2.7.0
182
228
  required_rubygems_version: !ruby/object:Gem::Requirement
183
229
  requirements:
184
230
  - - ">="
185
231
  - !ruby/object:Gem::Version
186
232
  version: '0'
187
233
  requirements: []
188
- rubygems_version: 3.0.3.1
234
+ rubygems_version: 3.3.26
189
235
  signing_key:
190
236
  specification_version: 4
191
237
  summary: A gem to make it ease to monitorize your Nubank account.