revolut-connect 0.1.5 → 0.1.6

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: 9010d58ab099e0739336f7645c70fa7f859aeb8742109a3f48459262221302b8
4
- data.tar.gz: d53d5e9b0a475252d5b00eaf9984a8557c67b0e31d03eb80ea4f4f39fdacc0e8
3
+ metadata.gz: 6f6c231899d0e5bfd5e675e2b911ccead17aa1df7c8f8e7e7475ba07ebfd4800
4
+ data.tar.gz: b15045344651b7a013b15dba27ac2ad19b868029fb85f642129fde6be5c5dd1e
5
5
  SHA512:
6
- metadata.gz: 638eea99c2401f8fcdf5053f4fcc664975c6e677bf67eca9a83747337bac1389138da6e8a4a8f9632552d1ef848084e6f003a324c3577a2875810989971c77e6
7
- data.tar.gz: 4e6e92b18f575b031861890f8e7f93b0ea6070e0c9c7321a515e01e3ad52f72ce8a6250b9e9d969757fa5e5268b4bffff8423d6a104a32d3d3c13da7b4bb020b
6
+ metadata.gz: 6c0de989febb683fff5dc5d823dd89285dac611192e4053222eccb304df0d8d9ae4b3fc0589a4e74bcf6c7e6180736f4712ac45e036a4f1262fead830c53fc07
7
+ data.tar.gz: 4d77b497a69a1936ffb28fe30b1f64534c8ea3b5cf94776f3b449d925d3b986b8c7c29ad8ebc9e30e964d64baa01456930a7dc274128a09c73709d0ae4e7ae47
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- revolut-connect (0.1.5)
4
+ revolut-connect (0.1.6)
5
5
  faraday (>= 2)
6
6
  faraday-retry (>= 2)
7
7
  jwt (>= 1)
