t2_airtime 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +413 -31
  4. data/Rakefile +23 -3
  5. data/app/controllers/t2_airtime/airtime_controller.rb +102 -102
  6. data/config/routes.rb +8 -8
  7. data/lib/t2_airtime/engine.rb +6 -0
  8. data/lib/t2_airtime/version.rb +1 -1
  9. data/lib/t2_airtime.rb +1 -0
  10. data/spec/dummy/Rakefile +6 -0
  11. data/spec/dummy/app/assets/config/manifest.js +2 -0
  12. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  13. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  14. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  15. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  16. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  17. data/spec/dummy/app/jobs/application_job.rb +2 -0
  18. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  19. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  20. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  21. data/spec/dummy/bin/bundle +3 -0
  22. data/spec/dummy/bin/rails +4 -0
  23. data/spec/dummy/bin/rake +4 -0
  24. data/spec/dummy/bin/setup +27 -0
  25. data/spec/dummy/bin/update +26 -0
  26. data/spec/dummy/config/application.rb +31 -0
  27. data/spec/dummy/config/boot.rb +5 -0
  28. data/spec/dummy/config/cable.yml +10 -0
  29. data/spec/dummy/config/environment.rb +5 -0
  30. data/spec/dummy/config/environments/development.rb +44 -0
  31. data/spec/dummy/config/environments/production.rb +80 -0
  32. data/spec/dummy/config/environments/test.rb +42 -0
  33. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  34. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/spec/dummy/config/initializers/cors.rb +16 -0
  36. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/spec/dummy/config/initializers/inflections.rb +16 -0
  38. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  39. data/spec/dummy/config/initializers/wrap_parameters.rb +9 -0
  40. data/spec/dummy/config/locales/en.yml +33 -0
  41. data/spec/dummy/config/puma.rb +56 -0
  42. data/spec/dummy/config/routes.rb +3 -0
  43. data/spec/dummy/config/secrets.yml +32 -0
  44. data/spec/dummy/config/spring.rb +6 -0
  45. data/spec/dummy/config.ru +5 -0
  46. data/spec/dummy/log/development.log +118 -0
  47. data/spec/dummy/log/test.log +0 -0
  48. data/spec/dummy/tmp/restart.txt +0 -0
  49. data/spec/rails_helper.rb +60 -0
  50. data/spec/spec_helper.rb +96 -0
  51. data/spec/t2_airtime_spec.rb +181 -0
  52. metadata +92 -73
  53. data/.gitignore +0 -14
  54. data/.rspec +0 -2
  55. data/.travis.yml +0 -5
  56. data/CODE_OF_CONDUCT.md +0 -74
  57. data/Gemfile +0 -6
  58. data/LICENSE.txt +0 -21
  59. data/doc/T2Airtime/API.html +0 -1152
  60. data/doc/T2Airtime/Account.html +0 -260
  61. data/doc/T2Airtime/AirtimeController.html +0 -491
  62. data/doc/T2Airtime/Base.html +0 -346
  63. data/doc/T2Airtime/ConfigurationError.html +0 -124
  64. data/doc/T2Airtime/Country.html +0 -448
  65. data/doc/T2Airtime/Engine.html +0 -124
  66. data/doc/T2Airtime/Error.html +0 -290
  67. data/doc/T2Airtime/Operator.html +0 -272
  68. data/doc/T2Airtime/Product.html +0 -294
  69. data/doc/T2Airtime/Reply.html +0 -775
  70. data/doc/T2Airtime/Request.html +0 -664
  71. data/doc/T2Airtime/Test.html +0 -221
  72. data/doc/T2Airtime/Transaction.html +0 -426
  73. data/doc/T2Airtime/Util.html +0 -338
  74. data/doc/T2Airtime.html +0 -147
  75. data/doc/_index.html +0 -265
  76. data/doc/class_list.html +0 -51
  77. data/doc/css/common.css +0 -1
  78. data/doc/css/full_list.css +0 -58
  79. data/doc/css/style.css +0 -492
  80. data/doc/file.README.html +0 -172
  81. data/doc/file_list.html +0 -56
  82. data/doc/frames.html +0 -17
  83. data/doc/index.html +0 -172
  84. data/doc/js/app.js +0 -248
  85. data/doc/js/full_list.js +0 -216
  86. data/doc/js/jquery.js +0 -4
  87. data/doc/method_list.html +0 -491
  88. data/doc/top-level-namespace.html +0 -110
  89. data/release +0 -7
  90. data/t2_airtime.gemspec +0 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 56a617eb55e1c54d012e7e70567160d234582bf6
