paystack_sdk 0.0.6 → 0.0.8

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: d4ff6401efb6a0aba25394b61aa74e1a2645848c015565f3590ffdc10f504748
4
- data.tar.gz: e59175c14b106866b7129e5cb640ec9a64feebb5a2ddce12940e0436e8dc88af
3
+ metadata.gz: 1161ca83326adeace91da47a17f4c078cee7f6073b4efda0d0d0e707b9744928
4
+ data.tar.gz: 44a2b6e56897e8e3f020705f2b836f6a6172599f43b1c976144a2cab9165616d
5
5
  SHA512:
6
- metadata.gz: 964956e0a22d4ea337ac49896a865d43a0d6ba6ac2f2cc307a49f120b0b407cb4dedf80c6f3b5ed8a227b89d283e5a9d2729210c3763d4f6236f373de5e9bc6b
7
- data.tar.gz: e86ef5b41b26ee645f3f3b208cc945cb382d38d768ace5440af66fc0e82a3fac2e036902723021da0d896b90b4b1877b5f395f3ea2860e577010035624608de7
6
+ metadata.gz: 59fc459f0ca4b103c4815c6523d6a6f6b7bf8088ef391c3d980b829f512aab9e66081796e2713d93d09cfeadb73c6069101ca91ce3b993ccf47389e0d8404df4
7
+ data.tar.gz: c4cc838ad71d8a8860b037096db5cf3c8cc55ed73a735eb405b4e81bd065a935de1529aa7e31876c64901c3f8fe973c9b2e7294924c7fd36881668a14297056a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.8] - 2025-06-26
4
+
5
+ ### Added
6
+
7
+ - Banks resource with support for listing banks and currency validation
8
+ - Regression tests for Banks resource, including validation for allowed currencies
9
+ - Registered `banks` resource in the main client for easy access
10
+
11
+ ### Improved
12
+
13
+ - Validation for allowed currency values in Banks resource for safer API usage
14
+
15
+ ## [0.0.7] - 2025-06-25
16
+
17
+ ### Added
18
+
19
+ - Transfer Recipients resource with full CRUD operations (create, list, fetch, update, delete)
20
+ - Transfers resource with full API support (create/initiate, list, fetch, finalize, verify)
21
+ - All resource methods now use `handle_response` for consistent response handling
22
+ - Regression tests for Transfer Recipients and Transfers resources, ensuring response wrapping and validation
23
+
24
+ ### Changed
25
+
26
+ - Registered `transfer_recipients` and `transfers` resources in the main client for easy access
27
+ - Updated specs to verify that all resource methods wrap responses using `PaystackSdk::Response`
28
+
29
+ ### Improved
30
+
31
+ - Enhanced test coverage for new resources and response handling
32
+ - Improved code consistency by enforcing response wrapping and validation patterns across all new resources
33
+
3
34
  ## [0.0.6] - 2025-06-10
4
35
 
5
36
  ### Added
@@ -2,6 +2,9 @@
2
2
 
3
3
  require_relative "resources/transactions"
4
4
  require_relative "resources/customers"
5
+ require_relative "resources/transfer_recipients"
6
+ require_relative "resources/transfers"
7
+ require_relative "resources/banks"
5
8
  require_relative "utils/connection_utils"
6
9
 
7
10
  module PaystackSdk
@@ -61,5 +64,47 @@ module PaystackSdk
61
64
  def customers
62
65
  @customers ||= Resources::Customers.new(@connection)
63
66
  end
67
+
68
+ # Provides access to the `TransferRecipients` resource.
69
+ #
70
+ # @return [PaystackSdk::Resources::TransferRecipients] An instance of the
71
+ # `TransferRecipients` resource.
72
+ #
73
+ # @example
74
+ # ```ruby
75
+ # recipients = client.transfer_recipients
76
+ # response = recipients.create(params)
77
+ # ```
78
+ def transfer_recipients
79
+ @transfer_recipients ||= Resources::TransferRecipients.new(@connection)
80
+ end
81
+
82
+ # Provides access to the `Transfers` resource.
83
+ #
84
+ # @return [PaystackSdk::Resources::Transfers] An instance of the
85
+ # `Transfers` resource.
86
+ #
87
+ # @example
88
+ # ```ruby
89
+ # transfers = client.transfers
90
+ # response = transfers.create(params)
91
+ # ```
92
+ def transfers
93
+ @transfers ||= Resources::Transfers.new(@connection)
94
+ end
95
+
96
+ # Provides access to the `Banks` resource.
97
+ #
98
+ # @return [PaystackSdk::Resources::Banks] An instance of the
99
+ # `Banks` resource.
100
+ #
101
+ # @example
102
+ # ```ruby
103
+ # banks = client.banks
104
+ # response = banks.list
105
+ # ```
106
+ def banks
107
+ @banks ||= Resources::Banks.new(@connection)
108
+ end
64
109
  end
65
110
  end
