k2-connect-ruby 2.0.0 → 3.0.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile.lock +78 -64
  4. data/README.md +70 -49
  5. data/k2-connect-ruby.gemspec +12 -11
  6. data/lib/k2-connect-ruby/{k2_entity/entity.rb → entity.rb} +5 -0
  7. data/lib/k2-connect-ruby/k2_entity/k2_entity.rb +24 -26
  8. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay.rb +92 -98
  9. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement.rb +43 -44
  10. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_stk.rb +43 -44
  11. data/lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_transfer.rb +35 -36
  12. data/lib/k2-connect-ruby/k2_entity/k2_notification.rb +34 -35
  13. data/lib/k2-connect-ruby/k2_entity/k2_polling.rb +32 -34
  14. data/lib/k2-connect-ruby/k2_entity/k2_subscribe.rb +34 -36
  15. data/lib/k2-connect-ruby/k2_entity/k2_token.rb +58 -54
  16. data/lib/k2-connect-ruby/k2_errors.rb +64 -62
  17. data/lib/k2-connect-ruby/k2_services/k2_client.rb +27 -0
  18. data/lib/k2-connect-ruby/k2_services/payload_process.rb +10 -5
  19. data/lib/k2-connect-ruby/k2_services/payloads/k2_transaction.rb +52 -46
  20. data/lib/k2-connect-ruby/k2_services/payloads/k2_webhooks.rb +57 -51
  21. data/lib/k2-connect-ruby/k2_services/payloads/transactions/incoming_payment.rb +50 -42
  22. data/lib/k2-connect-ruby/k2_services/payloads/transactions/outgoing_payment.rb +19 -11
  23. data/lib/k2-connect-ruby/k2_services/payloads/transactions/transfer.rb +16 -8
  24. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_received.rb +18 -0
  25. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_received.rb +13 -0
  26. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_reversed.rb +13 -0
  27. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/customer_created.rb +20 -12
  28. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/settlement_webhook.rb +40 -32
  29. data/lib/k2-connect-ruby/k2_utilities/config/k2_config.rb +49 -46
  30. data/lib/k2-connect-ruby/k2_utilities/k2_authenticator.rb +19 -0
  31. data/lib/k2-connect-ruby/k2_utilities/k2_connection.rb +39 -32
  32. data/lib/k2-connect-ruby/k2_utilities/k2_process_result.rb +42 -37
  33. data/lib/k2-connect-ruby/k2_utilities/k2_process_webhook.rb +51 -50
  34. data/lib/k2-connect-ruby/k2_utilities/k2_url_parse.rb +11 -6
  35. data/lib/k2-connect-ruby/k2_utilities/k2_validation.rb +104 -102
  36. data/lib/k2-connect-ruby/{utilities.rb → k2_utilities.rb} +8 -8
  37. data/lib/k2-connect-ruby/version.rb +1 -1
  38. data/lib/k2-connect-ruby.rb +7 -25
  39. metadata +56 -43
  40. data/lib/k2-connect-ruby/k2_services/client/k2_client.rb +0 -24
  41. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_received.rb +0 -10
  42. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_received.rb +0 -5
  43. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_reversal.rb +0 -5
  44. data/lib/k2-connect-ruby/k2_services/payloads/webhooks/m2m_transaction.rb +0 -8
  45. data/lib/k2-connect-ruby/k2_utilities/k2_authorize.rb +0 -14
  46. data/lib/k2-connect-ruby/k2_utilities/spec_modules/spec_config.rb +0 -41
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k2-connect-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DavidKar1uk1
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2025-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,112 +16,126 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.1.3.1
19
+ version: 7.2.2
20
20
  type: :runtime
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: 6.1.3.1
26
+ version: 7.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 6.1.3.1
33
+ version: 7.2.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 6.1.3.1
40
+ version: 7.2.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: rest-client
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
48
- type: :development
47
+ version: 2.1.0
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: 2.1.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: guard
56
+ name: json
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 2.16.2
61
+ version: 2.8.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.8.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.5.16
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 2.16.2
82
+ version: 2.5.16
69
83
  - !ruby/object:Gem::Dependency
70
- name: guard-rspec
84
+ name: guard
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 4.7.3
89
+ version: '2.19'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 4.7.3
96
+ version: '2.19'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rest-client
98
+ name: guard-rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 2.1.0
90
- type: :runtime
103
+ version: 4.7.3
104
+ type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 2.1.0
110
+ version: 4.7.3
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 13.0.3
117
+ version: 13.2.1
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 13.0.3
124
+ version: 13.2.1
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: 3.10.0
131
+ version: 3.13.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: 3.10.0
138
+ version: 3.13.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rspec-nc
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -142,42 +156,42 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: 6.0.0
159
+ version: 6.3.1
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: 6.0.0
166
+ version: 6.3.1
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: webmock
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: 3.12.2
173
+ version: '3.24'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
- version: 3.12.2
180
+ version: '3.24'
167
181
  - !ruby/object:Gem::Dependency