4
- data.tar.gz: ba92d2ed04fa29d29ec939f4566abd3902b78475
3
+ metadata.gz: d5be1d81ae20b8777de2203112eb858f005a2d5c
4
+ data.tar.gz: 2cddc813b0f043c501119d1f654e921248a2daf9
5
5
  SHA512:
6
- metadata.gz: 21125b5e0d8e5a868b3dbf879a3160bffe290b097ca22f0475df99f0f60a4e7366ec18c2427af412798162e5e0989a01d9d2cebe7d5999add10a21fb60a7050c
7
- data.tar.gz: a41c43d24e395fc48225060f462dfcf4e71f4a5e82b05758be0f6fd3dafb4443a5af859c10758f8172a3fdc62cba0a7a90199f35ad757e43fb25e2a16ac3f9f6
6
+ metadata.gz: a0a908f95d48701e5c4df6784c0158c5bf3d71fb06b4d771f2d0948e0eda622f6aeacb8dac184a0cb501e15738efe23ffee0dc7c92f143faa0a3db78eac3c110
7
+ data.tar.gz: 724d54f3f1b4469f4e40942a102df63636a9e095bfc3f5bb4c4120ead886d48cc1e7ee5150b0ac79c87dacbd24a5be58f0346bde26486d4989d0948cfb93ec33
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 matteolc
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -8,18 +8,9 @@ This gem is a convenience wrapper around the Airtime API. Requirement is that Tw
8
8
 
9
9
  ## Usage
10
10
 
11
- Create a new rails application (the flags used here are just for simplicity):
12
-
13
- rails new airtime \
14
- --skip-active-record \
15
- --skip-yarn \
16
- --skip-action-cable \
17
- --skip-sprockets \
18
- --skip-spring \
19
- --skip-coffee \
20
- --skip-javascript \
21
- --skip-turbolinks \
22
- --api
11
+ Create a new rails application:
12
+
13
+ rails new t2_airtime
23
14
 
24
15
  Add this line to your application's Gemfile:
25
16
 
@@ -35,7 +26,6 @@ Create a `.env` file with the required information:
35
26
 
36
27
  T2_SHOP_USER=
37
28
  T2_AIRTIME_KEY=
38
- T2_CURRENCY=
39
29
 
40
30
  Start the server: `bundle exec puma -C config/puma.rb`
41
31
 
@@ -44,39 +34,431 @@ Start the server: `bundle exec puma -C config/puma.rb`
44
34
  The following routes are mada available to your application when you mount the API engine in `config/routes.rb`:
45
35
 
46
36
  ```ruby
47
- mount T2Airtime::Engine => '/airtime'
37
+ mount T2Airtime::Engine => '/t2_airtime'
48
38
  ```
49
39
 