data/README.md CHANGED
@@ -23,6 +23,7 @@ _:warning: For now this connector only supports the [Business API](https://devel
23
23
  - `Transaction`
24
24
  - `TransferReason`
25
25
  - `Webhook`
26
+ - `Simulation`
26
27
 
27
28
  ## :construction: Roadmap
28
29
 
@@ -32,7 +33,6 @@ _:warning: For now this connector only supports the [Business API](https://devel
32
33
  - `ForeignExchange` resource
33
34
  - `PaymentDraft` resource
34
35
  - `PayoutLink` resource
35
- - `Simulation` resource
36
36
  - `TeamMember` resource
37
37
  - `Transfer` resource
38
38
 
@@ -247,6 +247,56 @@ transaction = Revolut::Payment.retrieve(payment.id)
247
247
  deleted = Revolut::Payment.delete(transaction.id)
248
248
  ```
249
249
 
250
+ #### Simulations
251
+
252
+ <https://developer.revolut.com/docs/business/simulations>
253
+
254
+ ```rb
255
+ # Update a transaction
256
+ transaction = Revolut::Simulation.update_transaction("a6ea39d7-62c9-481c-8ba6-8a887a44c486", action: :complete)
257
+
258
+ # Top up an account
259
+ transaction = Revolut::Simulation.top_up_account("e042f1fe-f721-49cc-af82-db7a6c46944f",
260
+ amount: 100,
261
+ currency: "GBP",
262
+ reference: "Test Top-up",
263
+ state: "completed"
264
+ )
265
+ ```
266
+
267
+ #### Webhooks
268
+
269
+ <https://developer.revolut.com/docs/business/webhooks-v-2>
270
+
271
+ ```rb
272
+ # Create a webhook
273
+ webhook = Revolut::Webhook.create(
274
+ url: "https://www.example.com",
275
+ events: [
276
+ "TransactionCreated",
277
+ "PayoutLinkCreated"
278
+ ]
279
+ )
280
+
281
+ # List webhooks
282
+ webhooks = Revolut::Webhook.list
283
+
284
+ # Retrieve a webhook
285
+ webhook = Revolut::Webhook.retrieve(webhook.id)
286
+
287
+ # Update a webhook
288
+ webhook = Revolut::Webhook.update(webhook.id, url: "https://www.example.com/")
289
+
290
+ # Delete a webhook
291
+ deleted = Revolut::Webhook.delete(webhook.id)
292
+
293
+ # Rotate webhook secret
294
+ rotated = Revolut::Webhook.rotate_signing_secret(webhook.id)
295
+
296
+ # Retrieve list of failing events
297
+ failed_events = Revolut::Webhook.failed_events(webhook.id)
298
+ ```
299
+
250
300
  ## Development
251
301
 
252
302
  You can use `bin/console` to access an interactive console. This will preload environment variables from a `.env` file.
@@ -7,6 +7,10 @@ module Revolut
7
7
  "accounts"
8
8
  end
9
9
 
10
+ # Retrieves the bank details for a specific account.
11
+ #
12
+ # @param id [String] The ID of the account.
13
+ # @return [Array<Revolut::BankAccount>] An array of bank account objects.
10
14
  def self.bank_details(id)
11
15
  response = http_client.get("/#{resources_name}/#{id}/bank-details")
12
16
 
@@ -57,12 +57,12 @@ module Revolut
57
57
  @coerce_with ||= attrs
58
58
  end
59
59
 
60
- protected
61
-
62
60
  def http_client
63
61
  @http_client ||= Revolut::Client.instance
64
62
  end
65
63
 
64
+ protected
65
+
66
66
  def resource_name
67
67
  resources_name
68
68
  end
@@ -88,16 +88,10 @@ module Revolut
88
88
 
89
89
  def check_not_allowed
90
90
  method = caller(1..1).first.match(/`(\w+)'/)[1].to_sym
91
- raise Revolut::Error, "`#{method}` is not allowed on this resource" if not_allowed_to.include?(method) || only.any? && !only.include?(method)
91
+ raise Revolut::UnsupportedOperationError, "`#{method}` operation is not allowed on this resource" if not_allowed_to.include?(method) || only.any? && !only.include?(method)
92
92
  end
93
93
  end
94
94
 
95
- def to_json
96
- @_raw.to_json
97
- end
98
-
99
- protected
100
-
101
95
  def initialize(attrs = {})
102
96
  @_raw = attrs
103
97
 
@@ -121,5 +115,9 @@ module Revolut
121
115
 
122
116
  instance_variables.each { |iv| self.class.send(:attr_accessor, iv.to_s[1..].to_sym) }
123
117
  end
118
+
119
+ def to_json
120
+ @_raw.to_json
121
+ end
124
122
  end
125
123
  end
@@ -0,0 +1,41 @@
1
+ module Revolut
2
+ # Reference: https://developer.revolut.com/docs/business/counterparties
3
+ class Simulation < Resource
4
+ shallow
5
+
6
+ def self.resources_name
7
+ "sandbox"
8
+ end
9
+
10
+ # Updates a transaction in the sandbox environment.
11
+ #
12
+ # @param id [String] The ID of the transaction to update.
13
+ # @param action [Symbol] The action to perform on the transaction.
14
+ # @return [Revolut::Transaction] The updated transaction object.
15
+ # @raise [Revolut::UnsupportedOperationError] If the method is called in a non-sandbox environment or if the action is not supported.
16
+ def self.update_transaction(id, action:)
17
+ raise Revolut::UnsupportedOperationError, "#update_transaction is meant to be run only in sandbox environments" unless Revolut.sandbox?
18
+ raise Revolut::UnsupportedOperationError, "The action `#{action}` is not supported" unless %i[complete revert declined fail].include?(action)
19
+
20
+ response = http_client.post("/#{resources_name}/transactions/#{id}/#{action}")
21
+
22
+ Revolut::Transaction.new(response.body)
23
+ end
24
+
25
+ # Adds funds to the specified account in the sandbox environment.
26
+ #
27
+ # @param id [String] The ID of the account to top up.
28
+ # @param data [Hash] Additional data for the top-up request.
29
+ # @option data [Float] :amount The amount to top up the account by.
30
+ # @option data [String] :currency The currency of the top-up amount.
31
+ # @return [Revolut::Transaction] The transaction object representing the top-up.
32
+ # @raise [Revolut::UnsupportedOperationError] If the method is called outside of the sandbox environment.
33
+ def self.top_up_account(id, **data)
34
+ raise Revolut::UnsupportedOperationError, "#top_up_account is meant to be run only in sandbox environments" unless Revolut.sandbox?
35
+
36
+ response = http_client.post("/#{resources_name}/topup", data: data.merge(account_id: id))
37
+
38
+ Revolut::Transaction.new(response.body)
39
+ end
40
+ end
41
+ end
@@ -14,12 +14,12 @@ module Revolut
14
14
  def self.construct_from(request, signing_secret)
15
15
  json = request.body.read
16
16
  timestamp = request.headers["Revolut-Request-Timestamp"]
17
- header_signature = request.headers["Revolut-Signature"]
17
+ header_signatures = request.headers["Revolut-Signature"].split(",")
18
18
  payload_to_sign = "v1.#{timestamp}.#{json}"
19
19
  digest = OpenSSL::Digest.new("sha256")
20
20
  signature_digest = "v1=" + OpenSSL::HMAC.hexdigest(digest, signing_secret, payload_to_sign)
21
21
 
22
- if signature_digest == header_signature
22
+ if header_signatures.include? signature_digest
23
23
  new(JSON.parse(json))
24
24
  else
25
25
  raise Revolut::SignatureVerificationError, "Signature verification failed"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Revolut
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
data/lib/revolut.rb CHANGED
@@ -19,6 +19,8 @@ module Revolut
19
19
 
20
20
  class SignatureVerificationError < Error; end
21
21
 
22
+ class UnsupportedOperationError < Error; end
23
+
22
24
  class Configuration
23
25
  attr_accessor :request_timeout, :global_headers, :environment, :token_duration, :scope, :auth_json, :api_version
24
26
  attr_writer :client_id, :signing_key, :iss, :authorize_redirect_uri
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revolut-connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Mochetti
@@ -84,6 +84,7 @@ files:
84
84
  - lib/revolut/resources/counterparty.rb
85
85
  - lib/revolut/resources/payment.rb
86
86
  - lib/revolut/resources/resource.rb
87
+ - lib/revolut/resources/simulation.rb
87
88
  - lib/revolut/resources/transaction.rb
88
89
  - lib/revolut/resources/transfer_reason.rb
89
90
  - lib/revolut/resources/webhook.rb