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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31eba87b4eac68ac9e84013a18c31fbd9947329ed46b2baa0635634612fad44d
4
- data.tar.gz: d00eecefb30ff3c58bb6487913b0fdde209f1b2452dfcf742722be7e5a7a189e
3
+ metadata.gz: 39452b9ce27762de19e13888108a4e6500beb4e8f73e3319183ae2748be63b54
4
+ data.tar.gz: 40277be4b8a546de3a0da71658f9a4aa5e91d360bd1152844b97588e57fc843b
5
5
  SHA512:
6
- metadata.gz: da32a40989d406aaac05646153edf4dfe18ec2c21eaf97a61c3ef1dc94a9571a57a7fa658fa822716d0c4c413ff04305a2c51deafab4fb8771aaab501453872b
7
- data.tar.gz: fff96cacf6ec1888f3ab2dd2aca2683a1d042f9fbae335f19a71919f4250fac534594f5c6960b6f6a6e6c9d30b83009f3f0aa9c764796591f8cda9009e441133
6
+ metadata.gz: 9824461475aca1c8adf231457a80c209a54bc05dfff5a9da7b2c58a27cf6d69340a9d207c780aba751b753ac69b801208a3d8d2987f32b39a7fc87f689b0cd0c
7
+ data.tar.gz: 82808613065a33e5a377f6207c135f2dc9bc973c0577992d272cd5b7655c83078c75083a3cd0fda1eacf4c2f96f220af1adaaf9ad12ee4eb0d211ca661caacc8
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.5
data/Gemfile.lock CHANGED
@@ -1,41 +1,54 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- k2-connect-ruby (1.0.0)
5
- activemodel (~> 6.1.3.1)
6
- activesupport (~> 6.1.3.1)
4
+ k2-connect-ruby (3.0.0)
5
+ activemodel (~> 7.2.2)
6
+ activesupport (~> 7.2.2)
7
+ json (~> 2.8.2)
7
8
  rest-client (~> 2.1.0)
8
- yajl-ruby (~> 1.4.1)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activemodel (6.1.3.2)
14
- activesupport (= 6.1.3.2)
15
- activesupport (6.1.3.2)
16
- concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ activemodel (7.2.2)
14
+ activesupport (= 7.2.2)
15
+ activesupport (7.2.2)
16
+ base64
17
+ benchmark (>= 0.3)
18
+ bigdecimal
19
+ concurrent-ruby (~> 1.0, >= 1.3.1)
20
+ connection_pool (>= 2.2.5)
21
+ drb
17
22
  i18n (>= 1.6, < 2)
23
+ logger (>= 1.4.2)
18
24
  minitest (>= 5.1)
19
- tzinfo (~> 2.0)
20
- zeitwerk (~> 2.3)
21
- addressable (2.8.0)
22
- public_suffix (>= 2.0.2, < 5.0)
25
+ securerandom (>= 0.3)
26
+ tzinfo (~> 2.0, >= 2.0.5)
27
+ addressable (2.8.7)
28
+ public_suffix (>= 2.0.2, < 7.0)
29
+ base64 (0.2.0)
30
+ benchmark (0.4.0)
31
+ bigdecimal (3.1.8)
23
32
  coderay (1.1.3)
24
- concurrent-ruby (1.1.9)
25
- crack (0.4.5)
33
+ concurrent-ruby (1.3.4)
34
+ connection_pool (2.4.1)
35
+ crack (1.0.0)
36
+ bigdecimal
26
37
  rexml
27
- diff-lcs (1.4.4)
28
- domain_name (0.5.20190701)
29
- unf (>= 0.0.5, < 1.0.0)
30
- ffi (1.15.0)
31
- formatador (0.2.5)
32
- guard (2.16.2)
38
+ diff-lcs (1.5.1)
39
+ domain_name (0.6.20240107)
40
+ drb (2.2.1)
41
+ faker (3.5.1)
42
+ i18n (>= 1.8.11, < 2)
43
+ ffi (1.17.0)
44
+ formatador (1.1.0)
45
+ guard (2.19.0)
33
46
  formatador (>= 0.2.4)
34
47
  listen (>= 2.7, < 4.0)
35
48
  lumberjack (>= 1.0.12, < 2.0)
36
49
  nenv (~> 0.1)
