ibanity 1.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0e37b469bd141088935b144204e2522c25f28657
4
- data.tar.gz: 5c3206720d78551e9de27dc7d33c6d8986ff9a0d
2
+ SHA256:
3
+ metadata.gz: 750cf05359ce3376249cd8c3854adc897728ee99905539f959ae3991295dca9d
4
+ data.tar.gz: 5b3fb64906c906678ba6c9d4de8a017e47129e7db49d93da17abdd822e48e96e
5
5
  SHA512:
6
- metadata.gz: '09e62fcb6e64df961c1bdc5812a15cdcb521f808c34b9ad2876279618495b460939e99543abb61f5ac0378a2c495a2959e0b58519d1c0a00e190b60545ec7199'
7
- data.tar.gz: d5d0c2a422f60bd89b6cc224f33f54f76ebec8848976937751737ecb8bd2c25e675d6099f19d3487517428c5dc85fe61c920e83a48dd2bfb7e5946bcb725b45b
6
+ metadata.gz: 80171748c7786074541ec03a8cb29e375e88cd47ad420f1315f2241b45d067ec7a2fc015e426eee8ff2c020154c592d7dceb3f47c473276fa4ebd2aa0ab1ef64
7
+ data.tar.gz: 98bbc8f9ee5cf3b879dfd744f97bc27008098d2a5506d16bcbec18151ecfe67386545ad8d5b9bd625dd0d84b3f26fe6672c22e0f36798eb9632ab29cac055ec9
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ script: bundle exec rspec
3
+ deploy:
4
+ provider: rubygems
5
+ api_key:
6
+ secure: pfXgGXH/AZEG3HMiaJPmJ7fck6Z3Hj0y7TU5TwvLAtKuBy6hlLT67ne/VfeBZQKa9d7eerr9PFP1hvLjZppScZMMOTtjBTvwpchkcUDwCxHx5GzS/jRnBF+uYHIza2p4Wq8yIPug7UrZ0qyq5VOG45R/nC/fPm2Ht2T7heqF5VgRaDGrN7Fq3zXn7duiYhTy02nDXorZ/kEAjnwdwDtXWyVFq8wr4inTExYrDP9/M57qx5TrkgWmcQ7JrvO2KfLDMJqAxI8lNoaPl5dAi7q1XWqqSVay7h9OAnP4UfvnvAc106lG6nHfTQig1krTfxRAvtHlPQjSlFkL+0qfBPBz1C/ex221O3NsNBYmI/mJ45lcNhqJbnkV2VEAEgUoe4ZFfKUUczLfnVxIPjoQmHMwLwfEO4g8/Hz/I3L7bvebgfzGGMDpmN6ERZRJmhutE6K5cL80ghoLs6ExJLoqHi1qvdBSkM2IyE4Yo+lob/hKU1IBL1w13T2h3EHapBh3kKn+jBzu/y5nXTEteBHbMP8j2zxFiihVBJEKPXhg/iU8WHLI6HZgWJkOc9ZH3hS7CN3VELK7fVZp9jaPAKaKihdvxQ0z3gCPFL+E6rYKsBPYqXE6qDsSQswhqTN15W0eVQqK8fDXkZmW0lSGvi2IJvL0CjIaahfB2GaapTtqOwar7sc=
7
+ on:
8
+ tags: true
9
+ gem: ibanity
10
+ skip_cleanup: true
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## 1.0.1
4
+
5
+ ### Enhancements
6
+
7
+ * Improve debugging by logging the `ibanity_request_id` header from the response in case of error
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/ibanity/ibanity-ruby.svg?branch=master)](https://travis-ci.org/ibanity/ibanity-ruby)
2
+
1
3
  # Ibanity Ruby Library
2
4
 
3
5
  The Ibanity Ruby Library provides convenient wrappers around the Ibanity API. The object attributes are dynamically defined based on the API response, supporting minor API changes seamlessly.
@@ -0,0 +1,41 @@
1
+ module Ibanity
2
+ module Consent
3
+ class Consent < Ibanity::BaseResource
4
+ def self.create(idempotency_key: nil, **attributes)
5
+ path = Ibanity.consent_api_schema["consents"].gsub("{consentId}", "")
6
+ uri = Ibanity.client.build_uri(path)
7
+ create_by_uri(uri: uri, resource_type: "consent", attributes: attributes, idempotency_key: idempotency_key)
8
+ end
9
+
10
+ def self.list(**query_params)
11
+ path = Ibanity.consent_api_schema["consents"].gsub("{consentId}", "")
12
+ uri = Ibanity.client.build_uri(path)
13
+ list_by_uri(uri: uri, query_params: query_params)
14
+ end
15
+
16
+ def self.find(id:)
17
+ path = Ibanity.consent_api_schema["consents"].gsub("{consentId}", id)
18
+ uri = Ibanity.client.build_uri(path)
19
+ find_by_uri(uri: uri)
20
+ end
21
+
22
+ def self.validate(id:, idempotency_key: nil)
23
+ path = Ibanity.consent_api_schema["consent"]["validations"].gsub("{consentId}", id)
24
+ uri = Ibanity.client.build_uri(path)
25
+ create_by_uri(uri: uri, resource_type: "consent", attributes: [], idempotency_key: idempotency_key)
26
+ end
27
+
28
+ def self.revoke(id:, idempotency_key: nil)
29
+ path = Ibanity.consent_api_schema["consent"]["revocations"].gsub("{consentId}", id)
30
+ uri = Ibanity.client.build_uri(path)
31
+ create_by_uri(uri: uri, resource_type: "consent", attributes: [], idempotency_key: idempotency_key)
32
+ end
33
+
34
+ def self.delete(id:)
35
+ path = Ibanity.consent_api_schema["consents"].gsub("{consentId}", id)
36
+ uri = Ibanity.client.build_uri(path)
37
+ destroy_by_uri(uri: uri)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ module Ibanity
2
+ module Consent
3
+ class ProcessingOperation < Ibanity::BaseResource
4
+ def self.create(consent_id:, idempotency_key: nil, **attributes)
5
+ path = Ibanity.consent_api_schema["consent"]["processingOperations"]
6
+ .gsub("{consentId}", consent_id)
7
+ .gsub("{processingOperationId}", "")
8
+ uri = Ibanity.client.build_uri(path)
9
+ create_by_uri(uri: uri, resource_type: "processingOperation", attributes: attributes, idempotency_key: idempotency_key)
10
+ end
11
+
12
+ def self.list(consent_id:, **query_params)
13
+ path = Ibanity.consent_api_schema["consent"]["processingOperations"]
14
+ .gsub("{consentId}", consent_id)
15
+ .gsub("{processingOperationId}", "")
16
+ uri = Ibanity.client.build_uri(path)
17
+ list_by_uri(uri: uri, query_params: query_params)
18
+ end
19
+
20
+ def self.find(id:, consent_id:)
21
+ path = Ibanity.sandbox_api_schema["consent"]["processingOperations"]
22
+ .gsub("{consentId}", consent_id)
23
+ .gsub("{processingOperationId}", id)
24
+ uri = Ibanity.client.build_uri(path)
25
+ find_by_uri(uri: uri)
26
+ end
27
+
28
+ def self.revoke(id:, consent_id:, idempotency_key: nil)
29
+ path = Ibanity.consent_api_schema["consent"]["processingOperation"]["revocations"]
30
+ .gsub("{consentId}", consent_id)
31
+ .gsub("{processingOperationId}", id)
32
+ uri = Ibanity.client.build_uri(path)
33
+ create_by_uri(uri: uri, resource_type: "processingOperation", attributes: [], idempotency_key: idempotency_key)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -6,8 +6,8 @@ module Ibanity
6
6
  arguments = [
7
7
  ["grant_type", "refresh_token"],
8
8
  ["refresh_token", refresh_token],
9
- ["client_id", Ibanity.client.client_id],
10
- ["client_secret", Ibanity.client.client_secret]
9
+ ["client_id", Ibanity.client.isabel_connect_client_id],
10
+ ["client_secret", Ibanity.client.isabel_connect_client_secret]
11
11
  ]
12
12
  payload = URI.encode_www_form(arguments)
13
13
  create_by_uri(uri: uri, payload: payload, idempotency_key: idempotency_key)
@@ -0,0 +1,10 @@
1
+ module Ibanity
2
+ module IsabelConnect
3
+ class IntradayTransaction < Ibanity::BaseResource
4
+ def self.list(account_id:, access_token:, headers: nil, **query_params)
5
+ uri = Ibanity.isabel_connect_api_schema["account"]["intradayTransactions"].sub("{accountId}", account_id)
6
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: access_token, headers: headers)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -6,8 +6,8 @@ module Ibanity
6
6
  arguments = [
7
7
  ["grant_type", "authorization_code"],
8
8
  ["code", authorization_code],
9
- ["client_id", Ibanity.client.client_id],
10
- ["client_secret", Ibanity.client.client_secret],
9
+ ["client_id", Ibanity.client.isabel_connect_client_id],
10
+ ["client_secret", Ibanity.client.isabel_connect_client_secret],
11
11
  ["redirect_uri", redirect_uri]
12
12
  ]