168
- name: yajl-ruby
182
+ name: faker
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - "~>"
172
186
  - !ruby/object:Gem::Version
173
- version: 1.4.1
174
- type: :runtime
187
+ version: 3.5.1
188
+ type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
- version: 1.4.1
194
+ version: 3.5.1
181
195
  description: Ruby SDK for the Kopo Kopo K2 Connect API, with webhook subscriptions,
182
196
  STK Push, Pay and Settlement Transfer capabilities. Allows decomposition and break
183
197
  down of results and webhooks returned from the K2 Connect APIx``.
@@ -190,6 +204,7 @@ files:
190
204
  - ".gitignore"
191
205
  - ".gitmodules"
192
206
  - ".rspec"
207
+ - ".ruby-version"
193
208
  - ".travis.yml"
194
209
  - CHANGELOG.md
195
210
  - CODE_OF_CONDUCT.md
@@ -203,7 +218,7 @@ files:
203
218
  - bin/setup
204
219
  - k2-connect-ruby.gemspec
205
220
  - lib/k2-connect-ruby.rb
206
- - lib/k2-connect-ruby/k2_entity/entity.rb
221
+ - lib/k2-connect-ruby/entity.rb
207
222
  - lib/k2-connect-ruby/k2_entity/k2_entity.rb
208
223
  - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay.rb
209
224
  - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement.rb
@@ -214,29 +229,27 @@ files:
214
229
  - lib/k2-connect-ruby/k2_entity/k2_subscribe.rb
215
230
  - lib/k2-connect-ruby/k2_entity/k2_token.rb
216
231
  - lib/k2-connect-ruby/k2_errors.rb
217
- - lib/k2-connect-ruby/k2_services/client/k2_client.rb
232
+ - lib/k2-connect-ruby/k2_services/k2_client.rb
218
233
  - lib/k2-connect-ruby/k2_services/payload_process.rb
219
234
  - lib/k2-connect-ruby/k2_services/payloads/k2_transaction.rb
220
235
  - lib/k2-connect-ruby/k2_services/payloads/k2_webhooks.rb
221
236
  - lib/k2-connect-ruby/k2_services/payloads/transactions/incoming_payment.rb
222
237
  - lib/k2-connect-ruby/k2_services/payloads/transactions/outgoing_payment.rb
223
238
  - lib/k2-connect-ruby/k2_services/payloads/transactions/transfer.rb
224
- - lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_received.rb
225
- - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_received.rb
226
- - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_reversal.rb
239
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_received.rb
240
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_received.rb
241
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_reversed.rb
227
242
  - lib/k2-connect-ruby/k2_services/payloads/webhooks/customer_created.rb
228
- - lib/k2-connect-ruby/k2_services/payloads/webhooks/m2m_transaction.rb
229
243
  - lib/k2-connect-ruby/k2_services/payloads/webhooks/settlement_webhook.rb
244
+ - lib/k2-connect-ruby/k2_utilities.rb
230
245
  - lib/k2-connect-ruby/k2_utilities/config/k2_config.rb
231
246
  - lib/k2-connect-ruby/k2_utilities/config/k2_config.yml
232
- - lib/k2-connect-ruby/k2_utilities/k2_authorize.rb
247
+ - lib/k2-connect-ruby/k2_utilities/k2_authenticator.rb
233
248
  - lib/k2-connect-ruby/k2_utilities/k2_connection.rb
234
249
  - lib/k2-connect-ruby/k2_utilities/k2_process_result.rb
235
250
  - lib/k2-connect-ruby/k2_utilities/k2_process_webhook.rb
236
251
  - lib/k2-connect-ruby/k2_utilities/k2_url_parse.rb
237
252
  - lib/k2-connect-ruby/k2_utilities/k2_validation.rb
238
- - lib/k2-connect-ruby/k2_utilities/spec_modules/spec_config.rb
239
- - lib/k2-connect-ruby/utilities.rb
240
253
  - lib/k2-connect-ruby/version.rb
241
254
  homepage: https://github.com/kopokopo/k2-connect-ruby.git
242
255
  licenses:
@@ -254,14 +267,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
254
267
  requirements:
255
268
  - - "~>"
256
269
  - !ruby/object:Gem::Version
257
- version: 2.6.5
270
+ version: 3.3.5
258
271
  required_rubygems_version: !ruby/object:Gem::Requirement
259
272
  requirements:
260
273
  - - ">="
261
274
  - !ruby/object:Gem::Version
262
275
  version: '0'
263
276
  requirements: []
264
- rubygems_version: 3.0.3
277
+ rubygems_version: 3.5.16
265
278
  signing_key:
