genesis_ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +11 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +158 -0
  5. data/LICENSE +21 -0
  6. data/README.md +343 -0
  7. data/Rakefile +12 -0
  8. data/VERSION +1 -0
  9. data/genesis_ruby.gemspec +43 -0
  10. data/lib/genesis_ruby/api/constants/currencies/iso4217.rb +1106 -0
  11. data/lib/genesis_ruby/api/constants/date_time_formats.rb +45 -0
  12. data/lib/genesis_ruby/api/constants/endpoints.rb +18 -0
  13. data/lib/genesis_ruby/api/constants/environments.rb +17 -0
  14. data/lib/genesis_ruby/api/constants/states/state.rb +43 -0
  15. data/lib/genesis_ruby/api/constants/states.rb +86 -0
  16. data/lib/genesis_ruby/api/constants/transactions/parameters/business/payment_types.rb +24 -0
  17. data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/categories.rb +24 -0
  18. data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/types.rb +28 -0
  19. data/lib/genesis_ruby/api/constants/transactions/parameters/sca_exemptions.rb +34 -0
  20. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/browser/color_depths.rb +46 -0
  21. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/password_change_indicators.rb +37 -0
  22. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/registration_indicators.rb +37 -0
  23. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/shipping_address_usage_indicators.rb +34 -0
  24. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/suspicious_activity_indicators.rb +28 -0
  25. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/update_indicators.rb +34 -0
  26. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_indicators.rb +34 -0
  27. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_window_sizes.rb +37 -0
  28. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/device_types.rb +28 -0
  29. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/delivery_timeframes.rb +34 -0
  30. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/pre_order_purchase_indicators.rb +28 -0
  31. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/reorder_item_indicators.rb +28 -0
  32. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/shipping_indicators.rb +46 -0
  33. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/purchase/categories.rb +43 -0
  34. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/interfaces.rb +31 -0
  35. data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/ui_types.rb +37 -0
  36. data/lib/genesis_ruby/api/constants/transactions.rb +371 -0
  37. data/lib/genesis_ruby/api/mixins/constants/common.rb +27 -0
  38. data/lib/genesis_ruby/api/mixins/requests/address_info_attributes.rb +20 -0
  39. data/lib/genesis_ruby/api/mixins/requests/customer_address/billing_info_attributes.rb +33 -0
  40. data/lib/genesis_ruby/api/mixins/requests/customer_address/customer_info_attributes.rb +26 -0
  41. data/lib/genesis_ruby/api/mixins/requests/customer_address/shipping_info_attributes.rb +33 -0
  42. data/lib/genesis_ruby/api/mixins/requests/document_attributes.rb +14 -0
  43. data/lib/genesis_ruby/api/mixins/requests/financial/async_attributes.rb +34 -0
  44. data/lib/genesis_ruby/api/mixins/requests/financial/base_attributes.rb +16 -0
  45. data/lib/genesis_ruby/api/mixins/requests/financial/business/airlines_air_carriers_attributes.rb +60 -0
  46. data/lib/genesis_ruby/api/mixins/requests/financial/business/business_attributes.rb +56 -0
  47. data/lib/genesis_ruby/api/mixins/requests/financial/business/car_plane_and_boat_rentals_attributes.rb +53 -0
  48. data/lib/genesis_ruby/api/mixins/requests/financial/business/cruise_lines_attributes.rb +50 -0
  49. data/lib/genesis_ruby/api/mixins/requests/financial/business/event_management_attributes.rb +54 -0
  50. data/lib/genesis_ruby/api/mixins/requests/financial/business/furniture_attributes.rb +53 -0
  51. data/lib/genesis_ruby/api/mixins/requests/financial/business/hotels_and_real_estate_rentals_attributes.rb +53 -0
  52. data/lib/genesis_ruby/api/mixins/requests/financial/business/travel_agencies_attributes.rb +88 -0
  53. data/lib/genesis_ruby/api/mixins/requests/financial/cards/credit_card_attributes.rb +31 -0
  54. data/lib/genesis_ruby/api/mixins/requests/financial/cards/fx_rate_attributes.rb +18 -0
  55. data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_category_attributes.rb +31 -0
  56. data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_type_attributes.rb +31 -0
  57. data/lib/genesis_ruby/api/mixins/requests/financial/cards/tokenization_attributes.rb +39 -0
  58. data/lib/genesis_ruby/api/mixins/requests/financial/crypto_attributes.rb +25 -0
  59. data/lib/genesis_ruby/api/mixins/requests/financial/dynamic_descriptor_attributes.rb +114 -0
  60. data/lib/genesis_ruby/api/mixins/requests/financial/gaming_attributes.rb +25 -0
  61. data/lib/genesis_ruby/api/mixins/requests/financial/moto_attributes.rb +25 -0
  62. data/lib/genesis_ruby/api/mixins/requests/financial/notification_attributes.rb +25 -0
  63. data/lib/genesis_ruby/api/mixins/requests/financial/payment_attributes.rb +32 -0
  64. data/lib/genesis_ruby/api/mixins/requests/financial/pending_payment_attributes.rb +25 -0
  65. data/lib/genesis_ruby/api/mixins/requests/financial/reference_attributes.rb +16 -0
  66. data/lib/genesis_ruby/api/mixins/requests/financial/risk_attributes.rb +47 -0
  67. data/lib/genesis_ruby/api/mixins/requests/financial/sca_attributes.rb +37 -0
  68. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/browser.rb +92 -0
  69. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account.rb +183 -0
  70. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/common_attributes.rb +52 -0
  71. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/control.rb +61 -0
  72. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk.rb +114 -0
  73. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/method.rb +44 -0
  74. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase.rb +42 -0
  75. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/recurring.rb +49 -0
  76. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/sdk.rb +107 -0
  77. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/wpf_attributes.rb +61 -0
  78. data/lib/genesis_ruby/api/mixins/requests/restricted_setter.rb +75 -0
  79. data/lib/genesis_ruby/api/request.rb +171 -0
  80. data/lib/genesis_ruby/api/requests/base/financial.rb +44 -0
  81. data/lib/genesis_ruby/api/requests/base/financials/credit_card.rb +27 -0
  82. data/lib/genesis_ruby/api/requests/financial/cards/authorize.rb +60 -0
  83. data/lib/genesis_ruby/api/requests/financial/cards/authorize3d.rb +76 -0
  84. data/lib/genesis_ruby/api/requests/financial/cards/sale.rb +59 -0
  85. data/lib/genesis_ruby/api/requests/financial/cards/sale3d.rb +75 -0
  86. data/lib/genesis_ruby/api/requests/wpf/create.rb +142 -0
  87. data/lib/genesis_ruby/api/response.rb +91 -0
  88. data/lib/genesis_ruby/builder.rb +42 -0
  89. data/lib/genesis_ruby/builders/base.rb +18 -0
  90. data/lib/genesis_ruby/builders/xml.rb +95 -0
  91. data/lib/genesis_ruby/configuration.rb +177 -0
  92. data/lib/genesis_ruby/connection.rb +20 -0
  93. data/lib/genesis_ruby/dependencies.rb +19 -0
  94. data/lib/genesis_ruby/errors/builder_error.rb +14 -0
  95. data/lib/genesis_ruby/errors/endpoint_not_set_error.rb +14 -0
  96. data/lib/genesis_ruby/errors/error.rb +18 -0
  97. data/lib/genesis_ruby/errors/invalid_argument_error.rb +14 -0
  98. data/lib/genesis_ruby/errors/network_error.rb +14 -0
  99. data/lib/genesis_ruby/errors/object_formatter_error.rb +14 -0
  100. data/lib/genesis_ruby/errors/parameter_error.rb +12 -0
  101. data/lib/genesis_ruby/errors/parser_error.rb +14 -0
  102. data/lib/genesis_ruby/errors/response_error.rb +14 -0
  103. data/lib/genesis_ruby/network/adapter/base_adapter.rb +31 -0
  104. data/lib/genesis_ruby/network/adapter/net_http_adapter.rb +92 -0
  105. data/lib/genesis_ruby/network/base_network.rb +83 -0
  106. data/lib/genesis_ruby/network/net_http.rb +28 -0
  107. data/lib/genesis_ruby/parser.rb +44 -0
  108. data/lib/genesis_ruby/parsers/base.rb +25 -0
  109. data/lib/genesis_ruby/parsers/xml.rb +120 -0
  110. data/lib/genesis_ruby/utils/common.rb +108 -0
  111. data/lib/genesis_ruby/utils/formatters/base.rb +40 -0
  112. data/lib/genesis_ruby/utils/formatters/response/definitions.rb +21 -0
  113. data/lib/genesis_ruby/utils/formatters/response/formats/amount.rb +34 -0
  114. data/lib/genesis_ruby/utils/formatters/response/formats/timestamp.rb +29 -0
  115. data/lib/genesis_ruby/utils/formatters/response/loader.rb +42 -0
  116. data/lib/genesis_ruby/utils/money/base/strategy.rb +38 -0
  117. data/lib/genesis_ruby/utils/money/conversions/amount_to_exponent.rb +22 -0
  118. data/lib/genesis_ruby/utils/money/conversions/exponent_to_amount.rb +22 -0
  119. data/lib/genesis_ruby/utils/money/format.rb +34 -0
  120. data/lib/genesis_ruby/utils/money_format.rb +39 -0
  121. data/lib/genesis_ruby/utils/object_formatter.rb +67 -0
  122. data/lib/genesis_ruby/utils/options/api_config.rb +36 -0
  123. data/lib/genesis_ruby/utils/options/base.rb +35 -0
  124. data/lib/genesis_ruby/utils/options/network_adapter_config.rb +41 -0
  125. data/lib/genesis_ruby/utils/transactions/financial_types.rb +50 -0
  126. data/lib/genesis_ruby/utils/transactions/references/capturable_types.rb +52 -0
  127. data/lib/genesis_ruby/utils/transactions/references/refundable_types.rb +70 -0
  128. data/lib/genesis_ruby/utils/transactions/references/voidable_types.rb +49 -0
  129. data/lib/genesis_ruby/utils/transactions/wpf_types.rb +43 -0
  130. data/lib/genesis_ruby/version.rb +5 -0
  131. data/lib/genesis_ruby.rb +57 -0
  132. metadata +372 -0