13
13
  payload = URI.encode_www_form(arguments)
@@ -18,8 +18,8 @@ module Ibanity
18
18
  uri = Ibanity.isabel_connect_api_schema["oAuth2"]["refreshTokens"]["revoke"]
19
19
  arguments = [
20
20
  ["token", token],
21
- ["client_id", Ibanity.client.client_id],
22
- ["client_secret", Ibanity.client.client_secret]
21
+ ["client_id", Ibanity.client.isabel_connect_client_id],
22
+ ["client_secret", Ibanity.client.isabel_connect_client_secret]
23
23
  ]
24
24
  payload = URI.encode_www_form(arguments)
25
25
  create_by_uri(uri: uri, payload: payload)
@@ -1,7 +1,8 @@
1
1
  module Ibanity
2
2
  class OAuthResource < OpenStruct
3
- def self.create_by_uri(uri:, payload:, idempotency_key: nil)
4
- raw_item = Ibanity.client.post(uri: uri, payload: payload, json: false, idempotency_key: idempotency_key)
3
+ def self.create_by_uri(uri:, payload:, idempotency_key: nil, headers: nil)
4
+ raw_item = Ibanity.client.post(uri: uri, payload: payload, json: false, idempotency_key: idempotency_key, headers: headers)
5
+ raw_item = {} if raw_item == ""
5
6
  new(raw_item)