266
279
  specification_version: 4
267
280
  summary: Ruby SDK for the Kopo Kopo K2 Connect API.
@@ -1,24 +0,0 @@
1
- # TODO: Uncomment the checking of the request scheme
2
- class K2Client
3
- attr_accessor :api_secret_key,
4
- :hash_body,
5
- :k2_signature
6
-
7
- # Initialize method
8
- def initialize(api_secret_key)
9
- raise ArgumentError, 'No Secret Key Given!' if api_secret_key.blank?
10
- @api_secret_key = api_secret_key
11
- end
12
-
13
- # Method for parsing the Entire Request. Come back to it later to trim. L8r call it set_client_variables
14
- def parse_request(the_request)
15
- raise ArgumentError, 'Nil Request Parameter Input!' if the_request.blank?
16
-
17
- # The Response Body.
18
- @hash_body = Yajl::Parser.parse(the_request.body.read.as_json)
19
- # The Response Header
20
- hash_header = Yajl::Parser.parse(the_request.env.select { |k, _| k =~ /^HTTP_/ }.to_json)
21
- # The K2 Signature
22
- @k2_signature = hash_header['HTTP_X_KOPOKOPO_SIGNATURE']
23
- end
24
- end
@@ -1,10 +0,0 @@
1
- class B2b < K2CommonEvents
2
- attr_reader :sending_till,
3
- :till_number
4
-
5
- def initialize(payload)
6
- super
7
- @till_number = payload.dig('event', 'resource', 'till_number')
8
- @sending_till = payload.dig('event', 'resource', 'sending_till')
9
- end
10
- end
@@ -1,5 +0,0 @@
1
- class BuygoodsTransactionReceived < Buygoods
2
- def initialize(payload)
3
- super
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- class BuygoodsTransactionReversed < Buygoods
2
- def initialize(payload)
3
- super
4
- end
5
- end
@@ -1,8 +0,0 @@
1
- class MerchantToMerchant < K2CommonEvents
2
- attr_reader :resource_sending_merchant
3
-
4
- def initialize(payload)
5
- super
6
- @resource_sending_merchant = payload.dig('event', 'resource', 'sending_merchant')
7
- end
8
- end
@@ -1,14 +0,0 @@
1
- require 'openssl'
2
- require 'active_support/security_utils'
3
- # Module for Authenticating the Kopo Kopo Signature via HMAC
4
- module K2Authenticator
5
- # Compares HMAC signature with the key.
6
- def self.authenticate(body, api_secret_key, signature)
7
- raise ArgumentError, "Nil Authentication Argument!\n Check whether your Input is Empty" if body.blank? || api_secret_key.blank? || signature.blank?
8
-
9
- digest = OpenSSL::Digest.new('sha256')
10
- hmac = OpenSSL::HMAC.hexdigest(digest, api_secret_key, body.to_json)
11
- raise ArgumentError, "Invalid Details Given!\n Ensure that your the Arguments Given are correct, namely:\n\t- The Response Body\n\t- Secret Key\n\t- Signature" unless ActiveSupport::SecurityUtils.secure_compare(hmac, signature)
12
- true
13
- end
14
- end
@@ -1,41 +0,0 @@
1
- module SpecConfig
2
- TILL_SCOPE_EVENT_TYPES = %[buygoods_transaction_received b2b_transaction_received buygoods_transaction_reversed]
3
-
4
- @specs = YAML.load_file(File.join('lib', 'k2-connect-ruby', 'k2_utilities', 'spec_modules', 'test_config.yml')).with_indifferent_access
5
-
6
- def subscription_stub_request(event_type, url)
7
- request_body = { event_type: event_type, url: url, secret: 'webhook_secret' }
8
- SpecConfig.custom_stub_request('post', K2Config.path_url('webhook_subscriptions'), request_body, 200)
9
- end
10
-
11
- def webhook_structure(event_type, scope, scope_reference = nil)
12
- {
13
- event_type: event_type,
14
- url: @callback_url,
15
- scope: scope,
16
- scope_reference: scope_reference,
17
- }
18
- end
19
-
20
- class << self
21
- def callback_url(context)
22
- @specs[:callback_url][:"#{context}"]
23
- end
24
-
25
- def custom_stub_request(request_type, path_url, request_body, response_code)
26
- request_body = request_body.to_s
27
- request_uri = path_url
28
- request_headers = { Authorization: "Bearer access_token", Accept: "application/json" }
29
-
30
- if request_type.eql?('post')
31
- request_headers['Content-Type'] = 'application/json'
32
- end
33
-
34
- # Stub Request
35
- WebMock.stub_request(:"#{request_type}", request_uri)
36
- .with(headers: request_headers, body: request_body)
37
- .to_return(status: response_code)
38
- end
39
- end
40
-
41
- end