k2-connect-ruby 2.0.0 → 3.1.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 +40 -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 +77 -49
  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,127 +1,153 @@
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.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DavidKar1uk1
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2026-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.2.2
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 6.1.3.1
22
+ version: 8.1.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 6.1.3.1
29
+ version: 7.2.2
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 8.1.1
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activemodel
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 7.2.2
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: 8.1.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 7.2.2
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 8.1.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: rest-client
29
55
  requirement: !ruby/object:Gem::Requirement
30
56
  requirements:
31
57
  - - "~>"
32
58
  - !ruby/object:Gem::Version
33
- version: 6.1.3.1
59
+ version: 2.1.0
34
60
  type: :runtime
35
61
  prerelease: false
36
62
  version_requirements: !ruby/object:Gem::Requirement
37
63
  requirements:
38
64
  - - "~>"
39
65
  - !ruby/object:Gem::Version
40
- version: 6.1.3.1
66
+ version: 2.1.0
41
67
  - !ruby/object:Gem::Dependency
42
- name: bundler
68
+ name: json
43
69
  requirement: !ruby/object:Gem::Requirement
44
70
  requirements:
45
71
  - - "~>"
46
72
  - !ruby/object:Gem::Version
47
- version: '2.0'
48
- type: :development
73
+ version: 2.8.2
74
+ type: :runtime
49
75
  prerelease: false
50
76
  version_requirements: !ruby/object:Gem::Requirement
51
77
  requirements:
52
78
  - - "~>"
53
79
  - !ruby/object:Gem::Version
54
- version: '2.0'
80
+ version: 2.8.2
55
81
  - !ruby/object:Gem::Dependency
56
- name: guard
82
+ name: bundler
57
83
  requirement: !ruby/object:Gem::Requirement
58
84
  requirements:
59
85
  - - "~>"
60
86
  - !ruby/object:Gem::Version
61
- version: 2.16.2
87
+ version: 2.5.16
62
88
  type: :development
63
89
  prerelease: false
64
90
  version_requirements: !ruby/object:Gem::Requirement
65
91
  requirements:
66
92
  - - "~>"
67
93
  - !ruby/object:Gem::Version
68
- version: 2.16.2
94
+ version: 2.5.16
69
95
  - !ruby/object:Gem::Dependency
70
- name: guard-rspec
96
+ name: guard
71
97
  requirement: !ruby/object:Gem::Requirement
72
98
  requirements:
73
99
  - - "~>"
74
100
  - !ruby/object:Gem::Version
75
- version: 4.7.3
101
+ version: '2.19'
76
102
  type: :development
77
103
  prerelease: false
78
104
  version_requirements: !ruby/object:Gem::Requirement
79
105
  requirements:
80
106
  - - "~>"
81
107
  - !ruby/object:Gem::Version
82
- version: 4.7.3
108
+ version: '2.19'
83
109
  - !ruby/object:Gem::Dependency
84
- name: rest-client
110
+ name: guard-rspec
85
111
  requirement: !ruby/object:Gem::Requirement
86
112
  requirements:
87
113
  - - "~>"
88
114
  - !ruby/object:Gem::Version
89
- version: 2.1.0
90
- type: :runtime
115
+ version: 4.7.3
116
+ type: :development
91
117
  prerelease: false
92
118
  version_requirements: !ruby/object:Gem::Requirement
93
119
  requirements:
94
120
  - - "~>"
95
121
  - !ruby/object:Gem::Version
96
- version: 2.1.0
122
+ version: 4.7.3
97
123
  - !ruby/object:Gem::Dependency
98
124
  name: rake
99
125
  requirement: !ruby/object:Gem::Requirement
100
126
  requirements:
101
127
  - - "~>"
102
128
  - !ruby/object:Gem::Version
103
- version: 13.0.3
129
+ version: 13.2.1
104
130
  type: :development
105
131
  prerelease: false
106
132
  version_requirements: !ruby/object:Gem::Requirement
107
133
  requirements:
108
134
  - - "~>"
109
135
  - !ruby/object:Gem::Version
110
- version: 13.0.3
136
+ version: 13.2.1
111
137
  - !ruby/object:Gem::Dependency
112
138
  name: rspec
113
139
  requirement: !ruby/object:Gem::Requirement
114
140
  requirements:
115
141
  - - "~>"
116
142
  - !ruby/object:Gem::Version
117
- version: 3.10.0
143
+ version: 3.13.0
118
144
  type: :development
119
145
  prerelease: false
120
146
  version_requirements: !ruby/object:Gem::Requirement
121
147
  requirements:
122
148
  - - "~>"
123
149
  - !ruby/object:Gem::Version
124
- version: 3.10.0
150
+ version: 3.13.0
125
151
  - !ruby/object:Gem::Dependency
126
152
  name: rspec-nc
127
153
  requirement: !ruby/object:Gem::Requirement
@@ -142,42 +168,42 @@ dependencies:
142
168
  requirements:
143
169
  - - "~>"
144
170
  - !ruby/object:Gem::Version
145
- version: 6.0.0
171
+ version: 6.3.1
146
172
  type: :development
147
173
  prerelease: false
148
174
  version_requirements: !ruby/object:Gem::Requirement
149
175
  requirements:
150
176
  - - "~>"
151
177
  - !ruby/object:Gem::Version
152
- version: 6.0.0
178
+ version: 6.3.1
153
179
  - !ruby/object:Gem::Dependency
154
180
  name: webmock
155
181
  requirement: !ruby/object:Gem::Requirement
156
182
  requirements:
157
183
  - - "~>"
158
184
  - !ruby/object:Gem::Version
159
- version: 3.12.2
185
+ version: '3.24'
160
186
  type: :development
161
187
  prerelease: false