37
50
  notiffany (~> 0.0)
38
- pry (>= 0.9.12)
51
+ pry (>= 0.13.0)
39
52
  shellany (~> 0.0)
40
53
  thor (>= 0.18.1)
41
54
  guard-compat (1.2.1)
@@ -43,85 +56,86 @@ GEM
43
56
  guard (~> 2.1)
44
57
  guard-compat (~> 1.1)
45
58
  rspec (>= 2.99.0, < 4.0)
46
- hashdiff (1.0.1)
59
+ hashdiff (1.1.2)
47
60
  http-accept (1.7.0)
48
- http-cookie (1.0.4)
61
+ http-cookie (1.0.7)
49
62
  domain_name (~> 0.5)
50
- i18n (1.10.0)
63
+ i18n (1.14.6)
51
64
  concurrent-ruby (~> 1.0)
52
- listen (3.5.1)
65
+ json (2.8.2)
66
+ listen (3.9.0)
53
67
  rb-fsevent (~> 0.10, >= 0.10.3)
54
68
  rb-inotify (~> 0.9, >= 0.9.10)
55
- lumberjack (1.2.8)
56
- method_source (1.0.0)
57
- mime-types (3.4.1)
69
+ logger (1.6.1)
70
+ lumberjack (1.2.10)
71
+ method_source (1.1.0)
72
+ mime-types (3.6.0)
73
+ logger
58
74
  mime-types-data (~> 3.2015)
59
- mime-types-data (3.2022.0105)
60
- minitest (5.15.0)
75
+ mime-types-data (3.2024.1105)
76
+ minitest (5.25.2)
61
77
  nenv (0.3.0)
62
78
  netrc (0.11.0)
63
79
  notiffany (0.1.3)
64
80
  nenv (~> 0.1)
65
81
  shellany (~> 0.0)
66
- pry (0.14.0)
82
+ pry (0.15.0)
67
83
  coderay (~> 1.1)
68
84
  method_source (~> 1.0)
69
- public_suffix (4.0.6)
70
- rake (13.0.3)
71
- rb-fsevent (0.10.4)
72
- rb-inotify (0.10.1)
85
+ public_suffix (6.0.1)
86
+ rake (13.2.1)
87
+ rb-fsevent (0.11.2)
88
+ rb-inotify (0.11.1)
73
89
  ffi (~> 1.0)
74
90
  rest-client (2.1.0)
75
91
  http-accept (>= 1.7.0, < 2.0)
76
92
  http-cookie (>= 1.0.2, < 2.0)
77
93
  mime-types (>= 1.16, < 4.0)
78
94
  netrc (~> 0.8)
79
- rexml (3.2.5)
80
- rspec (3.10.0)
81
- rspec-core (~> 3.10.0)
82
- rspec-expectations (~> 3.10.0)
83
- rspec-mocks (~> 3.10.0)
84
- rspec-core (3.10.1)
85
- rspec-support (~> 3.10.0)
86
- rspec-expectations (3.10.1)
95
+ rexml (3.3.9)
96
+ rspec (3.13.0)
97
+ rspec-core (~> 3.13.0)
98
+ rspec-expectations (~> 3.13.0)
99
+ rspec-mocks (~> 3.13.0)
100
+ rspec-core (3.13.2)
101
+ rspec-support (~> 3.13.0)
102
+ rspec-expectations (3.13.3)
87
103
  diff-lcs (>= 1.2.0, < 2.0)
88
- rspec-support (~> 3.10.0)
89
- rspec-mocks (3.10.2)
104
+ rspec-support (~> 3.13.0)
105
+ rspec-mocks (3.13.2)
90
106
  diff-lcs (>= 1.2.0, < 2.0)
91
- rspec-support (~> 3.10.0)
107
+ rspec-support (~> 3.13.0)
92
108
  rspec-nc (0.3.0)
93
109
  rspec (>= 3)
94
110
  terminal-notifier (>= 1.4)
95
- rspec-support (3.10.2)
111
+ rspec-support (3.13.1)
112
+ securerandom (0.3.2)
96
113
  shellany (0.0.1)
97
114
  terminal-notifier (2.0.0)
98
- thor (1.1.0)
99
- tzinfo (2.0.4)
115
+ thor (1.3.2)
116
+ tzinfo (2.0.6)
100
117
  concurrent-ruby (~> 1.0)