6
7
  end
7
8
 
@@ -0,0 +1,15 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class Account < Ibanity::BaseResource
4
+ def self.list(access_token:, **query_params)
5
+ uri = Ibanity.ponto_connect_api_schema["accounts"].sub("{accountId}", "")
6
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.find(access_token:, id:)
10
+ uri = Ibanity.ponto_connect_api_schema["accounts"].sub("{accountId}", id)
11
+ find_by_uri(uri: uri, customer_access_token: access_token)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class FinancialInstitution < Ibanity::BaseResource
4
+ def self.list(access_token: nil, **query_params)
5
+ uri = Ibanity.ponto_connect_api_schema["financialInstitutions"].sub("{financialInstitutionId}", "")
6
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.find(access_token: nil, id:)
10
+ uri = Ibanity.ponto_connect_api_schema["financialInstitutions"].sub("{financialInstitutionId}", id)
11
+ find_by_uri(uri: uri, customer_access_token: access_token)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class Payment < Ibanity::BaseResource
4
+ def self.find(access_token:, account_id:, id:)
5
+ uri = Ibanity.ponto_connect_api_schema["account"]["payments"].sub("{accountId}", account_id).sub("{paymentId}", id)
6
+ find_by_uri(uri: uri, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.create(account_id:, access_token: nil, **attributes)
10
+ uri = Ibanity.ponto_connect_api_schema["account"]["payments"].gsub("{accountId}", account_id).gsub("{paymentId}", "")
11
+ create_by_uri(uri: uri, resource_type: "payment", attributes: attributes, customer_access_token: access_token)
12
+ end
13
+
14
+ def self.delete(id:, account_id:, access_token:)
15
+ uri = Ibanity.ponto_connect_api_schema["account"]["payments"].gsub("{accountId}", account_id).gsub("{paymentId}", id)
16
+ destroy_by_uri(uri: uri, customer_access_token: access_token)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class Synchronization < Ibanity::BaseResource
4
+ def self.create(access_token:, **attributes)
5
+ uri = Ibanity.ponto_connect_api_schema["synchronizations"].sub("{synchronizationId}", "")
6
+ create_by_uri(uri: uri, resource_type: "synchronization", attributes: attributes, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.find(id:, access_token:)
10
+ uri = Ibanity.ponto_connect_api_schema["synchronizations"].sub("{synchronizationId}", id)
11
+ find_by_uri(uri: uri, customer_access_token: access_token)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class Token < Ibanity::OAuthResource
4
+ def self.create(refresh_token: nil, authorization_code: nil, redirect_uri: nil, idempotency_key: nil, code_verifier: nil)
5
+ uri = Ibanity.ponto_connect_api_schema["oauth2"]["token"]
6
+ grant_type = refresh_token ? "refresh_token" : "authorization_code"
7
+ arguments = [
8
+ ["grant_type", grant_type],
9
+ ["client_id", Ibanity.client.ponto_connect_client_id]
10
+ ]
11
+ arguments << ["code", authorization_code] << ["code_verifier", code_verifier] << ["redirect_uri", redirect_uri] if authorization_code
12
+ arguments << ["refresh_token", refresh_token] if refresh_token
13
+ payload = URI.encode_www_form(arguments)
14
+ create_by_uri(uri: uri, payload: payload, idempotency_key: idempotency_key, headers: self.headers)
15
+ end
16
+
17
+ def self.delete(refresh_token:)
18
+ uri = Ibanity.ponto_connect_api_schema["oauth2"]["revoke"]
19
+ arguments = [
20
+ ["token", refresh_token]
21
+ ]
22
+ payload = URI.encode_www_form(arguments)
23
+ create_by_uri(uri: uri, payload: payload, headers: self.headers)
24
+ end
25
+
26
+ private
27
+
28
+ def self.headers
29
+ {
30
+ "Authorization": "Basic " + Base64.strict_encode64("#{Ibanity.client.ponto_connect_client_id}:#{Ibanity.client.ponto_connect_client_secret}"),
31
+ "Content-Type": "application/x-www-form-urlencoded"
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class Transaction < Ibanity::BaseResource
4
+ def self.list(access_token:, account_id:, **query_params)
5
+ uri = Ibanity.ponto_connect_api_schema["account"]["transactions"].sub("{accountId}", account_id).sub("{transactionId}", "")
6
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.find(access_token:, account_id:, id:)
10
+ uri = Ibanity.ponto_connect_api_schema["account"]["transactions"].sub("{accountId}", account_id).sub("{transactionId}", id)
11
+ find_by_uri(uri: uri, customer_access_token: access_token)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,45 @@
1
+ module Ibanity
2
+ module Sandbox
3
+ class FinancialInstitutionHolding < Ibanity::BaseResource
4
+ def self.create(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
5
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
8
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
9
+ .gsub("{financialInstitutionHoldingId}", "")
10
+ uri = Ibanity.client.build_uri(path)
11
+ create_by_uri(uri: uri, resource_type: "financialInstitutionHolding", attributes: attributes, idempotency_key: idempotency_key)
12
+ end
13
+
14
+ def self.list(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, **query_params)
15
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
16
+ .gsub("{financialInstitutionId}", financial_institution_id)
17
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
18
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
19
+ .gsub("{financialInstitutionHoldingId}", "")
20
+ uri = Ibanity.client.build_uri(path)
21
+ list_by_uri(uri: uri, query_params: query_params)
22
+ end
23
+
24
+ def self.find(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
25
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
26
+ .gsub("{financialInstitutionId}", financial_institution_id)
27
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
28
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
29
+ .gsub("{financialInstitutionHoldingId}", id)
30
+ uri = Ibanity.client.build_uri(path)
31
+ find_by_uri(uri: uri)
32
+ end
33
+
34
+ def self.delete(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
35
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
36
+ .gsub("{financialInstitutionId}", financial_institution_id)
37
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
38
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
39
+ .gsub("{financialInstitutionHoldingId}", id)
40
+ uri = Ibanity.client.build_uri(path)
41
+ destroy_by_uri(uri: uri)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class AccountInformationAccessRequestAuthorization < Ibanity::BaseResource
4
+ def self.create(financial_institution_id:, account_information_access_request_id:, customer_access_token:, idempotency_key: nil, meta: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accountInformationAccessRequest"]["authorizations"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{accountInformationAccessRequestId}", account_information_access_request_id)
8
+ .gsub("{authorizationId}", "")
9
+ uri = Ibanity.client.build_uri(path)
10
+ create_by_uri(
11
+ uri: uri,
12
+ resource_type: "authorization",
13
+ attributes: attributes,
14
+ customer_access_token: customer_access_token,
15
+ idempotency_key: idempotency_key,
16
+ meta: meta
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Holding < Ibanity::BaseResource
4
+ def self.list(financial_institution_id:, account_id:, customer_access_token:, headers: nil, **query_params)
5
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["holdings"]
6
+ .sub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{accountId}", account_id)
8
+ .sub("{holdingId}", "")
9
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: customer_access_token, headers: headers)
10
+ end
11
+
12
+ def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
13
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["holdings"]
14
+ .sub("{financialInstitutionId}", financial_institution_id)
15
+ .sub("{accountId}", account_id)
16
+ .sub("{holdingId}", id)
17
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class PaymentInitiationRequestAuthorization < Ibanity::BaseResource
4
+ def self.create(financial_institution_id:, payment_initiation_request_id:, customer_access_token:, idempotency_key: nil, meta: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["paymentInitiationRequest"]["authorizations"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{paymentInitiationRequestId}", payment_initiation_request_id)
8
+ .gsub("{authorizationId}", "")
9
+ uri = Ibanity.client.build_uri(path)
10
+ create_by_uri(
11
+ uri: uri,
12
+ resource_type: "authorization",
13
+ attributes: attributes,
14
+ customer_access_token: customer_access_token,
15
+ idempotency_key: idempotency_key,
16
+ meta: meta
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,13 +1,15 @@
1
1
  module Ibanity
2
2
  class Client
3
3
 
4
- attr_reader :base_uri, :signature_certificate, :signature_key, :client_id, :client_secret
4
+ attr_reader :base_uri, :signature_certificate, :signature_key, :isabel_connect_client_id, :isabel_connect_client_secret, :ponto_connect_client_id, :ponto_connect_client_secret
5
5
 
6
- def initialize(certificate:, key:, key_passphrase:, signature_certificate: nil, signature_certificate_id: nil, signature_key: nil, signature_key_passphrase: nil, api_scheme: "https", api_host: "api.ibanity.com", api_port: "443", ssl_ca_file: nil, client_id: "valid_client_id", client_secret: "valid_client_secret")
7
- @client_id = client_id
8
- @client_secret = client_secret
9
- @certificate = OpenSSL::X509::Certificate.new(certificate)
10
- @key = OpenSSL::PKey::RSA.new(key, key_passphrase)
6
+ def initialize(certificate:, key:, key_passphrase:, signature_certificate: nil, signature_certificate_id: nil, signature_key: nil, signature_key_passphrase: nil, api_scheme: "https", api_host: "api.ibanity.com", api_port: "443", ssl_ca_file: nil, isabel_connect_client_id: "valid_client_id", isabel_connect_client_secret: "valid_client_secret", ponto_connect_client_id: nil, ponto_connect_client_secret: nil)
7
+ @isabel_connect_client_id = isabel_connect_client_id
8
+ @isabel_connect_client_secret = isabel_connect_client_secret
9
+ @ponto_connect_client_id = ponto_connect_client_id
10
+ @ponto_connect_client_secret = ponto_connect_client_secret
11
+ @certificate = OpenSSL::X509::Certificate.new(certificate)
12
+ @key = OpenSSL::PKey::RSA.new(key, key_passphrase)
11
13
  if signature_certificate
12
14
  @signature_certificate = OpenSSL::X509::Certificate.new(signature_certificate)
13
15
  @signature_certificate_id = signature_certificate_id
@@ -68,8 +70,9 @@ module Ibanity
68
70
  }
69
71
  raw_response = RestClient::Request.execute(query) do |response, request, result, &block|
70
72
  if response.code >= 400
73
+ ibanity_request_id = response.headers[:ibanity_request_id]
71
74
  body = JSON.parse(response.body)
72
- raise Ibanity::Error.new(body["errors"]), "Ibanity request failed."
75
+ raise Ibanity::Error.new(body["errors"] || body, ibanity_request_id), "Ibanity request failed."
73
76
  else
74
77
  response.return!(&block)
75
78
  end
data/lib/ibanity/error.rb CHANGED
@@ -2,14 +2,14 @@ module Ibanity
2
2
  class Error < StandardError
3
3
  attr_reader :errors
4
4
 
5
- def initialize(errors)
5
+ def initialize(errors, ibanity_request_id)
6
6
  @errors = errors
7
+ @ibanity_request_id = ibanity_request_id
7
8
  end
8
9
 
9
10
  def to_s
10
- if @errors && @errors.size > 0
11
- @errors.map do |error|
12
- p error
11
+ if @errors.is_a?(Array) && @errors.size > 0
12
+ formatted_errors = @errors.map do |error|
13
13
  if error["meta"] && error["meta"]["attribute"]
14
14
  "* #{error["code"]}: '#{error["meta"]["attribute"]}' #{error["detail"]}"
15
15
  elsif error["meta"] && error["meta"]["resource"]
@@ -17,7 +17,11 @@ module Ibanity
17
17
  else
18
18
  "* #{error["code"]}: #{error["detail"]}"
19
19
  end
20
- end.join("\n")
20
+ end
21
+ formatted_errors << "* ibanity_request_id: #{@ibanity_request_id}"
22
+ formatted_errors.join("\n")
23
+ elsif @errors.is_a?(Hash)
24
+ "* #{@errors["error"]}: #{@errors["error_description"]}\n * Error hint: #{@errors["error_hint"]}\n * ibanity_request_id: #{@ibanity_request_id}"
21
25
  else
22
26
  super
23
27
  end
@@ -1,3 +1,3 @@
1
1
  module Ibanity
2
- VERSION = "1.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/ibanity.rb CHANGED
@@ -13,8 +13,11 @@ require_relative "ibanity/http_signature"
13
13
  require_relative "ibanity/api/base_resource"
14
14
  require_relative "ibanity/api/xs2a/account"
15
15
  require_relative "ibanity/api/xs2a/transaction"
16
+ require_relative "ibanity/api/xs2a/holding"
16
17
  require_relative "ibanity/api/xs2a/financial_institution"
17
18
  require_relative "ibanity/api/xs2a/account_information_access_request"
19
+ require_relative "ibanity/api/xs2a/account_information_access_request_authorization"
20
+ require_relative "ibanity/api/xs2a/payment_initiation_request_authorization"
18
21
  require_relative "ibanity/api/xs2a/customer_access_token"
19
22
  require_relative "ibanity/api/xs2a/customer"
20
23
  require_relative "ibanity/api/xs2a/payment_initiation_request"
@@ -23,13 +26,23 @@ require_relative "ibanity/api/o_auth_resource"
23
26
  require_relative "ibanity/api/isabel_connect/account"
24
27
  require_relative "ibanity/api/isabel_connect/balance"
25
28
  require_relative "ibanity/api/isabel_connect/transaction"
29
+ require_relative "ibanity/api/isabel_connect/intraday_transaction"
26
30
  require_relative "ibanity/api/isabel_connect/account_report"
27
31
  require_relative "ibanity/api/isabel_connect/access_token"
28
32
  require_relative "ibanity/api/isabel_connect/refresh_token"
29
33
  require_relative "ibanity/api/isabel_connect/bulk_payment_initiation_request"
30
34
  require_relative "ibanity/api/sandbox/financial_institution_account"
31
35
  require_relative "ibanity/api/sandbox/financial_institution_transaction"
36
+ require_relative "ibanity/api/sandbox/financial_institution_holding"
32
37
  require_relative "ibanity/api/sandbox/financial_institution_user"
38
+ require_relative "ibanity/api/ponto_connect/token"
39
+ require_relative "ibanity/api/ponto_connect/financial_institution"
40
+ require_relative "ibanity/api/ponto_connect/account"
41
+ require_relative "ibanity/api/ponto_connect/transaction"
42
+ require_relative "ibanity/api/ponto_connect/synchronization"
43
+ require_relative "ibanity/api/consent/consent"
44
+ require_relative "ibanity/api/consent/processing_operation"
45
+ require_relative "ibanity/api/ponto_connect/payment"
33
46
 
34
47
  module Ibanity
35
48
  class << self
@@ -42,6 +55,8 @@ module Ibanity
42
55
  @client = nil
43
56
  @xs2a_api_schema = nil
44
57
  @isabel_connect_api_schema = nil
58
+ @consent_api_schema = nil
59
+ @ponto_connect_api_schema = nil
45
60
  @sandbox_api_schema = nil
46
61
  @configuration = nil
47
62
  yield configuration
@@ -56,8 +71,10 @@ module Ibanity
56
71
  :signature_certificate_id,
57
72
  :signature_key,
58
73
  :signature_key_passphrase,
59
- :client_id,
60
- :client_secret,
74
+ :isabel_connect_client_id,
75
+ :isabel_connect_client_secret,
76
+ :ponto_connect_client_id,
77
+ :ponto_connect_client_secret,
61
78
  :api_scheme,
62
79
  :api_host,
63
80
  :api_port,
@@ -77,6 +94,14 @@ module Ibanity
77
94
  @isabel_connect_api_schema ||= client.get(uri: "#{client.base_uri}/isabel-connect")["links"]
78
95
  end
79
96
 
97
+ def ponto_connect_api_schema
98
+ @ponto_connect_api_schema ||= client.get(uri: "#{client.base_uri}/ponto-connect")["links"]
99
+ end
100
+
101
+ def consent_api_schema
102
+ @consent_api_schema ||= client.get(uri: "#{client.base_uri}/consent")["links"]
103
+ end
104
+
80
105
  def respond_to_missing?(method_name, include_private = false)
81
106
  client.respond_to?(method_name, include_private)
82
107
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibanity
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ibanity
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-05 00:00:00.000000000 Z
11
+ date: 2020-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -61,6 +61,8 @@ extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
63
  - ".gitkeep"
64
+ - ".travis.yml"
65
+ - CHANGELOG.md
64
66
  - Gemfile
65
67
  - LICENSE.txt
66
68
  - README.md
@@ -68,23 +70,36 @@ files:
68
70
  - ibanity.gemspec
69
71
  - lib/ibanity.rb
70
72
  - lib/ibanity/api/base_resource.rb
73
+ - lib/ibanity/api/consent/consent.rb
74
+ - lib/ibanity/api/consent/processing_operation.rb
71
75
  - lib/ibanity/api/isabel_connect/access_token.rb
72
76
  - lib/ibanity/api/isabel_connect/account.rb
73
77
  - lib/ibanity/api/isabel_connect/account_report.rb
74
78
  - lib/ibanity/api/isabel_connect/balance.rb
75
79
  - lib/ibanity/api/isabel_connect/bulk_payment_initiation_request.rb
80
+ - lib/ibanity/api/isabel_connect/intraday_transaction.rb
76
81
  - lib/ibanity/api/isabel_connect/refresh_token.rb
77
82
  - lib/ibanity/api/isabel_connect/transaction.rb
78
83
  - lib/ibanity/api/o_auth_resource.rb
84
+ - lib/ibanity/api/ponto_connect/account.rb
85
+ - lib/ibanity/api/ponto_connect/financial_institution.rb
86
+ - lib/ibanity/api/ponto_connect/payment.rb
87
+ - lib/ibanity/api/ponto_connect/synchronization.rb
88
+ - lib/ibanity/api/ponto_connect/token.rb
89
+ - lib/ibanity/api/ponto_connect/transaction.rb
79
90
  - lib/ibanity/api/sandbox/financial_institution_account.rb
91
+ - lib/ibanity/api/sandbox/financial_institution_holding.rb
80
92
  - lib/ibanity/api/sandbox/financial_institution_transaction.rb
81
93
  - lib/ibanity/api/sandbox/financial_institution_user.rb
82
94
  - lib/ibanity/api/xs2a/account.rb
83
95
  - lib/ibanity/api/xs2a/account_information_access_request.rb
96
+ - lib/ibanity/api/xs2a/account_information_access_request_authorization.rb
84
97
  - lib/ibanity/api/xs2a/customer.rb
85
98
  - lib/ibanity/api/xs2a/customer_access_token.rb
86
99
  - lib/ibanity/api/xs2a/financial_institution.rb
100
+ - lib/ibanity/api/xs2a/holding.rb
87
101
  - lib/ibanity/api/xs2a/payment_initiation_request.rb
102
+ - lib/ibanity/api/xs2a/payment_initiation_request_authorization.rb
88
103
  - lib/ibanity/api/xs2a/synchronization.rb
89
104
  - lib/ibanity/api/xs2a/transaction.rb
90
105
  - lib/ibanity/client.rb
@@ -113,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
128
  version: '0'
114
129
  requirements: []
115
130
  rubyforge_project:
116
- rubygems_version: 2.6.14
131
+ rubygems_version: 2.7.7
117
132
  signing_key:
118
133
  specification_version: 4
119
134
  summary: Ibanity Ruby Client