@@ -0,0 +1,1106 @@
1
+ require 'genesis_ruby/errors/invalid_argument_error'
2
+
3
+ module GenesisRuby
4
+ module Api
5
+ module Constants
6
+ module Currencies
7
+ # List of currencies, defined by ISO-4217
8
+ class Iso4217 # rubocop:disable Metrics/ClassLength
9
+
10
+ extend Mixins::Constants::Common
11
+
12
+ # List of currencies, defined by ISO-4217
13
+ ISO4217 = {
14
+ AED: {
15
+ name: 'UAE Dirham',
16
+ code: '784',
17
+ country: 'UNITED ARAB EMIRATES (THE)',
18
+ exponent: '2'
19
+ },
20
+ AFN: {
21
+ name: 'Afghani',
22
+ code: '971',
23
+ country: 'AFGHANISTAN',
24
+ exponent: '2'
25
+ },
26
+ ALL: {
27
+ name: 'Lek',
28
+ code: '008',
29
+ country: 'ALBANIA',
30
+ exponent: '2'
31
+ },
32
+ AMD: {
33
+ name: 'Armenian Dram',
34
+ code: '051',
35
+ country: 'ARMENIA',
36
+ exponent: '2'
37
+ },
38
+ ANG: {
39
+ name: 'Netherlands Antillean Guilder',
40
+ code: '532',
41
+ country: 'SINT MAARTEN (DUTCH PART)',
42
+ exponent: '2'
43
+ },
44
+ AOA: {
45
+ name: 'Kwanza',
46
+ code: '973',
47
+ country: 'ANGOLA',
48
+ exponent: '2'
49
+ },
50
+ ARS: {
51
+ name: 'Argentine Peso',
52
+ code: '032',
53
+ country: 'ARGENTINA',
54
+ exponent: '2'
55
+ },
56
+ AUD: {
57
+ name: 'Australian Dollar',
58
+ code: '036',
59
+ country: 'TUVALU',
60
+ exponent: '2'
61
+ },
62
+ AWG: {
63
+ name: 'Aruban Florin',
64
+ code: '533',
65
+ country: 'ARUBA',
66
+ exponent: '2'
67
+ },
68
+ AZN: {
69
+ name: 'Azerbaijanian Manat',
70
+ code: '944',
71
+ country: 'AZERBAIJAN',
72
+ exponent: '2'
73
+ },
74
+ BAM: {
75
+ name: 'Convertible Mark',
76
+ code: '977',
77
+ country: 'BOSNIA AND HERZEGOVINA',
78
+ exponent: '2'
79
+ },
80
+ BBD: {
81
+ name: 'Barbados Dollar',
82
+ code: '052',
83
+ country: 'BARBADOS',
84
+ exponent: '2'
85
+ },
86
+ BDT: {
87
+ name: 'Taka',
88
+ code: '050',
89
+ country: 'BANGLADESH',
90
+ exponent: '2'
91
+ },
92
+ BGN: {
93
+ name: 'Bulgarian Lev',
94
+ code: '975',
95
+ country: 'BULGARIA',
96
+ exponent: '2'
97
+ },
98
+ BHD: {
99
+ name: 'Bahraini Dinar',
100
+ code: '048',
101
+ country: 'BAHRAIN',
102
+ exponent: '3'
103
+ },
104
+ BIF: {
105
+ name: 'Burundi Franc',
106
+ code: '108',
107
+ country: 'BURUNDI',
108
+ exponent: '0'
109
+ },
110
+ BMD: {
111
+ name: 'Bermudian Dollar',
112
+ code: '060',
113
+ country: 'BERMUDA',
114
+ exponent: '2'
115
+ },
116
+ BND: {
117
+ name: 'Brunei Dollar',
118
+ code: '096',
119
+ country: 'BRUNEI DARUSSALAM',
120
+ exponent: '2'
121
+ },
122
+ BOB: {
123
+ name: 'Boliviano',
124
+ code: '068',
125
+ country: 'BOLIVIA (PLURINATIONAL STATE OF)',
126
+ exponent: '2'
127
+ },
128
+ BOV: {
129
+ name: 'Mvdol',
130
+ code: '984',
131
+ country: 'BOLIVIA (PLURINATIONAL STATE OF)',
132
+ exponent: '2'
133
+ },
134
+ BRL: {
135
+ name: 'Brazilian Real',
136
+ code: '986',
137
+ country: 'BRAZIL',
138
+ exponent: '2'
139
+ },
140
+ BSD: {
141
+ name: 'Bahamian Dollar',
142
+ code: '044',
143
+ country: 'BAHAMAS (THE)',
144
+ exponent: '2'
145
+ },
146
+ BTN: {
147
+ name: 'Ngultrum',
148
+ code: '064',
149
+ country: 'BHUTAN',
150
+ exponent: '2'
151
+ },
152
+ BWP: {
153
+ name: 'Pula',
154
+ code: '072',
155
+ country: 'BOTSWANA',
156
+ exponent: '2'
157
+ },
158
+ BYR: {
159
+ name: 'Belarussian Ruble',
160
+ code: '974',
161
+ country: 'BELARUS',
162
+ exponent: '0'
163
+ },
164
+ BZD: {
165
+ name: 'Belize Dollar',
166
+ code: '084',
167
+ country: 'BELIZE',
168
+ exponent: '2'
169
+ },
170
+ CAD: {
171
+ name: 'Canadian Dollar',
172
+ code: '124',
173
+ country: 'CANADA',
174
+ exponent: '2'
175
+ },
176
+ CDF: {
177
+ name: 'Congolese Franc',
178
+ code: '976',
179
+ country: 'CONGO (THE DEMOCRATIC REPUBLIC OF THE)',
180
+ exponent: '2'
181
+ },
182
+ CHE: {
183
+ name: 'WIR Euro',
184
+ code: '947',
185
+ country: 'SWITZERLAND',
186
+ exponent: '2'
187
+ },
188
+ CHF: {
189
+ name: 'Swiss Franc',
190
+ code: '756',
191
+ country: 'SWITZERLAND',
192
+ exponent: '2'
193
+ },
194
+ CHW: {
195
+ name: 'WIR Franc',
196
+ code: '948',
197
+ country: 'SWITZERLAND',
198
+ exponent: '2'
199
+ },
200
+ CLF: {
201
+ name: 'Unidad de Fomento',
202
+ code: '990',
203
+ country: 'CHILE',
204
+ exponent: '4'
205
+ },
206
+ CLP: {
207
+ name: 'Chilean Peso',
208
+ code: '152',
209
+ country: 'CHILE',
210
+ exponent: '0'
211
+ },
212
+ CNY: {
213
+ name: 'Yuan Renminbi',
214
+ code: '156',
215
+ country: 'CHINA',
216
+ exponent: '2'
217
+ },
218
+ COP: {
219
+ name: 'Colombian Peso',
220
+ code: '170',
221
+ country: 'COLOMBIA',
222
+ exponent: '2'
223
+ },
224
+ COU: {
225
+ name: 'Unidad de Valor Real',
226
+ code: '970',
227
+ country: 'COLOMBIA',
228
+ exponent: '2'
229
+ },
230
+ CRC: {
231
+ name: 'Costa Rican Colon',
232
+ code: '188',
233
+ country: 'COSTA RICA',
234
+ exponent: '2'
235
+ },
236
+ CUC: {
237
+ name: 'Peso Convertible',
238
+ code: '931',
239
+ country: 'CUBA',
240
+ exponent: '2'
241
+ },
242
+ CUP: {
243
+ name: 'Cuban Peso',
244
+ code: '192',
245
+ country: 'CUBA',
246
+ exponent: '2'
247
+ },
248
+ CVE: {
249
+ name: 'Cabo Verde Escudo',
250
+ code: '132',
251
+ country: 'CABO VERDE',
252
+ exponent: '2'
253
+ },
254
+ CZK: {
255
+ name: 'Czech Koruna',
256
+ code: '203',
257
+ country: 'CZECH REPUBLIC (THE)',
258
+ exponent: '2'
259
+ },
260
+ DJF: {
261
+ name: 'Djibouti Franc',
262
+ code: '262',
263
+ country: 'DJIBOUTI',
264
+ exponent: '0'
265
+ },
266
+ DKK: {
267
+ name: 'Danish Krone',
268
+ code: '208',
269
+ country: 'GREENLAND',
270
+ exponent: '2'
271
+ },
272
+ DOP: {
273
+ name: 'Dominican Peso',
274
+ code: '214',
275
+ country: 'DOMINICAN REPUBLIC (THE)',
276
+ exponent: '2'
277
+ },
278
+ DZD: {
279
+ name: 'Algerian Dinar',
280
+ code: '012',
281
+ country: 'ALGERIA',
282
+ exponent: '2'
283
+ },
284
+ EGP: {
285
+ name: 'Egyptian Pound',
286
+ code: '818',
287
+ country: 'EGYPT',
288
+ exponent: '2'
289
+ },
290
+ ERN: {
291
+ name: 'Nakfa',
292
+ code: '232',
293
+ country: 'ERITREA',
294
+ exponent: '2'
295
+ },
296
+ ETB: {
297
+ name: 'Ethiopian Birr',
298
+ code: '230',
299
+ country: 'ETHIOPIA',
300
+ exponent: '2'
301
+ },
302
+ EUR: {
303
+ name: 'Euro',
304
+ code: '978',
305
+ country: 'SPAIN',
306
+ exponent: '2'
307
+ },
308
+ FJD: {
309
+ name: 'Fiji Dollar',
310
+ code: '242',
311
+ country: 'FIJI',
312
+ exponent: '2'
313
+ },
314
+ FKP: {
315
+ name: 'Falkland Islands Pound',
316
+ code: '238',
317
+ country: 'FALKLAND ISLANDS (THE) [MALVINAS]',
318
+ exponent: '2'
319
+ },
320
+ GBP: {
321
+ name: 'Pound Sterling',
322
+ code: '826',
323
+ country: 'UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)',
324
+ exponent: '2'
325
+ },
326
+ GEL: {
327
+ name: 'Lari',
328
+ code: '981',
329
+ country: 'GEORGIA',
330
+ exponent: '2'
331
+ },
332
+ GHS: {
333
+ name: 'Ghana Cedi',
334
+ code: '936',
335
+ country: 'GHANA',
336
+ exponent: '2'
337
+ },
338
+ GIP: {
339
+ name: 'Gibraltar Pound',
340
+ code: '292',
341
+ country: 'GIBRALTAR',
342
+ exponent: '2'
343
+ },
344
+ GMD: {
345
+ name: 'Dalasi',
346
+ code: '270',
347
+ country: 'GAMBIA (THE)',
348
+ exponent: '2'
349
+ },
350
+ GNF: {
351
+ name: 'Guinea Franc',
352
+ code: '324',
353
+ country: 'GUINEA',
354
+ exponent: '0'
355
+ },
356
+ GTQ: {
357
+ name: 'Quetzal',
358
+ code: '320',
359
+ country: 'GUATEMALA',
360
+ exponent: '2'
361
+ },
362
+ GYD: {
363
+ name: 'Guyana Dollar',
364
+ code: '328',
365
+ country: 'GUYANA',
366
+ exponent: '2'
367
+ },
368
+ HKD: {
369
+ name: 'Hong Kong Dollar',
370
+ code: '344',
371
+ country: 'HONG KONG',
372
+ exponent: '2'
373
+ },
374
+ HNL: {
375
+ name: 'Lempira',
376
+ code: '340',
377
+ country: 'HONDURAS',
378
+ exponent: '2'
379
+ },
380
+ HRK: {
381
+ name: 'Kuna',
382
+ code: '191',
383
+ country: 'CROATIA',
384
+ exponent: '2'
385
+ },
386
+ HTG: {
387
+ name: 'Gourde',
388
+ code: '332',
389
+ country: 'HAITI',
390
+ exponent: '2'
391
+ },
392
+ HUF: {
393
+ name: 'Forint',
394
+ code: '348',
395
+ country: 'HUNGARY',
396
+ exponent: '2'
397
+ },
398
+ IDR: {
399
+ name: 'Rupiah',
400
+ code: '360',
401
+ country: 'INDONESIA',
402
+ exponent: '2'
403
+ },
404
+ ILS: {
405
+ name: 'New Israeli Sheqel',
406
+ code: '376',
407
+ country: 'ISRAEL',
408
+ exponent: '2'
409
+ },
410
+ INR: {
411
+ name: 'Indian Rupee',
412
+ code: '356',
413
+ country: 'INDIA',
414
+ exponent: '2'
415
+ },
416
+ IQD: {
417
+ name: 'Iraqi Dinar',
418
+ code: '368',
419
+ country: 'IRAQ',
420
+ exponent: '3'
421
+ },
422
+ IRR: {
423
+ name: 'Iranian Rial',
424
+ code: '364',
425
+ country: 'IRAN (ISLAMIC REPUBLIC OF)',
426
+ exponent: '2'
427
+ },
428
+ ISK: {
429
+ name: 'Iceland Krona',
430
+ code: '352',
431
+ country: 'ICELAND',
432
+ exponent: '0'
433
+ },
434
+ JMD: {
435
+ name: 'Jamaican Dollar',
436
+ code: '388',
437
+ country: 'JAMAICA',
438
+ exponent: '2'
439
+ },
440
+ JOD: {
441
+ name: 'Jordanian Dinar',
442
+ code: '400',
443
+ country: 'JORDAN',
444
+ exponent: '3'
445
+ },
446
+ JPY: {
447
+ name: 'Yen',
448
+ code: '392',
449
+ country: 'JAPAN',
450
+ exponent: '0'
451
+ },
452
+ KES: {
453
+ name: 'Kenyan Shilling',
454
+ code: '404',
455
+ country: 'KENYA',
456
+ exponent: '2'
457
+ },
458
+ KGS: {
459
+ name: 'Som',
460
+ code: '417',
461
+ country: 'KYRGYZSTAN',
462
+ exponent: '2'
463
+ },
464
+ KHR: {
465
+ name: 'Riel',
466
+ code: '116',
467
+ country: 'CAMBODIA',
468
+ exponent: '2'
469
+ },
470
+ KMF: {
471
+ name: 'Comoro Franc',
472
+ code: '174',
473
+ country: 'COMOROS (THE)',
474
+ exponent: '0'
475
+ },
476
+ KPW: {
477
+ name: 'North Korean Won',
478
+ code: '408',
479
+ country: 'KOREA (THE DEMOCRATIC PEOPLE’S REPUBLIC OF)',
480
+ exponent: '2'
481
+ },
482
+ KRW: {
483
+ name: 'Won',
484
+ code: '410',
485
+ country: 'KOREA (THE REPUBLIC OF)',
486
+ exponent: '0'
487
+ },
488
+ KWD: {
489
+ name: 'Kuwaiti Dinar',
490
+ code: '414',
491
+ country: 'KUWAIT',
492
+ exponent: '3'
493
+ },
494
+ KYD: {
495
+ name: 'Cayman Islands Dollar',
496
+ code: '136',
497
+ country: 'CAYMAN ISLANDS (THE)',
498
+ exponent: '2'
499
+ },
500
+ KZT: {
501
+ name: 'Tenge',
502
+ code: '398',
503
+ country: 'KAZAKHSTAN',
504
+ exponent: '2'
505
+ },
506
+ LAK: {
507
+ name: 'Kip',
508
+ code: '418',
509
+ country: 'LAO PEOPLE’S DEMOCRATIC REPUBLIC (THE)',
510
+ exponent: '2'
511
+ },
512
+ LBP: {
513
+ name: 'Lebanese Pound',
514
+ code: '422',
515
+ country: 'LEBANON',
516
+ exponent: '2'
517
+ },
518
+ LKR: {
519
+ name: 'Sri Lanka Rupee',
520
+ code: '144',
521
+ country: 'SRI LANKA',
522
+ exponent: '2'
523
+ },
524
+ LRD: {
525
+ name: 'Liberian Dollar',
526
+ code: '430',
527
+ country: 'LIBERIA',
528
+ exponent: '2'
529
+ },
530
+ LSL: {
531
+ name: 'Loti',
532
+ code: '426',
533
+ country: 'LESOTHO',
534
+ exponent: '2'
535
+ },
536
+ LYD: {
537
+ name: 'Libyan Dinar',
538
+ code: '434',
539
+ country: 'LIBYA',
540
+ exponent: '3'
541
+ },
542
+ MAD: {
543
+ name: 'Moroccan Dirham',
544
+ code: '504',
545
+ country: 'WESTERN SAHARA',
546
+ exponent: '2'
547
+ },
548
+ MDL: {
549
+ name: 'Moldovan Leu',
550
+ code: '498',
551
+ country: 'MOLDOVA (THE REPUBLIC OF)',
552
+ exponent: '2'
553
+ },
554
+ MGA: {
555
+ name: 'Malagasy Ariary',
556
+ code: '969',
557
+ country: 'MADAGASCAR',
558
+ exponent: '2'
559
+ },
560
+ MKD: {
561
+ name: 'Denar',
562
+ code: '807',
563
+ country: 'MACEDONIA (THE FORMER YUGOSLAV REPUBLIC OF)',
564
+ exponent: '2'
565
+ },
566
+ MMK: {
567
+ name: 'Kyat',
568
+ code: '104',
569
+ country: 'MYANMAR',
570
+ exponent: '2'
571
+ },
572
+ MNT: {
573
+ name: 'Tugrik',
574
+ code: '496',
575
+ country: 'MONGOLIA',
576
+ exponent: '2'
577
+ },
578
+ MOP: {
579
+ name: 'Pataca',
580
+ code: '446',
581
+ country: 'MACAO',
582
+ exponent: '2'
583
+ },
584
+ MRO: {
585
+ name: 'Ouguiya',
586
+ code: '478',
587
+ country: 'MAURITANIA',
588
+ exponent: '2'
589
+ },
590
+ MUR: {
591
+ name: 'Mauritius Rupee',
592
+ code: '480',
593
+ country: 'MAURITIUS',
594
+ exponent: '2'
595
+ },
596
+ MVR: {
597
+ name: 'Rufiyaa',
598
+ code: '462',
599
+ country: 'MALDIVES',
600
+ exponent: '2'
601
+ },
602
+ MWK: {
603
+ name: 'Kwacha',
604
+ code: '454',
605
+ country: 'MALAWI',
606
+ exponent: '2'
607
+ },
608
+ MXN: {
609
+ name: 'Mexican Peso',
610
+ code: '484',
611
+ country: 'MEXICO',
612
+ exponent: '2'
613
+ },
614
+ MXV: {
615
+ name: 'Mexican Unidad de Inversion (UDI)',
616
+ code: '979',
617
+ country: 'MEXICO',
618
+ exponent: '2'
619
+ },
620
+ MYR: {
621
+ name: 'Malaysian Ringgit',
622
+ code: '458',
623
+ country: 'MALAYSIA',
624
+ exponent: '2'
625
+ },
626
+ MZN: {
627
+ name: 'Mozambique Metical',
628
+ code: '943',
629
+ country: 'MOZAMBIQUE',
630
+ exponent: '2'
631
+ },
632
+ NAD: {
633
+ name: 'Namibia Dollar',
634
+ code: '516',
635
+ country: 'NAMIBIA',
636
+ exponent: '2'
637
+ },
638
+ NGN: {
639
+ name: 'Naira',
640
+ code: '566',
641
+ country: 'NIGERIA',
642
+ exponent: '2'
643
+ },
644
+ NIO: {
645
+ name: 'Cordoba Oro',
646
+ code: '558',
647
+ country: 'NICARAGUA',
648
+ exponent: '2'
649
+ },
650
+ NOK: {
651
+ name: 'Norwegian Krone',
652
+ code: '578',
653
+ country: 'SVALBARD AND JAN MAYEN',
654
+ exponent: '2'
655
+ },
656
+ NPR: {
657
+ name: 'Nepalese Rupee',
658
+ code: '524',
659
+ country: 'NEPAL',
660
+ exponent: '2'
661
+ },
662
+ NZD: {
663
+ name: 'New Zealand Dollar',
664
+ code: '554',
665
+ country: 'TOKELAU',
666
+ exponent: '2'
667
+ },
668
+ OMR: {
669
+ name: 'Rial Omani',
670
+ code: '512',
671
+ country: 'OMAN',
672
+ exponent: '3'
673
+ },
674
+ PAB: {
675
+ name: 'Balboa',
676
+ code: '590',
677
+ country: 'PANAMA',
678
+ exponent: '2'
679
+ },
680
+ PEN: {
681
+ name: 'Nuevo Sol',
682
+ code: '604',
683
+ country: 'PERU',
684
+ exponent: '2'
685
+ },
686
+ PGK: {
687
+ name: 'Kina',
688
+ code: '598',
689
+ country: 'PAPUA NEW GUINEA',
690
+ exponent: '2'
691
+ },
692
+ PHP: {
693
+ name: 'Philippine Peso',
694
+ code: '608',
695
+ country: 'PHILIPPINES (THE)',
696
+ exponent: '2'
697
+ },
698
+ PKR: {
699
+ name: 'Pakistan Rupee',
700
+ code: '586',
701
+ country: 'PAKISTAN',
702
+ exponent: '2'
703
+ },
704
+ PLN: {
705
+ name: 'Zloty',
706
+ code: '985',
707
+ country: 'POLAND',
708
+ exponent: '2'
709
+ },
710
+ PYG: {
711
+ name: 'Guarani',
712
+ code: '600',
713
+ country: 'PARAGUAY',
714
+ exponent: '0'
715
+ },
716
+ QAR: {
717
+ name: 'Qatari Rial',
718
+ code: '634',
719
+ country: 'QATAR',
720
+ exponent: '2'
721
+ },
722
+ RON: {
723
+ name: 'Romanian Leu',
724
+ code: '946',
725
+ country: 'ROMANIA',
726
+ exponent: '2'
727
+ },
728
+ RSD: {
729
+ name: 'Serbian Dinar',
730
+ code: '941',
731
+ country: 'SERBIA',
732
+ exponent: '2'
733
+ },
734
+ RUB: {
735
+ name: 'Russian Ruble',
736
+ code: '643',
737
+ country: 'RUSSIAN FEDERATION (THE)',
738
+ exponent: '2'
739
+ },
740
+ RWF: {
741
+ name: 'Rwanda Franc',
742
+ code: '646',
743
+ country: 'RWANDA',
744
+ exponent: '0'
745
+ },
746
+ SAR: {
747
+ name: 'Saudi Riyal',
748
+ code: '682',
749
+ country: 'SAUDI ARABIA',
750
+ exponent: '2'
751
+ },
752
+ SBD: {
753
+ name: 'Solomon Islands Dollar',
754
+ code: '090',
755
+ country: 'SOLOMON ISLANDS',
756
+ exponent: '2'
757
+ },
758
+ SCR: {
759
+ name: 'Seychelles Rupee',
760
+ code: '690',
761
+ country: 'SEYCHELLES',
762
+ exponent: '2'
763
+ },
764
+ SDG: {
765
+ name: 'Sudanese Pound',
766
+ code: '938',
767
+ country: 'SUDAN (THE)',
768
+ exponent: '2'
769
+ },
770
+ SEK: {
771
+ name: 'Swedish Krona',
772
+ code: '752',
773
+ country: 'SWEDEN',
774
+ exponent: '2'
775
+ },
776
+ SGD: {
777
+ name: 'Singapore Dollar',
778
+ code: '702',
779
+ country: 'SINGAPORE',
780
+ exponent: '2'
781
+ },
782
+ SHP: {
783
+ name: 'Saint Helena Pound',
784
+ code: '654',
785
+ country: 'SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA',
786
+ exponent: '2'
787
+ },
788
+ SLL: {
789
+ name: 'Leone',
790
+ code: '694',
791
+ country: 'SIERRA LEONE',
792
+ exponent: '2'
793
+ },
794
+ SOS: {
795
+ name: 'Somali Shilling',
796
+ code: '706',
797
+ country: 'SOMALIA',
798
+ exponent: '2'
799
+ },
800
+ SRD: {
801
+ name: 'Surinam Dollar',
802
+ code: '968',
803
+ country: 'SURINAME',
804
+ exponent: '2'
805
+ },
806
+ SSP: {
807
+ name: 'South Sudanese Pound',
808
+ code: '728',
809
+ country: 'SOUTH SUDAN',
810
+ exponent: '2'
811
+ },
812
+ STD: {
813
+ name: 'Dobra',
814
+ code: '678',
815
+ country: 'SAO TOME AND PRINCIPE',
816
+ exponent: '2'
817
+ },
818
+ SVC: {
819
+ name: 'El Salvador Colon',
820
+ code: '222',
821
+ country: 'EL SALVADOR',
822
+ exponent: '2'
823
+ },
824
+ SYP: {
825
+ name: 'Syrian Pound',
826
+ code: '760',
827
+ country: 'SYRIAN ARAB REPUBLIC',
828
+ exponent: '2'
829
+ },
830
+ SZL: {
831
+ name: 'Lilangeni',
832
+ code: '748',
833
+ country: 'SWAZILAND',
834
+ exponent: '2'
835
+ },
836
+ THB: {
837
+ name: 'Baht',
838
+ code: '764',
839
+ country: 'THAILAND',
840
+ exponent: '2'
841
+ },
842
+ TJS: {
843
+ name: 'Somoni',
844
+ code: '972',
845
+ country: 'TAJIKISTAN',
846
+ exponent: '2'
847
+ },
848
+ TMT: {
849
+ name: 'Turkmenistan New Manat',
850
+ code: '934',
851
+ country: 'TURKMENISTAN',
852
+ exponent: '2'
853
+ },
854
+ TND: {
855
+ name: 'Tunisian Dinar',
856
+ code: '788',
857
+ country: 'TUNISIA',
858
+ exponent: '3'
859
+ },
860
+ TOP: {
861
+ name: 'Pa’anga',
862
+ code: '776',
863
+ country: 'TONGA',
864
+ exponent: '2'
865
+ },
866
+ TRY: {
867
+ name: 'Turkish Lira',
868
+ code: '949',
869
+ country: 'TURKEY',
870
+ exponent: '2'
871
+ },
872
+ TTD: {
873
+ name: 'Trinidad and Tobago Dollar',
874
+ code: '780',
875
+ country: 'TRINIDAD AND TOBAGO',
876
+ exponent: '2'
877
+ },
878
+ TWD: {
879
+ name: 'New Taiwan Dollar',
880
+ code: '901',
881
+ country: 'TAIWAN (PROVINCE OF CHINA)',
882
+ exponent: '2'
883
+ },
884
+ TZS: {
885
+ name: 'Tanzanian Shilling',
886
+ code: '834',
887
+ country: 'TANZANIA, UNITED REPUBLIC OF',
888
+ exponent: '2'
889
+ },
890
+ UAH: {
891
+ name: 'Hryvnia',
892
+ code: '980',
893
+ country: 'UKRAINE',
894
+ exponent: '2'
895
+ },
896
+ UGX: {
897
+ name: 'Uganda Shilling',
898
+ code: '800',
899
+ country: 'UGANDA',
900
+ exponent: '0'
901
+ },
902
+ USD: {
903
+ name: 'US Dollar',
904
+ code: '840',
905
+ country: 'VIRGIN ISLANDS (U.S.)',
906
+ exponent: '2'
907
+ },
908
+ USN: {
909
+ name: 'US Dollar (Next day)',
910
+ code: '997',
911
+ country: 'UNITED STATES OF AMERICA (THE)',
912
+ exponent: '2'
913
+ },
914
+ UYI: {
915
+ name: 'Uruguay Peso en Unidades Indexadas (URUIURUI)',
916
+ code: '940',
917
+ country: 'URUGUAY',
918
+ exponent: '0'
919
+ },
920
+ UYU: {
921
+ name: 'Peso Uruguayo',
922
+ code: '858',
923
+ country: 'URUGUAY',
924
+ exponent: '2'
925
+ },
926
+ UZS: {
927
+ name: 'Uzbekistan Sum',
928
+ code: '860',
929
+ country: 'UZBEKISTAN',
930
+ exponent: '2'
931
+ },
932
+ VEF: {
933
+ name: 'Bolivar',
934
+ code: '937',
935
+ country: 'VENEZUELA (BOLIVARIAN REPUBLIC OF)',
936
+ exponent: '2'
937
+ },
938
+ VND: {
939
+ name: 'Dong',
940
+ code: '704',
941
+ country: 'VIET NAM',
942
+ exponent: '0'
943
+ },
944
+ VUV: {
945
+ name: 'Vatu',
946
+ code: '548',
947
+ country: 'VANUATU',
948
+ exponent: '0'
949
+ },
950
+ WST: {
951
+ name: 'Tala',
952
+ code: '882',
953
+ country: 'SAMOA',
954
+ exponent: '2'
955
+ },
956
+ XAF: {
957
+ name: 'CFA Franc BEAC',
958
+ code: '950',
959
+ country: 'GABON',
960
+ exponent: '0'
961
+ },
962
+ XAG: {
963
+ name: 'Silver',
964
+ code: '961',
965
+ country: 'ZZ11_Silver',
966
+ exponent: 'N.A.'
967
+ },
968
+ XAU: {
969
+ name: 'Gold',
970
+ code: '959',
971
+ country: 'ZZ08_Gold',
972
+ exponent: 'N.A.'
973
+ },
974
+ XBA: {
975
+ name: 'Bond Markets Unit European Composite Unit (EURCO)',
976
+ code: '955',
977
+ country: 'ZZ01_Bond Markets Unit European_EURCO',
978
+ exponent: 'N.A.'
979
+ },
980
+ XBB: {
981
+ name: 'Bond Markets Unit European Monetary Unit (E.M.U.-6)',
982
+ code: '956',
983
+ country: 'ZZ02_Bond Markets Unit European_EMU-6',
984
+ exponent: 'N.A.'
985
+ },
986
+ XBC: {
987
+ name: 'Bond Markets Unit European Unit of Account 9 (E.U.A.-9)',
988
+ code: '957',
989
+ country: 'ZZ03_Bond Markets Unit European_EUA-9',
990
+ exponent: 'N.A.'
991
+ },
992
+ XBD: {
993
+ name: 'Bond Markets Unit European Unit of Account 17 (E.U.A.-17)',
994
+ code: '958',
995
+ country: 'ZZ04_Bond Markets Unit European_EUA-17',
996
+ exponent: 'N.A.'
997
+ },
998
+ XCD: {
999
+ name: 'East Caribbean Dollar',
1000
+ code: '951',
1001
+ country: 'SAINT VINCENT AND THE GRENADINES',
1002
+ exponent: '2'
1003
+ },
1004
+ XDR: {
1005
+ name: 'SDR (Special Drawing Right)',
1006
+ code: '960',
1007
+ country: 'INTERNATIONAL MONETARY FUND (IMF)Â ',
1008
+ exponent: 'N.A.'
1009
+ },
1010
+ XOF: {
1011
+ name: 'CFA Franc BCEAO',
1012
+ code: '952',
1013
+ country: 'TOGO',
1014
+ exponent: '0'
1015
+ },
1016
+ XPD: {
1017
+ name: 'Palladium',
1018
+ code: '964',
1019
+ country: 'ZZ09_Palladium',
1020
+ exponent: 'N.A.'
1021
+ },
1022
+ XPF: {
1023
+ name: 'CFP Franc',
1024
+ code: '953',
1025
+ country: 'WALLIS AND FUTUNA',
1026
+ exponent: '0'
1027
+ },
1028
+ XPT: {
1029
+ name: 'Platinum',
1030
+ code: '962',
1031
+ country: 'ZZ10_Platinum',
1032
+ exponent: 'N.A.'
1033
+ },
1034
+ XSU: {
1035
+ name: 'Sucre',
1036
+ code: '994',
1037
+ country: 'SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS "SUCRE"',
1038
+ exponent: 'N.A.'
1039
+ },
1040
+ XTS: {
1041
+ name: 'Codes specifically reserved for testing purposes',
1042
+ code: '963',
1043
+ country: 'ZZ06_Testing_Code',
1044
+ exponent: 'N.A.'
1045
+ },
1046
+ XUA: {
1047
+ name: 'ADB Unit of Account',
1048
+ code: '965',
1049
+ country: 'MEMBER COUNTRIES OF THE AFRICAN DEVELOPMENT BANK GROUP',
1050
+ exponent: 'N.A.'
1051
+ },
1052
+ XXX: {
1053
+ name: 'The codes assigned for transactions where no currency is involved',
1054
+ code: '999',
1055
+ country: 'ZZ07_No_Currency',
1056
+ exponent: 'N.A.'
1057
+ },
1058
+ YER: {
1059
+ name: 'Yemeni Rial',
1060
+ code: '886',
1061
+ country: 'YEMEN',
1062
+ exponent: '2'
1063
+ },
1064
+ ZAR: {
1065
+ name: 'Rand',
1066
+ code: '710',
1067
+ country: 'SOUTH AFRICA',
1068
+ exponent: '2'
1069
+ },
1070
+ ZMW: {
1071
+ name: 'Zambian Kwacha',
1072
+ code: '967',
1073
+ country: 'ZAMBIA',
1074
+ exponent: '2'
1075
+ },
1076
+ ZWL: {
1077
+ name: 'Zimbabwe Dollar',
1078
+ code: '932',
1079
+ country: 'ZIMBABWE',
1080
+ exponent: '2'
1081
+ }
1082
+ }.freeze
1083
+
1084
+ class << self
1085
+
1086
+ # Get all Iso-4217 Currencies
1087
+ def all
1088
+ ISO4217.keys.map { |currency| currency.to_s.downcase }
1089
+ end
1090
+
1091
+ # Fetch the exponent for the given currency
1092
+ def fetch_exponent(iso_currency)
1093
+ raise InvalidArgumentError, 'Nil Currency value given' if iso_currency.nil?
1094
+
1095
+ iso_currency.to_s.upcase!
1096
+
1097
+ ISO4217.key?(iso_currency.to_sym) ? ISO4217[iso_currency.to_sym][:exponent].to_i : 0
1098
+ end
1099
+
1100
+ end
1101
+
1102
+ end
1103
+ end
1104
+ end
1105
+ end
1106
+ end