50
- http://localhost:3000/airtime/transactions
51
- http://localhost:3000/airtime/transactions/<id>
52
- http://localhost:3000/airtime/countries
53
- http://localhost:3000/airtime/<country_id>/operators
54
- http://localhost:3000/airtime/<operator_id>/products
40
+ * `/t2_airtime/account` [Account information](#account_info)
41
+ * `/t2_airtime/countries` [List of all countries offered](#country_list)
42
+ * `/t2_airtime/countries/<country_id>/operators` [List of all operators available for a certain country](#operator_list)
43
+ * `/t2_airtime/countries/<country_id>/operators/<operator_id>/products` [List of all products available for a certain operator](#product_list)
44
+ * `/t2_airtime/transactions` [List all transactions](#transaction_list)
45
+ * `/t2_airtime/transactions/<id>` [Show a transaction](#transaction_show)
55
46
 
56
- ### Helpers
47
+ ### API Object
57
48
 
58
- Main API helper:
49
+ You can access the Airtime API in Ruby as:
59
50
 
60
51
  ```ruby
61
52
  api = T2Airtime::API.api
62
53
  ```
63
54
 
64
- [TBC]
55
+ The following methods are available to the `api` object:
65
56
 
66
- ## Development
57
+ * `ping` [Test the connection to the Airtime API](#ping)
58
+ * `account_info` [Information regarding your TransferTo account](#account_info)
59
+ * `country_list` [Retrieve available countries](#country_list)
60
+ * `operator_list` [Retrieve all operators available for a certain country](#operator_list)
61
+ * `product_list` [Retrieve all products available for a certain operator](#product_list)
62
+ * `transaction_list` [Retrieve the list of transactions performed within a date range](#transaction_list)
63
+ * `transaction_info` [Retrieve available information on a specific transaction](#transaction_info)
64
+ * `topup` Recharge a destination number with a specified product.
65
+ * `msisdn_info` Retrieve various information of a specific MSISDN as well as the list of all products configured for your specific account and the destination operator of the MSISDN.
66
+ * `reserve_id` Reserve a transaction ID in the system. Maybe used in a topup operation.
67
+ * `get_id_from_key` Retrieve the ID of a transaction previously performed based on the key used in the request at that time.
67
68
 
68
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
69
+ Each method returns an object with the following properties:
69
70
 
70
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
71
+ * `success?` `true` if the request was successful.
72
+ * `status` The HTTP status of the reply. `200` indicates a successful request.
73
+ * `error_code` The error code of the request. `0` indicates a successful request.
74
+ * `error_message` The error message of the request. `Transaction successful` indicates a successful request.
75
+ * `url` The full URL of the request.
76
+ * `information` The response body as a hash.
77
+ * `auth_key` The authorization key used in the request.
78
+ * `headers` The HTTP Headers of the reply.
79
+ * `raw` The raw body of the reply.
71
80
 
72
- ## Contributing
81
+ <a name="ping"></a>
82
+ #### Ping
73
83
 
74
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/t2_airtime. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
84
+ This method can be used for keep-alive. To test the connection with the API:
75
85
 
76
- ## License
86
+ ```ruby
87
+ irb(main)> response= T2Airtime::API.api.ping
88
+ irb(main)> response.success?
89
+ => true
90
+ ```
91
+
92
+ <a name="account_info"></a>
93
+ #### Account Information
94
+
95
+ The `account_info` method retrieves the various information regarding your TransferTo account.
96
+ To format the response as JSON-API you can call `T2Airtime::Account.serialize(data)`.
97
+
98
+ From a Rails console (or Ruby file):
99
+
100
+ ```ruby
101
+ irb(main)> response= T2Airtime::API.api.account_info
102
+ irb(main)> account= T2Airtime::Account.serialize(response.data)
103
+ ```
104
+
105
+ The serializer returns the following JSON representation of your account:
106
+
107
+ ```ruby
108
+ {
109
+ "type": "accounts",
110
+ # Account login name
111
+ "id": ACCOUNT_ID,
112
+ "attributes": {
113
+ # Account type: "Master" (main account) or "Retailer" (subaccount)
114
+ "type": ACCOUNT_TYPE
115
+ # Account login name
116
+ "name": ACCOUNT_NAME,
117
+ # Account currency (USD, GBP, EUR, etc…)
118
+ "currency": ACCOUNT_CURRENCY,
119
+ # For main account: returns the account’s remaining balance.
120
+ # For sub-account: returns the account’s remaining limit balance
121
+ # of the day if a daily limit is fixed. Else, returns the account
122
+ # remaining balance
123
+ "balance": ACCOUNT_BALANCE,
124
+ # For main account: returns the total remaining balance (sum
125
+ # of all sub-accounts and current master).
126
+ # For sub-account:
127
+ # 1. If balance is shared and daily limit is fixed: returns the fixed daily limit amount
128
+ # 2. If balance is shared but daily limit is not fixed: returns "No Limit"
129
+ # 3. Else if balance is not shared: returns the remaining balance
130
+ "wallet": ACCOUNT_WALLET,
131
+ # The time at which the information was fetched.
132
+ # Can be used for caching purposes.
133
+ "fetched-at": TIMESTAMP
134
+ }
135
+ }
136
+ {{</ highlight >}}
137
+
138
+ From a browser:
139
+ [http://localhost:3000/account](/)
140
+
141
+ ![JSON response](/img/account_json.png)
142
+
143
+ <a name="country_list"></a>
144
+ #### Country List
145
+
146
+ The `country_list` method retrieves the countries offered in your TransferTo price list.
147
+ To format the response as JSON-API you can call `T2Airtime::Country.serialize(data)`.
148
+
149
+ From a Rails console (or Ruby file):
150
+
151
+ ```ruby
152
+ irb(main)> response= T2Airtime::API.api.country_list
153
+ irb(main)> countries= T2Airtime::Country.serialize(response.data)
154
+ ```
155
+
156
+ The serializer returns the following JSON representation of a country:
157
+
158
+ ```ruby
159
+ {
160
+ "type": "countries",
161
+ # Unique Airtime ID for the country
162
+ "id": COUNTRY_ID,
163
+ "attributes": {
164
+ # The country name
165
+ "name": COUNTRY_NAME,
166
+ # The ISO 3166-1 country alpha-3, https://it.wikipedia.org/wiki/ISO_3166-1_alpha-3
167
+ # Can be used for unique country identification.
168
+ "alpha3": COUNTRY_ALPHA3,
169
+ # The time at which the country was fetched.
170
+ # Can be used for caching purposes.
171
+ "fetched-at": TIMESTAMP
172
+ },
173
+ "relationships": {
174
+ "operators": { "links": { "related": "/countries/COUNTRY_ID/operators" } }
175
+ }
176
+ }
177
+ ```
178
+
179
+ The `relationships` section of the response provides a link you can use to navigate the country operators.
180
+
181
+ From a browser:
182
+ [http://localhost:3000/countries](/)
183
+
184
+ ![JSON response](/img/country_list_json.png)
185
+
186
+ <a name="operator_list"></a>
187
+ #### Operator List
188
+
189
+ The `operator_list` method retrieves the operators available for a certain country.
190
+ To format the response as JSON-API you can call `T2Airtime::Operator.serialize(data)`.
191
+
192
+ From a Rails console (or Ruby file):
193
+
194
+ ```ruby
195
+ irb(main)> response= T2Airtime::API.api.operator_list countries.shuffle.first["id"]
196
+ irb(main)> operators= T2Airtime::Operator.serialize(response.data)
197
+ ```
198
+
199
+ The serializer returns the following JSON representation of an operator:
200
+
201
+ ```ruby
202
+ {
203
+ "type": "operators",
204
+ # Unique Airtime ID for the operator
205
+ "id": OPERATOR_ID,
206
+ "attributes": {
207
+ # The operator name
208
+ "name": OPERATOR_NAME,
209
+ # The time at which the operator was fetched.
210
+ # Can be used for caching purposes.
211
+ "fetched-at": TIMESTAMP
212
+ },
213
+ "links": {
214
+ # The URL at which you can retrieve the operator's logo
215
+ logo: OPERATOR_LOGO_URL
216
+ },
217
+ "relationships": {
218
+ "country": { "data": { "type": "countries", "id": COUNTRY_ID } },
219
+ "products": { "links": { "related": "/countries/COUNTRY_ID/operators/OPERATOR_ID/products" } }
220
+ },
221
+ "included": [
222
+ {
223
+ "type": "countries",
224
+ "id": COUNTRY_ID,
225
+ "attributes": {
226
+ "name": COUNTRY_NAME,
227
+ "alpha3": COUNTRY_ALPHA3
228
+ }
229
+ }
230
+ ]
231
+ }
232
+ ```
233
+
234
+ * The `relationships` section of the response provides a link you can use to navigate the operator products.
235
+ * The `included` section of the response provides all the information regarding the operator's country.
236
+
237
+ From a browser:
238
+ [http://localhost:3000/countries/COUNTRY_ID/operators](/)
239
+
240
+ ![JSON response](/img/operator_list_json.png)
241
+
242
+ <a name="product_list"></a>
243
+ #### Product List
77
244
 
78
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
245
+ The `product_list` method retrieves the products available for a certain operator.
246
+ To format the response as JSON-API you can call `T2Airtime::Product.serialize(data)`.
79
247
 
80
- ## Code of Conduct
248
+ From a Rails console (or Ruby file):
249
+
250
+ ```ruby
251
+ irb(main)> response= T2Airtime::API.api.product_list operators.shuffle.first["id"]
252
+ irb(main)> products= T2Airtime::Product.serialize(response.data)
253
+ ```
254
+
255
+ The serializer returns the following JSON representation of a product:
256
+
257
+ ```ruby
258
+ {
259
+ "type": "products",
260
+ # Airtime ID for the product. Attention! It is only unique within
261
+ # the scope of the operator
262
+ "id": PRODUCT_ID,
263
+ "attributes": {
264
+ # The product name, or face value for display, es. 5EUR
265
+ "name": PRODUCT_NAME,
266
+ # Currency of the destination country
267
+ "currency": PRODUCT_CURRENCY,
268
+ # The face value of the product (same as id)
269
+ "local-price": PRODUCT_LOCAL_PRICE,
270
+ # The retail price of the product
271
+ "retail-price": PRODUCT_RETAIL_PRICE,
272
+ # The wholesale price (also known as your cost) of the product
273
+ "wholesale-price": PRODUCT_WHOLESALE_PRICE,
274
+ # The time at which the operator was fetched.
275
+ # Can be used for caching purposes.
276
+ "fetched-at": TIMESTAMP
277
+ },
278
+ "relationships": {
279
+ "country": { "data": { "type": "countries", "id": COUNTRY_ID } },
280
+ "operator": { "data": { "type": "operators", "id": OPERATOR_ID } }
281
+ },
282
+ "included": [
283
+ {
284
+ "type": "countries",
285
+ "id": COUNTRY_ID,
286
+ "attributes": {
287
+ "name": COUNTRY_NAME,
288
+ "alpha3": COUNTRY_ALPHA3
289
+ }
290
+ },
291
+ {
292
+ "type": "operators",
293
+ "id": OPERATOR_ID,
294
+ "attributes": { "name": OPERATOR_NAME },
295
+ "links": { "logo": OPERATOR_LOGO_URL }
296
+ }
297
+ ]
298
+ }
299
+ }
300
+ ```
301
+
302
+ * The `relationships` section of the response provides a link you can use to navigate the product `included` relationships.
303
+ * The `included` section of the response provides all the information regarding the product's country and operator.
304
+
305
+ From a browser:
306
+ [http://localhost:3000/countries/COUNTRY_ID/operators/OPERATOR_ID/products](/)
307
+
308
+ ![JSON response](/img/product_list_json.png)
309
+
310
+ <a name="transaction_list"></a>
311
+ #### Transaction List
312
+
313
+ The `transaction_list` method retrieves all transaction within the specified time-range.
314
+ To format the response as JSON-API you can call `T2Airtime::Transaction.serialize(data)`.
315
+
316
+ From a Rails console (or Ruby file):
317
+
318
+ ```ruby
319
+ irb(main)> response= T2Airtime::API.api.transaction_list
320
+ irb(main)> transactions= T2Airtime::Transaction.serialize(response.data)
321
+ ```
322
+
323
+ From a browser:
324
+ [http://localhost:3000/transactions](/)
325
+
326
+ ![JSON response](/img/transaction_list_json.png)
327
+
328
+
329
+ <a name="transaction_info"></a>
330
+ #### Transaction Information
331
+
332
+ The `transaction_info` method retrieves information regarding a certain transaction.
333
+ To format the response as JSON-API you can call `T2Airtime::Transaction.serialize_one(data)`.
334
+
335
+ From a Rails console (or Ruby file):
336
+
337
+ ```ruby
338
+ irb(main)> response= T2Airtime::API.api.transaction_info
339
+ irb(main)> transactions= T2Airtime::Transaction.serialize_one(response.data)
340
+ {{</ highlight >}}
341
+
342
+ The serializer returns the following JSON representation of a transaction:
343
+
344
+ ```ruby
345
+ {
346
+ type: "transactions",
347
+ # Unique Airtime ID for the transaction
348
+ id: TRANSACTION_ID,
349
+ attributes: {
350
+ # The international phone number or name of
351
+ # the user (sender) requesting to credit a phone
352
+ # number
353
+ "msisdn": TRANSACTION_MSISDN,
354
+ # Destination MSISDN (usually recipient phone number)
355
+ "destination-msisdn": TRANSACTION_DESTINATION_MSISDN,
356
+ # Authentication key used during the transaction
357
+ "transaction-authentication-key": TRANSACTION_AUTHENTICATION_KEY,
358
+ # Error code for the transaction
359
+ "transaction-error-code": TRANSACTION_ERROR_CODE,
360
+ # Description of the error code for the transaction
361
+ "transaction-error-txt": TRANSACTION_ERROR_TEXT,
362
+ # Reference of the operator (returned only if available)
363
+ "reference-operator": TRANSACTION_REFERENCE_OPERATOR,
364
+ # Returns the value requested to the operator
365
+ # (equals to product_requested in case of successful
366
+ # transaction). It equals to 0 when Top-up
367
+ # failed.
368
+ "actual-product-sent": TRANSACTION_PRODUCT_SENT,
369
+ # Recipient SMS
370
+ # Returns the custom message appended to the
371
+ # default notification SMS sent to the recipient
372
+ "sms": TRANSACTION_SMS,
373
+ # Value of the customized field cid1 sent in the Top-up request
374
+ "cid1": TRANSACTION_CID1,
375
+ # Value of the customized field cid2 sent in the Top-up request
376
+ "cid2": TRANSACTION_CID2,
377
+ # Value of the customized field cid3 sent in the Top-up request
378
+ "cid3": TRANSACTION_CID3,
379
+ # Date of the transaction (GMT)
380
+ "date": TRANSACTION_DATE,
381
+ # Currency of the account from which the transaction is requested
382
+ "originating-currency": TRANSACTION_ORIGINATING_CURRENCY,
383
+ # Currency of the destination country
384
+ "destination-currency": TRANSACTION_DESTINATION_CURRENCY,
385
+ # Type of product returned ("Yes", default "No" if not set)
386
+ "pin-based": TRANSACTION_PIN_BASED,
387
+ # Final amount received by recipient. Indicative value only
388
+ "local-info-amount": TRANSACTION_LOCAL_INFO_AMOUNT,
389
+ # Local currency in destination
390
+ "local-info-currency": TRANSACTION_LOCAL_INFO_CURRENCY,
391
+ # Value of the transaction before tax and service
392
+ # fee in local currency.
393
+ "local-info-amount": TRANSACTION_LOCAL_INFO_AMOUNT,
394
+ # The time at which the transaction was fetched.
395
+ # Can be used for caching purposes.
396
+ "fetched-at": TIMESTAMP
397
+ },
398
+ relationships: {
399
+ country: { data: { type: "countries", id: COUNTRY_ID } },
400
+ operator: { data: { type: "operators", id: OPERATOR_ID } },
401
+ product: { data: { type: "products", id: PRODUCT_ID } }
402
+ },
403
+ included: [
404
+ {
405
+ type: "countries",
406
+ id: COUNTRY_ID,
407
+ attributes: {
408
+ "name": COUNTRY_NAME,
409
+ "alpha3": COUNTRY_ALPHA3
410
+ }
411
+ },
412
+ {
413
+ type: "operators",
414
+ id: OPERATOR_ID,
415
+ attributes: { "name": OPERATOR_NAME },
416
+ links: { logo: OPERATOR_LOGO_URL }
417
+ },
418
+ {
419
+ type: "products",
420
+ id: PRODUCT_ID,
421
+ attributes: {
422
+ "name": PRODUCT_NAME,
423
+ "currency": PRODUCT_CURRENCY,
424
+ "wholesale-price": PRODUCT_WHOLESALE_PRICE,
425
+ "retail-price": PRODUCT_RETAIL_PRICE,
426
+ "local-price": PRODUCT_LOCAL_PRICE
427
+ }
428
+ }
429
+ ]
430
+ }
431
+ ```
432
+
433
+ * The `relationships` section of the response provides a link you can use to navigate the product `included` relationships.
434
+ * The `included` section of the response provides all the information regarding the product's country and operator.
435
+
436
+ From a browser:
437
+ [http://localhost:3000/transactions/TRANSACTION_ID](/)
438
+
439
+ ![JSON response](/img/transaction_list_json.png)
440
+
441
+ ## Testing
442
+
443
+ Clone this repository and export your secrets:
444
+
445
+ $> export T2_SHOP_USER=
446
+ $> export T2_AIRTIME_KEY=
447
+
448
+ Execute:
449
+
450
+ rake
451
+
452
+ To execute the test application:
453
+
454
+ cd spec/dummy
455
+
456
+ Start the server: `puma -C config/puma.rb`
457
+
458
+ ## Contributing
459
+
460
+ Bug reports and pull requests are welcome on GitHub at https://github.com/matteolc/t2_airtime.
461
+
462
+ ## License
81
463
 
82
- Everyone interacting in the T2Airtime project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/t2_airtime/blob/master/CODE_OF_CONDUCT.md).
464
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,6 +1,26 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
3
6
 
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'T2Airtime'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ load 'rails/tasks/statistics.rake'
18
+
19
+ require 'bundler/gem_tasks'
20
+
21
+ require 'rspec/core/rake_task'
4
22
  RSpec::Core::RakeTask.new(:spec)
5
23
 
6
- task :default => :spec
24
+ task default: :spec
25
+
26
+