101
- unf (0.1.4)
102
- unf_ext
103
- unf_ext (0.0.8)
104
- vcr (6.0.0)
105
- webmock (3.12.2)
106
- addressable (>= 2.3.6)
118
+ vcr (6.3.1)
119
+ base64
120
+ webmock (3.24.0)
121
+ addressable (>= 2.8.0)
107
122
  crack (>= 0.3.2)
108
123
  hashdiff (>= 0.4.0, < 2.0.0)
109
- yajl-ruby (1.4.1)
110
- zeitwerk (2.5.4)
111
124
 
112
125
  PLATFORMS
113
126
  ruby
114
127
 
115
128
  DEPENDENCIES
116
- bundler (~> 2.0)
117
- guard (~> 2.16.2)
129
+ bundler (~> 2.5.16)
130
+ faker (~> 3.5.1)
131
+ guard (~> 2.19)
118
132
  guard-rspec (~> 4.7.3)
119
133
  k2-connect-ruby!
120
- rake (~> 13.0.3)
121
- rspec (~> 3.10.0)
134
+ rake (~> 13.2.1)
135
+ rspec (~> 3.13.0)
122
136
  rspec-nc (~> 0.3.0)
123
- vcr (~> 6.0.0)
124
- webmock (~> 3.12.2)
137
+ vcr (~> 6.3.1)
138
+ webmock (~> 3.24)
125
139
 
126
140
  BUNDLED WITH