@@ -0,0 +1,21 @@
1
+ require_relative "../validations"
2
+
3
+ module PaystackSdk
4
+ module Resources
5
+ class Banks < Base
6
+ # List banks
7
+ # @see https://paystack.com/docs/api/bank/#list
8
+ def list(query = {})
9
+ if query.key?(:currency)
10
+ validate_allowed_values!(
11
+ value: query[:currency],
12
+ name: "currency",
13
+ allowed_values: %w[NGN GHS ZAR KES USD]
14
+ )
15
+ end
16
+
17
+ handle_response(@connection.get("/bank", query))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "../validations"
2
+
3
+ module PaystackSdk
4
+ module Resources
5
+ class TransferRecipients < Base
6
+ # Create a transfer recipient
7
+ # @see https://paystack.com/docs/api/transfer-recipient/#create
8
+ def create(params)
9
+ validate_hash!(input: params, name: "TransferRecipient params")
10
+ validate_required_params!(
11
+ payload: params,
12
+ required_params: %i[type name account_number bank_code],
13
+ operation_name: "Create Transfer Recipient"
14
+ )
15
+ handle_response(@connection.post("/transferrecipient", params))
16
+ end
17
+
18
+ # List transfer recipients
19
+ # @see https://paystack.com/docs/api/transfer-recipient/#list
20
+ def list(query = {})
21
+ handle_response(@connection.get("/transferrecipient", query))
22
+ end
23
+
24
+ # Fetch a transfer recipient
25
+ # @see https://paystack.com/docs/api/transfer-recipient/#fetch
26
+ def fetch(recipient_code:)
27
+ validate_presence!(value: recipient_code, name: "recipient_code")
28
+ handle_response(@connection.get("/transferrecipient/#{recipient_code}"))
29
+ end
30
+
31
+ # Update a transfer recipient
32
+ # @see https://paystack.com/docs/api/transfer-recipient/#update
33
+ def update(recipient_code:, params:)
34
+ validate_presence!(value: recipient_code, name: "recipient_code")
35
+ validate_hash!(input: params, name: "Update TransferRecipient params")
36
+ handle_response(@connection.put("/transferrecipient/#{recipient_code}", params))
37
+ end
38
+
39
+ # Delete a transfer recipient
40
+ # @see https://paystack.com/docs/api/transfer-recipient/#delete
41
+ def delete(recipient_code:)
42
+ validate_presence!(value: recipient_code, name: "recipient_code")
43
+ handle_response(@connection.delete("/transferrecipient/#{recipient_code}"))
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "../validations"
2
+
3
+ module PaystackSdk
4
+ module Resources
5
+ class Transfers < Base
6
+ # Create a transfer
7
+ # @see https://paystack.com/docs/api/transfer/#initiate
8
+ def create(params)
9
+ validate_hash!(input: params, name: "Transfer params")
10
+ validate_required_params!(
11
+ payload: params,
12
+ required_params: %i[source amount recipient],
13
+ operation_name: "Create Transfer"
14
+ )
15
+ handle_response(@connection.post("/transfer", params))
16
+ end
17
+
18
+ # List transfers
19
+ # @see https://paystack.com/docs/api/transfer/#list
20
+ def list(query = {})
21
+ handle_response(@connection.get("/transfer", query))
22
+ end
23
+
24
+ # Fetch a transfer
25
+ # @see https://paystack.com/docs/api/transfer/#fetch
26
+ def fetch(id:)
27
+ validate_presence!(value: id, name: "transfer id")
28
+ handle_response(@connection.get("/transfer/#{id}"))
29
+ end
30
+
31
+ # Finalize a transfer (OTP)
32
+ # @see https://paystack.com/docs/api/transfer/#finalize
33
+ def finalize(transfer_code:, otp:)
34
+ validate_presence!(value: transfer_code, name: "transfer_code")
35
+ validate_presence!(value: otp, name: "otp")
36
+ handle_response(@connection.post("/transfer/finalize_transfer", {transfer_code: transfer_code, otp: otp}))
37
+ end
38
+
39
+ # Verify a transfer
40
+ # @see https://paystack.com/docs/api/transfer/#verify
41
+ def verify(reference:)
42
+ validate_presence!(value: reference, name: "reference")
43
+ handle_response(@connection.get("/transfer/verify/#{reference}"))
44
+ end
45
+ end
46
+ end
47
+ end
@@ -51,6 +51,9 @@ module PaystackSdk
51
51
  # @return [String, nil] API message from the response
52
52
  attr_reader :api_message
53
53
 
54
+ # @return [String, nil] API message from the response, if available
55
+ attr_reader :message
56
+
54
57
  # @return [Hash, Array, Object] The underlying data
55
58
  attr_reader :raw_data
56
59
 
@@ -70,6 +73,7 @@ module PaystackSdk
70
73
  @status_code = response.status
71
74
  @body = response.body
72
75
  @api_message = extract_api_message(@body)
76
+ @message = @api_message
73
77
  @raw_data = extract_data_from_body(@body)
74
78
 
75
79
  case @status_code
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PaystackSdk
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.8"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paystack_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxwell Nana Forson (theLazyProgrammer)
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '3.12'
32
+ version: '3.13'
33
33
  type: :development
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '3.12'
39
+ version: '3.13'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: standard
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -115,9 +115,12 @@ files:
115
115
  - Rakefile
116
116
  - lib/paystack_sdk.rb
117
117
  - lib/paystack_sdk/client.rb
118
+ - lib/paystack_sdk/resources/banks.rb
118
119
  - lib/paystack_sdk/resources/base.rb
119
120
  - lib/paystack_sdk/resources/customers.rb
120
121
  - lib/paystack_sdk/resources/transactions.rb
122
+ - lib/paystack_sdk/resources/transfer_recipients.rb
123
+ - lib/paystack_sdk/resources/transfers.rb
121
124
  - lib/paystack_sdk/response.rb
122
125
  - lib/paystack_sdk/utils/connection_utils.rb
123
126
  - lib/paystack_sdk/validations.rb