162
188
  version_requirements: !ruby/object:Gem::Requirement
163
189
  requirements:
164
190
  - - "~>"
165
191
  - !ruby/object:Gem::Version
166
- version: 3.12.2
192
+ version: '3.24'
167
193
  - !ruby/object:Gem::Dependency
168
- name: yajl-ruby
194
+ name: faker
169
195
  requirement: !ruby/object:Gem::Requirement
170
196
  requirements:
171
197
  - - "~>"
172
198
  - !ruby/object:Gem::Version
173
- version: 1.4.1
174
- type: :runtime
199
+ version: 3.5.1
200
+ type: :development
175
201
  prerelease: false
176
202
  version_requirements: !ruby/object:Gem::Requirement
177
203
  requirements:
178
204
  - - "~>"
179
205
  - !ruby/object:Gem::Version
180
- version: 1.4.1
206
+ version: 3.5.1
181
207
  description: Ruby SDK for the Kopo Kopo K2 Connect API, with webhook subscriptions,
182
208
  STK Push, Pay and Settlement Transfer capabilities. Allows decomposition and break
183
209
  down of results and webhooks returned from the K2 Connect APIx``.
@@ -190,6 +216,7 @@ files:
190
216
  - ".gitignore"
191
217
  - ".gitmodules"
192
218
  - ".rspec"
219
+ - ".ruby-version"
193
220
  - ".travis.yml"
194
221
  - CHANGELOG.md
195
222
  - CODE_OF_CONDUCT.md
@@ -203,7 +230,7 @@ files:
203
230
  - bin/setup
204
231
  - k2-connect-ruby.gemspec
205
232
  - lib/k2-connect-ruby.rb
206
- - lib/k2-connect-ruby/k2_entity/entity.rb
233
+ - lib/k2-connect-ruby/entity.rb
207
234
  - lib/k2-connect-ruby/k2_entity/k2_entity.rb
208
235
  - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay.rb
209
236
  - lib/k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement.rb
@@ -214,29 +241,27 @@ files:
214
241
  - lib/k2-connect-ruby/k2_entity/k2_subscribe.rb
215
242
  - lib/k2-connect-ruby/k2_entity/k2_token.rb
216
243
  - lib/k2-connect-ruby/k2_errors.rb
217
- - lib/k2-connect-ruby/k2_services/client/k2_client.rb
244
+ - lib/k2-connect-ruby/k2_services/k2_client.rb
218
245
  - lib/k2-connect-ruby/k2_services/payload_process.rb
219
246
  - lib/k2-connect-ruby/k2_services/payloads/k2_transaction.rb
220
247
  - lib/k2-connect-ruby/k2_services/payloads/k2_webhooks.rb
221
248
  - lib/k2-connect-ruby/k2_services/payloads/transactions/incoming_payment.rb
222
249
  - lib/k2-connect-ruby/k2_services/payloads/transactions/outgoing_payment.rb
223
250
  - 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
251
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/b2b_transaction_received.rb
252
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_received.rb
253
+ - lib/k2-connect-ruby/k2_services/payloads/webhooks/buygoods_transaction_reversed.rb
227
254
  - lib/k2-connect-ruby/k2_services/payloads/webhooks/customer_created.rb
228
- - lib/k2-connect-ruby/k2_services/payloads/webhooks/m2m_transaction.rb
229
255
  - lib/k2-connect-ruby/k2_services/payloads/webhooks/settlement_webhook.rb
256
+ - lib/k2-connect-ruby/k2_utilities.rb
230
257
  - lib/k2-connect-ruby/k2_utilities/config/k2_config.rb
231
258
  - lib/k2-connect-ruby/k2_utilities/config/k2_config.yml
232
- - lib/k2-connect-ruby/k2_utilities/k2_authorize.rb
259
+ - lib/k2-connect-ruby/k2_utilities/k2_authenticator.rb
233
260
  - lib/k2-connect-ruby/k2_utilities/k2_connection.rb
234
261
  - lib/k2-connect-ruby/k2_utilities/k2_process_result.rb
235
262
  - lib/k2-connect-ruby/k2_utilities/k2_process_webhook.rb
236
263
  - lib/k2-connect-ruby/k2_utilities/k2_url_parse.rb
237
264
  - 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
265
  - lib/k2-connect-ruby/version.rb
241
266
  homepage: https://github.com/kopokopo/k2-connect-ruby.git
242
267
  licenses:
@@ -246,23 +271,26 @@ metadata:
246
271
  homepage_uri: https://github.com/kopokopo/k2-connect-ruby.git
247
272
  source_code_uri: https://github.com/kopokopo/k2-connect-ruby.git
248
273
  changelog_uri: https://github.com/kopokopo/k2-connect-ruby.git/CHANGELOG.MD
249
- post_install_message:
274
+ post_install_message:
250
275
  rdoc_options: []
251
276
  require_paths:
252
277
  - lib
253
278
  required_ruby_version: !ruby/object:Gem::Requirement
254
279
  requirements:
255
- - - "~>"
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ version: 3.3.5
283
+ - - "<="
256
284
  - !ruby/object:Gem::Version
257
- version: 2.6.5
285
+ version: 3.4.7
258
286
  required_rubygems_version: !ruby/object:Gem::Requirement
259
287
  requirements:
260
288
  - - ">="
261
289
  - !ruby/object:Gem::Version
262
290
  version: '0'
263
291
  requirements: []
264
- rubygems_version: 3.0.3
265
- signing_key:
292
+ rubygems_version: 3.5.16
293
+ signing_key:
266
294
  specification_version: 4
267
295
  summary: Ruby SDK for the Kopo Kopo K2 Connect API.
268
296
  test_files: []
@@ -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