127
- 2.2.21
141
+ 2.5.16
data/README.md CHANGED
@@ -25,6 +25,7 @@ All calls made without authentication will also fail.
25
25
  - [SMS Notifications](#sms-notifications)
26
26
  - [STK Push](#stk-push)
27
27
  - [PAY](#pay)
28
+ - [Settlemennt accounts](#settlement-accounts)
28
29
  - [Transfers](#transfers)
29
30
  - [Polling](#polling)
30
31
  - [Parsing the JSON Payload](#parsing-the-json-payload)
@@ -55,9 +56,21 @@ Add the require line to use the gem:
55
56
 
56
57
  require 'k2-connect-ruby'
57
58
 
59
+ To set the base_url:
60
+
61
+ ```ruby
62
+ K2ConnectRuby::K2Utilities::Config::K2Config.set_base_url("https://sandbox.kopokopo.com/")
63
+ ```
64
+
65
+ To set the api version:
66
+
67
+ ```ruby
68
+ K2ConnectRuby::K2Utilities::Config::K2Config.set_version(1)
69
+ ```
70
+
58
71
  ### Authorization
59
72
 
60
- Ensure you first Register your application with the [Kopo Kopo Sandbox](To be added later when launched).
73
+ Ensure you first Register your application with the [Kopo Kopo Sandbox](https://sandbox.kopokopo.com).
61
74
  Once an application is registered you will obtain your `client_id` and `client_secret` (aka client credentials), which will be used to identify your application when calling the Kopo Kopo API.
62
75
 
63
76
  For more Information, visit our [API docs]().
@@ -65,7 +78,7 @@ For more Information, visit our [API docs]().
65
78
  In order to request for application authorization and receive an access token, we need to execute the client credentials flow, this is done so by having your application server make a HTTPS request to the Kopo Kopo authorization server, through the K2AccessToken class.
66
79
 
67
80
  ```ruby
68
- k2_token = K2AccessToken.new('your_client_id', 'your_client_secret').request_token
81
+ k2_token = K2ConnectRuby::K2Entity::K2Token.new('your_client_id', 'your_client_secret').request_token
69
82
  ```
70
83
 
71
84
  ### Webhook Subscription
@@ -80,17 +93,16 @@ Ensure the following arguments are passed:
80
93
  - scope reference: is `REQUIRED` if scope is till
81
94
 
82
95
  Code example;
83
-
96
+
84
97
  ```ruby
85
98
  require 'k2-connect-ruby'
86
- k2_token = K2AccessToken.new('your_client_id', 'your_client_secret').request_token
87
- k2subscriber = K2Subscribe.new(k2_token)
88
-
99
+ k2_token = K2ConnectRuby::K2Entity::K2Token.new('your_client_id', 'your_client_secret').request_token
100
+ k2subscriber = K2ConnectRuby::K2Entity::K2Subscribe.new(k2_token)
89
101
  your_request = {
90
- event_type: 'buygoods_transaction_received',
91
- url: callback_url,
92
- scope: 'till',
93
- scope_reference: '112233'
102
+ event_type: 'buygoods_transaction_received',
103
+ url: callback_url,
104
+ scope: 'till',
105
+ scope_reference: '112233'
94
106
  }
95
107
  k2subscriber.webhook_subscribe(your_request)
96
108
  ```
@@ -107,13 +119,12 @@ Code example;
107
119
 
108
120
  ```ruby
109
121
  require 'k2-connect-ruby'
110
- k2_token = K2AccessToken.new('your_client_id', 'your_client_secret').request_token
111
- k2_notification = K2Notification.new(k2_token)
112
-
122
+ k2_token = K2ConnectRuby::K2Entity::K2Token.new('your_client_id', 'your_client_secret').request_token
123
+ k2_notification = K2ConnectRuby::K2Entity::K2Notification.new(k2_token)
113
124
  request_payload = {
114
- webhook_event_reference: 'c271535c-687f-4a40-a589-8b66b894792e',
115
- message: 'message',
116
- callback_url: 'callback_url'
125
+ webhook_event_reference: 'c271535c-687f-4a40-a589-8b66b894792e',
126
+ message: 'message',
127
+ callback_url: 'callback_url'
117
128
  }
118
129
  k2_notification.send_sms_transaction_notification(request_payload)
119
130
  ```
@@ -125,7 +136,7 @@ k2_notification.send_sms_transaction_notification(request_payload)
125
136
 
126
137
  To receive payments from M-PESA users via STK Push we first create a K2Stk Object, passing the access_token that was created prior.
127
138
 
128
- k2_stk = K2Stk.new(your_access_token)
139
+ k2_stk = K2ConnectRuby::K2Entity::K2Stk.new(your_access_token)
129
140
 
130
141
  Afterwards we send a POST request for receiving Payments by calling the following method and passing the params value received from the POST Form Request:
131
142
 
@@ -159,7 +170,7 @@ As a result a JSON payload will be returned, accessible with the k2_response_bod
159
170
  Code example;
160
171
 
161
172
  ```ruby
162
- k2_stk = K2Stk.new(your_access_token)
173
+ k2_stk = K2ConnectRuby::K2Entity::K2Stk.new(your_access_token)
163
174
 
164
175
  your_request = {
165
176
  payment_channel: 'M-PESA',
@@ -181,7 +192,7 @@ k2_stk.query_resource(k2_stk.location_url)
181
192
  First Create the K2Pay Object passing the access token
182
193
 
183
194
 
184
- k2_pay = K2Pay.new(access_token)
195
+ k2_pay = K2ConnectRuby::K2Entity::K2Pay.new(access_token)
185
196
 
186
197
  #### Add PAY Recipients
187
198
 
@@ -213,8 +224,9 @@ Add a PAY Recipient, with the following arguments:
213
224
  - till_name `REQUIRED`
214
225
  - till_number `REQUIRED`
215
226
 
216
-
217
- k2_pay.add_recipients(your_input)
227
+ ```ruby
228
+ k2_pay.add_recipients(your_input)
229
+ ```
218
230
 
219
231
  The type value can either be `mobile_wallet` or `bank_account`
220
232
 
@@ -260,7 +272,7 @@ As a result a JSON payload will be returned, accessible with the k2_response_bod
260
272
  Code example;
261
273
 
262
274
  ```ruby
263
- k2_pay = K2Pay.new(your_access_token)
275
+ k2_pay = K2ConnectRuby::K2Entity::K2Pay.new(your_access_token)
264
276
  k2_pay.add_recipient(your_recipient_input)
265
277
  k2_pay.query_resource(k2_pay.recipients_location_url)
266
278
 
@@ -305,7 +317,7 @@ Add pre-approved settlement accounts, to which one can transfer funds to. Can be
305
317
  - settlement_method: 'EFT' or 'RTS' `REQUIRED`
306
318
 
307
319
  ```ruby
308
- k2_settlement = K2Settlement.new(your_access_token)
320
+ k2_settlement = K2ConnectRuby::K2Entity::K2Settlement.new(your_access_token)
309
321
  # Add a mobile merchant wallet
310
322
  k2_settlement.add_settlement_account(merchant_wallet)
311
323
  # Add a merchant bank account
@@ -318,7 +330,7 @@ This will Enable one to transfer funds to your settlement accounts.
318
330
 
319
331
  First Create the K2Transfer Object
320
332
 
321
- k2_transfers = K2Transfer.new(access_token)
333
+ k2_transfers = K2ConnectRuby::K2Entity::K2Transfer.new(access_token)
322
334
 
323
335
  #### Create Transfer Request
324
336
 
@@ -327,7 +339,7 @@ or one can have a `targeted` transfer with a specified settlement account in min
327
339
 
328
340
  ##### Blind Transfer
329
341
 
330
- k2_transfers.transfer_funds(nil, params)
342
+ k2_transfers.transfer_funds(params)
331
343
 
332
344
  With `nil` representing that there are no specified destinations.
333
345
 
@@ -354,7 +366,7 @@ The Params are passed as the argument containing all the form data sent. A Succe
354
366
  Sample code example:
355
367
 
356
368
  ```ruby
357
- k2_transfer = K2Transfer.new(your_access_token)
369
+ k2_transfer = K2ConnectRuby::K2Entity::K2Transfer.new(your_access_token)
358
370
  # Blind or Targeted Transfer
359
371
  k2_transfer.transfer_funds(your_input)
360
372
  ```
@@ -373,30 +385,35 @@ A HTTP Response will be returned in a JSON Payload, accessible with the k2_respo
373
385
 
374
386
  ### Polling
375
387
 
376
- Allows you to poll transactions received on the Kopo Kopo system within a certain time range, and either a company or a specific till.
377
-
378
- First Create the K2Notification Object
388
+ Allows you to poll transactions received on the Kopo Kopo system within a certain time range, and either for a company or a specific till.
379
389
 
380
- k2_notification = K2Notification.new(access_token)
390
+ First Create the K2Polling Object
381
391
 
382
- #### Send SMS Notification
392
+ k2_polling = K2ConnectRuby::K2Entity::K2Polling.new(access_token)
383
393
 
384
- The Following Details should be passed for creating the notification:
394
+ The following details should be passed:
385
395
 
386
- - fromTime `REQUIRED`
387
- - toTime `REQUIRED`
388
396
  - scope `REQUIRED`
389
- - scopeReference `REQUIRED`
397
+ - scope_reference
398
+ - from_time `REQUIRED`
399
+ - to_time `REQUIRED`
390
400
  - callback_url `REQUIRED`
391
401
 
392
- The Params are passed as the argument containing all the form data sent. A Successful Response is returned with the URL of the request in the HTTP Location Header.
393
-
394
402
  Sample code example:
395
403
 
396
404
  ```ruby
397
- k2_notification = K2Notification.new(your_access_token)
398
- # Blind or Targeted Transfer
399
- k2_notification.send_sms_transaction_notification(request_payload)
405
+ your_input =
406
+ {
407
+ scope: "company",
408
+ scope_reference: "",
409
+ from_time: "2021-04-12T08:50:22+03:00",
410
+ to_time: "2021-04-19T08:50:22+03:00",
411
+ callback_url: 'https://call_back_to_your_app.your_application.com'
412
+ }
413
+
414
+ k2_polling = K2ConnectRuby::K2Entity::K2Polling.new("your_access_token")
415
+ k2_polling.poll(your_input)
416
+ k2_polling.location_url # => "https://sandbox.kopokopo.com/api/v1/polling/247b1bd8-f5a0-4b71-a898-f62f67b8ae1c"
400
417
  ```
401
418
 
402
419
  #### Query Request
@@ -420,7 +437,7 @@ K2ProcessResult Classes will be used.
420
437
 
421
438
  First Create an Object of the K2Client class to Parse the response, passing the client_secret_key received from Kopo Kopo:
422
439
 
423
- k2_parse = K2Client.new(client_secret)
440
+ k2_parse = K2ConnectRuby::K2Services::K2Client.new(client_secret)
424
441
 
425
442
  ###### Parse the request
426
443
 
@@ -430,14 +447,18 @@ First Create an Object of the K2Client class to Parse the response, passing the
430
447
 
431
448
  Create an Object to receive the components resulting from processing the parsed request results which will be returned by the following method:
432
449
 
433
- k2_components = K2ProcessResult.process(k2_parse.hash_body)
450
+ k2_components = K2ConnectRuby::K2Utilities::K2ProcessResult.process(k2_parse.hash_body, API_KEY, k2_parse.k2_signature)
451
+
452
+ or the parsed webhook results which will be returned by the following method:
453
+
454
+ k2_components = K2ConnectRuby::K2Utilities::K2ProcessWebhook.process(k2_parse.hash_body, API_KEY, k2_parse.k2_signature)
434
455
 
435
456
  Code example:
436
457
 
437
458
  ```ruby
438
- k2_parse = K2Client.new(client_secret)
459
+ k2_parse = K2ConnectRuby::K2Services::K2Client.new(API_KEY)
439
460
  k2_parse.parse_request(request)
440
- k2_components = K2ProcessResult.process(k2_parse.hash_body)
461
+ k2_components = K2ConnectRuby::K2Utilities::K2ProcessResult.process(k2_parse.hash_body, API_KEY, k2_parse.k2_signature)
441
462
  ```
442
463
 
443
464
  Below is a list of key symbols accessible for each of the Results retrieved after processing it into an Object.
@@ -534,7 +555,7 @@ k2_components = K2ProcessResult.process(k2_parse.hash_body)
534
555
  - `links_resource`
535
556
  - `sending_till`
536
557
 
537
- 7. Process STK Push Payment Request Result
558
+ 6. Process STK Push Payment Request Result
538
559
  - `id`
539
560
  - `type`
540
561
  - `initiation_time`
@@ -557,7 +578,7 @@ k2_components = K2ProcessResult.process(k2_parse.hash_body)
557
578
  - `links_self`
558
579
  - `callback_url`
559
580
 
560
- 8. Process PAY Result
581
+ 7. Process PAY Result
561
582
  - `id`
562
583
  - `type`
563
584
  - `created_at`
@@ -569,7 +590,7 @@ k2_components = K2ProcessResult.process(k2_parse.hash_body)
569
590
  - `links_self`
570
591
  - `callback_url`
571
592
 
572
- 9. Process Settlement Transfer Result
593
+ 8. Process Settlement Transfer Result
573
594
  - `id`
574
595
  - `type`
575
596
  - `created_at`
@@ -584,13 +605,13 @@ If you want to convert the Object into a Hash or Array, the following methods ca
584
605
  - Hash:
585
606
 
586
607
 
587
- k2_hash_components = K2ProcessResult.return_obj_hash(k2_components)
608
+ k2_hash_components = K2ConnectRuby::K2Utilities::K2ProcessResult.return_obj_hash(k2_components)
588
609
 
589
610
 
590
611
  - Array:
591
612
 
592
613
 
593
- k2_array_components = K2ProcessResult.return_obj_array(k2_components)
614
+ k2_array_components = K2ConnectRuby::K2Utilities::K2ProcessResult.return_obj_array(k2_components)
594
615
 
595
616
 
596
617
  Sample Web Application examples written in Rails and Sinatra frameworks that utilize this library are available in the example_app folder or in the following GitHub hyperlinks:
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = 'Ruby SDK for the Kopo Kopo K2 Connect API, with webhook subscriptions, STK Push, Pay and Settlement Transfer capabilities. Allows decomposition and break down of results and webhooks returned from the K2 Connect APIx``.'
13
13
  spec.homepage = 'https://github.com/kopokopo/k2-connect-ruby.git'
14
14
  spec.license = 'MIT'
15
- spec.required_ruby_version = '~> 2.6.5'
15
+ spec.required_ruby_version = '~> 3.3.5'
16
16
 
17
17
 
18
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -38,16 +38,17 @@ Gem::Specification.new do |spec|
38
38
  spec.require_paths = ['lib']
39
39
 
40
40
 
41
- spec.add_dependency 'activesupport', '~> 6.1.3.1'
42
- spec.add_dependency 'activemodel', '~> 6.1.3.1'
43
- spec.add_development_dependency 'bundler', '~> 2.0'
44
- spec.add_development_dependency "guard", '~> 2.16.2'
45
- spec.add_development_dependency "guard-rspec", '~> 4.7.3'
41
+ spec.add_dependency 'activesupport', '~> 7.2.2'
42
+ spec.add_dependency 'activemodel', '~> 7.2.2'
46
43
  spec.add_dependency 'rest-client', '~> 2.1.0'
47
- spec.add_development_dependency 'rake', '~> 13.0.3'
48
- spec.add_development_dependency 'rspec', '~> 3.10.0'
44
+ spec.add_dependency 'json', '~> 2.8.2'
45
+ spec.add_development_dependency 'bundler', '~> 2.5.16'
46
+ spec.add_development_dependency "guard", '~> 2.19'
47
+ spec.add_development_dependency "guard-rspec", '~> 4.7.3'
48
+ spec.add_development_dependency 'rake', '~> 13.2.1'
49
+ spec.add_development_dependency 'rspec', '~> 3.13.0'
49
50
  spec.add_development_dependency "rspec-nc", '~> 0.3.0'
50
- spec.add_development_dependency 'vcr', '~> 6.0.0'
51
- spec.add_development_dependency 'webmock', '~> 3.12.2'
52
- spec.add_dependency 'yajl-ruby', '~> 1.4.1'
51
+ spec.add_development_dependency 'vcr', '~> 6.3.1'
52
+ spec.add_development_dependency 'webmock', '~> 3.24'
53
+ spec.add_development_dependency 'faker', '~> 3.5.1'
53
54
  end
@@ -1,3 +1,4 @@
1
+ require 'k2-connect-ruby/k2_entity/k2_entity'
1
2
  require 'k2-connect-ruby/k2_entity/k2_token'
2
3
  require 'k2-connect-ruby/k2_entity/k2_polling'
3
4
  require 'k2-connect-ruby/k2_entity/k2_subscribe'
@@ -6,3 +7,7 @@ require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_stk'
6
7
  require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_pay'
7
8
  require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_transfer'
8
9
  require 'k2-connect-ruby/k2_entity/k2_financial_entities/k2_settlement'
10
+
11
+ module K2ConnectRuby
12
+ module Entity; end
13
+ end
@@ -1,34 +1,32 @@
1
1
  # Common Class Behaviours for stk, pay and transfers
2
- class K2Entity
3
- attr_accessor :access_token, :the_array
4
- attr_reader :k2_response_body, :query_hash, :location_url
5
- include K2Validation, K2Utilities
2
+ module K2ConnectRuby
3
+ module K2Entity
4
+ class K2Entity
5
+ attr_accessor :access_token, :the_array
6
+ attr_reader :k2_response_body, :query_hash, :location_url
7
+ include K2ConnectRuby::K2Utilities::K2Validation, K2ConnectRuby::K2Utilities
6
8
 
7
- # Initialize with access token from Subscriber Class
8
- def initialize(access_token)
9
- @access_token = access_token
10
- @threads = []
11
- @exception_array = %w[authenticity_token]
12
- end
9
+ # Initialize with access token from Subscriber Class
10
+ def initialize(access_token)
11
+ @access_token = access_token
12
+ @exception_array = %w[authenticity_token]
13
+ end
13
14
 
14
- # Query/Check the status of a previously initiated request
15
- def query_status(class_type, path_url)
16
- query(class_type, path_url)
17
- end
15
+ # Query/Check the status of a previously initiated request
16
+ def query_status(class_type, path_url)
17
+ query(class_type, path_url)
18
+ end
18
19
 
19
- # Query Location URL
20
- def query_resource(class_type, url)
21
- query(class_type, url)
22
- end
20
+ # Query Location URL
21
+ def query_resource(class_type, url)
22
+ query(class_type, url)
23
+ end
23
24
 
24
- def query(class_type, path_url)
25
- # TODO: Add back the validation to ensure only https location urls are returned
26
- # path_url = validate_url(@location_url)
27
- query_hash = make_hash(path_url, 'get', @access_token, class_type, nil)
28
- @threads << Thread.new do
29
- sleep 0.25
30
- @k2_response_body = K2Connect.make_request(query_hash)
25
+ def query(class_type, path_url)
26
+ path_url = validate_url(path_url)
27
+ query_hash = make_hash(path_url, 'get', @access_token, class_type, nil)
28
+ @k2_response_body = K2ConnectRuby::K2Utilities::K2Connection.make_request(query_hash)
29
+ end
31
30
  end
32
- @threads.each(&:join)
33
31
  end
34
32
  end