Passed
Push — 1.0.0 ( 308939...f58402 )
by Alex
01:34
created

Currency::checkValueIsAllowed()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 4
rs 10
ccs 3
cts 3
cp 1
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace StraTDeS\VO;
4
5
class Currency
6
{
7
    const AED = 'AED';
8
    const AFN = 'AFN';
9
    const ALL = 'ALL';
10
    const AMD = 'AMD';
11
    const ANG = 'ANG';
12
    const AOA = 'AOA';
13
    const ARS = 'ARS';
14
    const AUD = 'AUD';
15
    const AWG = 'AWG';
16
    const AZN = 'AZN';
17
    const BAM = 'BAM';
18
    const BBD = 'BBD';
19
    const BDT = 'BDT';
20
    const BGN = 'BGN';
21
    const BHD = 'BHD';
22
    const BIF = 'BIF';
23
    const BMD = 'BMD';
24
    const BND = 'BND';
25
    const BOB = 'BOB';
26
    const BOV = 'BOV';
27
    const BRL = 'BRL';
28
    const BSD = 'BSD';
29
    const BTN = 'BTN';
30
    const BWP = 'BWP';
31
    const BYN = 'BYN';
32
    const BZD = 'BZD';
33
    const CAD = 'CAD';
34
    const CDF = 'CDF';
35
    const CHE = 'CHE';
36
    const CHF = 'CHF';
37
    const CHW = 'CHW';
38
    const CLF = 'CLF';
39
    const CLP = 'CLP';
40
    const CNY = 'CNY';
41
    const COP = 'COP';
42
    const COU = 'COU';
43
    const CRC = 'CRC';
44
    const CUC = 'CUC';
45
    const CUP = 'CUP';
46
    const CVE = 'CVE';
47
    const CZK = 'CZK';
48
    const DJF = 'DJF';
49
    const DKK = 'DKK';
50
    const DOP = 'DOP';
51
    const DZD = 'DZD';
52
    const EGP = 'EGP';
53
    const ERN = 'ERN';
54
    const ETB = 'ETB';
55
    const EUR = 'EUR';
56
    const FJD = 'FJD';
57
    const FKP = 'FKP';
58
    const GBP = 'GBP';
59
    const GEL = 'GEL';
60
    const GHS = 'GHS';
61
    const GIP = 'GIP';
62
    const GMD = 'GMD';
63
    const GNF = 'GNF';
64
    const GTQ = 'GTQ';
65
    const GYD = 'GYD';
66
    const HKD = 'HKD';
67
    const HNL = 'HNL';
68
    const HRK = 'HRK';
69
    const HTG = 'HTG';
70
    const HUF = 'HUF';
71
    const IDR = 'IDR';
72
    const ILS = 'ILS';
73
    const INR = 'INR';
74
    const IQD = 'IQD';
75
    const IRR = 'IRR';
76
    const ISK = 'ISK';
77
    const JMD = 'JMD';
78
    const JOD = 'JOD';
79
    const JPY = 'JPY';
80
    const KES = 'KES';
81
    const KGS = 'KGS';
82
    const KHR = 'KHR';
83
    const KMF = 'KMF';
84
    const KPW = 'KPW';
85
    const KRW = 'KRW';
86
    const KWD = 'KWD';
87
    const KYD = 'KYD';
88
    const KZT = 'KZT';
89
    const LAK = 'LAK';
90
    const LBP = 'LBP';
91
    const LKR = 'LKR';
92
    const LRD = 'LRD';
93
    const LSL = 'LSL';
94
    const LYD = 'LYD';
95
    const MAD = 'MAD';
96
    const MDL = 'MDL';
97
    const MGA = 'MGA';
98
    const MKD = 'MKD';
99
    const MMK = 'MMK';
100
    const MNT = 'MNT';
101
    const MOP = 'MOP';
102
    const MRU = 'MRU';
103
    const MUR = 'MUR';
104
    const MVR = 'MVR';
105
    const MWK = 'MWK';
106
    const MXN = 'MXN';
107
    const MXV = 'MXV';
108
    const MYR = 'MYR';
109
    const MZN = 'MZN';
110
    const NAD = 'NAD';
111
    const NGN = 'NGN';
112
    const NIO = 'NIO';
113
    const NOK = 'NOK';
114
    const NPR = 'NPR';
115
    const NZD = 'NZD';
116
    const OMR = 'OMR';
117
    const PAB = 'PAB';
118
    const PEN = 'PEN';
119
    const PGK = 'PGK';
120
    const PHP = 'PHP';
121
    const PKR = 'PKR';
122
    const PLN = 'PLN';
123
    const PYG = 'PYG';
124
    const QAR = 'QAR';
125
    const RON = 'RON';
126
    const RSD = 'RSD';
127
    const RUB = 'RUB';
128
    const RWF = 'RWF';
129
    const SAR = 'SAR';
130
    const SBD = 'SBD';
131
    const SCR = 'SCR';
132
    const SDG = 'SDG';
133
    const SEK = 'SEK';
134
    const SGD = 'SGD';
135
    const SHP = 'SHP';
136
    const SLL = 'SLL';
137
    const SOS = 'SOS';
138
    const SRD = 'SRD';
139
    const SSP = 'SSP';
140
    const STN = 'STN';
141
    const SVC = 'SVC';
142
    const SYP = 'SYP';
143
    const SZL = 'SZL';
144
    const THB = 'THB';
145
    const TJS = 'TJS';
146
    const TMT = 'TMT';
147
    const TND = 'TND';
148
    const TOP = 'TOP';
149
    const TRY = 'TRY';
150
    const TTD = 'TTD';
151
    const TWD = 'TWD';
152
    const TZS = 'TZS';
153
    const UAH = 'UAH';
154
    const UGX = 'UGX';
155
    const USD = 'USD';
156
    const USN = 'USN';
157
    const UYI = 'UYI';
158
    const UYU = 'UYU';
159
    const UYW = 'UYW';
160
    const UZS = 'UZS';
161
    const VES = 'VES';
162
    const VND = 'VND';
163
    const VUV = 'VUV';
164
    const WST = 'WST';
165
    const XAF = 'XAF';
166
    const XCD = 'XCD';
167
    const XOF = 'XOF';
168
    const XPF = 'XPF';
169
    const YER = 'YER';
170
    const ZAR = 'ZAR';
171
    const ZMW = 'ZMW';
172
    const ZWL = 'ZWL';
173
174
    const CONFIG = [
175
        'AED' => ['iso' => 784, 'decimals' => 2],
176
        'AFN' => ['iso' => 971, 'decimals' => 2],
177
        'ALL' => ['iso' => 8, 'decimals' => 2],
178
        'AMD' => ['iso' => 51, 'decimals' => 2],
179
        'ANG' => ['iso' => 532, 'decimals' => 2],
180
        'AOA' => ['iso' => 973, 'decimals' => 2],
181
        'ARS' => ['iso' => 32, 'decimals' => 3],
182
        'AUD' => ['iso' => 36, 'decimals' => 2],
183
        'AWG' => ['iso' => 533, 'decimals' => 2],
184
        'AZN' => ['iso' => 944, 'decimals' => 2],
185
        'BAM' => ['iso' => 977, 'decimals' => 2],
186
        'BBD' => ['iso' => 52, 'decimals' => 2],
187
        'BDT' => ['iso' => 50, 'decimals' => 2],
188
        'BGN' => ['iso' => 975, 'decimals' => 2],
189
        'BHD' => ['iso' => 48, 'decimals' => 3],
190
        'BIF' => ['iso' => 108, 'decimals' => 0],
191
        'BMD' => ['iso' => 60, 'decimals' => 2],
192
        'BND' => ['iso' => 96, 'decimals' => 2],
193
        'BOB' => ['iso' => 68, 'decimals' => 2],
194
        'BOV' => ['iso' => 984, 'decimals' => 2],
195
        'BRL' => ['iso' => 986, 'decimals' => 2],
196
        'BSD' => ['iso' => 44, 'decimals' => 2],
197
        'BTN' => ['iso' => 64, 'decimals' => 2],
198
        'BWP' => ['iso' => 72, 'decimals' => 2],
199
        'BYN' => ['iso' => 933, 'decimals' => 2],
200
        'BZD' => ['iso' => 84, 'decimals' => 2],
201
        'CAD' => ['iso' => 124, 'decimals' => 2],
202
        'CDF' => ['iso' => 976, 'decimals' => 2],
203
        'CHE' => ['iso' => 947, 'decimals' => 2],
204
        'CHF' => ['iso' => 756, 'decimals' => 2],
205
        'CHW' => ['iso' => 948, 'decimals' => 2],
206
        'CLF' => ['iso' => 990, 'decimals' => 4],
207
        'CLP' => ['iso' => 152, 'decimals' => 0],
208
        'CNY' => ['iso' => 156, 'decimals' => 2],
209
        'COP' => ['iso' => 170, 'decimals' => 2],
210
        'COU' => ['iso' => 970, 'decimals' => 2],
211
        'CRC' => ['iso' => 188, 'decimals' => 2],
212
        'CUC' => ['iso' => 931, 'decimals' => 2],
213
        'CUP' => ['iso' => 192, 'decimals' => 2],
214
        'CVE' => ['iso' => 132, 'decimals' => 2],
215
        'CZK' => ['iso' => 203, 'decimals' => 2],
216
        'DJF' => ['iso' => 262, 'decimals' => 0],
217
        'DKK' => ['iso' => 208, 'decimals' => 2],
218
        'DOP' => ['iso' => 214, 'decimals' => 2],
219
        'DZD' => ['iso' => 12, 'decimals' => 2],
220
        'EGP' => ['iso' => 818, 'decimals' => 2],
221
        'ERN' => ['iso' => 232, 'decimals' => 2],
222
        'ETB' => ['iso' => 230, 'decimals' => 2],
223
        'EUR' => ['iso' => 978, 'decimals' => 2],
224
        'FJD' => ['iso' => 242, 'decimals' => 2],
225
        'FKP' => ['iso' => 238, 'decimals' => 2],
226
        'GBP' => ['iso' => 826, 'decimals' => 2],
227
        'GEL' => ['iso' => 981, 'decimals' => 2],
228
        'GHS' => ['iso' => 936, 'decimals' => 2],
229
        'GIP' => ['iso' => 292, 'decimals' => 2],
230
        'GMD' => ['iso' => 270, 'decimals' => 2],
231
        'GNF' => ['iso' => 324, 'decimals' => 0],
232
        'GTQ' => ['iso' => 320, 'decimals' => 2],
233
        'GYD' => ['iso' => 328, 'decimals' => 2],
234
        'HKD' => ['iso' => 344, 'decimals' => 2],
235
        'HNL' => ['iso' => 340, 'decimals' => 2],
236
        'HRK' => ['iso' => 191, 'decimals' => 2],
237
        'HTG' => ['iso' => 332, 'decimals' => 2],
238
        'HUF' => ['iso' => 348, 'decimals' => 2],
239
        'IDR' => ['iso' => 360, 'decimals' => 2],
240
        'ILS' => ['iso' => 376, 'decimals' => 2],
241
        'INR' => ['iso' => 356, 'decimals' => 2],
242
        'IQD' => ['iso' => 368, 'decimals' => 3],
243
        'IRR' => ['iso' => 364, 'decimals' => 2],
244
        'ISK' => ['iso' => 352, 'decimals' => 0],
245
        'JMD' => ['iso' => 388, 'decimals' => 2],
246
        'JOD' => ['iso' => 400, 'decimals' => 3],
247
        'JPY' => ['iso' => 392, 'decimals' => 0],
248
        'KES' => ['iso' => 404, 'decimals' => 2],
249
        'KGS' => ['iso' => 417, 'decimals' => 2],
250
        'KHR' => ['iso' => 116, 'decimals' => 2],
251
        'KMF' => ['iso' => 174, 'decimals' => 0],
252
        'KPW' => ['iso' => 408, 'decimals' => 2],
253
        'KRW' => ['iso' => 410, 'decimals' => 0],
254
        'KWD' => ['iso' => 414, 'decimals' => 3],
255
        'KYD' => ['iso' => 136, 'decimals' => 2],
256
        'KZT' => ['iso' => 398, 'decimals' => 2],
257
        'LAK' => ['iso' => 418, 'decimals' => 2],
258
        'LBP' => ['iso' => 422, 'decimals' => 2],
259
        'LKR' => ['iso' => 144, 'decimals' => 2],
260
        'LRD' => ['iso' => 430, 'decimals' => 2],
261
        'LSL' => ['iso' => 426, 'decimals' => 2],
262
        'LYD' => ['iso' => 434, 'decimals' => 3],
263
        'MAD' => ['iso' => 504, 'decimals' => 2],
264
        'MDL' => ['iso' => 498, 'decimals' => 2],
265
        'MGA' => ['iso' => 969, 'decimals' => 2],
266
        'MKD' => ['iso' => 807, 'decimals' => 2],
267
        'MMK' => ['iso' => 104, 'decimals' => 2],
268
        'MNT' => ['iso' => 496, 'decimals' => 2],
269
        'MOP' => ['iso' => 446, 'decimals' => 2],
270
        'MRU' => ['iso' => 929, 'decimals' => 2],
271
        'MUR' => ['iso' => 480, 'decimals' => 2],
272
        'MVR' => ['iso' => 462, 'decimals' => 2],
273
        'MWK' => ['iso' => 454, 'decimals' => 2],
274
        'MXN' => ['iso' => 484, 'decimals' => 2],
275
        'MXV' => ['iso' => 979, 'decimals' => 2],
276
        'MYR' => ['iso' => 458, 'decimals' => 2],
277
        'MZN' => ['iso' => 943, 'decimals' => 2],
278
        'NAD' => ['iso' => 516, 'decimals' => 2],
279
        'NGN' => ['iso' => 566, 'decimals' => 2],
280
        'NIO' => ['iso' => 558, 'decimals' => 2],
281
        'NOK' => ['iso' => 578, 'decimals' => 2],
282
        'NPR' => ['iso' => 524, 'decimals' => 2],
283
        'NZD' => ['iso' => 554, 'decimals' => 2],
284
        'OMR' => ['iso' => 512, 'decimals' => 3],
285
        'PAB' => ['iso' => 590, 'decimals' => 2],
286
        'PEN' => ['iso' => 604, 'decimals' => 2],
287
        'PGK' => ['iso' => 598, 'decimals' => 2],
288
        'PHP' => ['iso' => 608, 'decimals' => 2],
289
        'PKR' => ['iso' => 586, 'decimals' => 2],
290
        'PLN' => ['iso' => 985, 'decimals' => 2],
291
        'PYG' => ['iso' => 600, 'decimals' => 0],
292
        'QAR' => ['iso' => 634, 'decimals' => 2],
293
        'RON' => ['iso' => 946, 'decimals' => 2],
294
        'RSD' => ['iso' => 941, 'decimals' => 2],
295
        'RUB' => ['iso' => 643, 'decimals' => 2],
296
        'RWF' => ['iso' => 646, 'decimals' => 0],
297
        'SAR' => ['iso' => 682, 'decimals' => 2],
298
        'SBD' => ['iso' => 90, 'decimals' => 2],
299
        'SCR' => ['iso' => 690, 'decimals' => 2],
300
        'SDG' => ['iso' => 938, 'decimals' => 2],
301
        'SEK' => ['iso' => 752, 'decimals' => 2],
302
        'SGD' => ['iso' => 702, 'decimals' => 2],
303
        'SHP' => ['iso' => 654, 'decimals' => 2],
304
        'SLL' => ['iso' => 694, 'decimals' => 2],
305
        'SOS' => ['iso' => 706, 'decimals' => 2],
306
        'SRD' => ['iso' => 968, 'decimals' => 2],
307
        'SSP' => ['iso' => 728, 'decimals' => 2],
308
        'STN' => ['iso' => 930, 'decimals' => 2],
309
        'SVC' => ['iso' => 222, 'decimals' => 2],
310
        'SYP' => ['iso' => 760, 'decimals' => 2],
311
        'SZL' => ['iso' => 748, 'decimals' => 2],
312
        'THB' => ['iso' => 764, 'decimals' => 2],
313
        'TJS' => ['iso' => 972, 'decimals' => 2],
314
        'TMT' => ['iso' => 934, 'decimals' => 2],
315
        'TND' => ['iso' => 788, 'decimals' => 3],
316
        'TOP' => ['iso' => 776, 'decimals' => 2],
317
        'TRY' => ['iso' => 949, 'decimals' => 2],
318
        'TTD' => ['iso' => 780, 'decimals' => 2],
319
        'TWD' => ['iso' => 901, 'decimals' => 2],
320
        'TZS' => ['iso' => 834, 'decimals' => 2],
321
        'UAH' => ['iso' => 980, 'decimals' => 2],
322
        'UGX' => ['iso' => 800, 'decimals' => 0],
323
        'USD' => ['iso' => 840, 'decimals' => 2],
324
        'USN' => ['iso' => 997, 'decimals' => 2],
325
        'UYI' => ['iso' => 940, 'decimals' => 0],
326
        'UYU' => ['iso' => 858, 'decimals' => 2],
327
        'UYW' => ['iso' => 927, 'decimals' => 4],
328
        'UZS' => ['iso' => 860, 'decimals' => 2],
329
        'VES' => ['iso' => 928, 'decimals' => 2],
330
        'VND' => ['iso' => 704, 'decimals' => 0],
331
        'VUV' => ['iso' => 548, 'decimals' => 0],
332
        'WST' => ['iso' => 882, 'decimals' => 2],
333
        'XAF' => ['iso' => 950, 'decimals' => 0],
334
        'XCD' => ['iso' => 951, 'decimals' => 2],
335
        'XOF' => ['iso' => 952, 'decimals' => 0],
336
        'XPF' => ['iso' => 953, 'decimals' => 0],
337
        'YER' => ['iso' => 886, 'decimals' => 2],
338
        'ZAR' => ['iso' => 710, 'decimals' => 2],
339
        'ZMW' => ['iso' => 967, 'decimals' => 2],
340
        'ZWL' => ['iso' => 932, 'decimals' => 2],
341
    ];
342
343
    const ALLOWED_CURRENCIES = [
344
        self::AED,
345
        self::AFN,
346
        self::ALL,
347
        self::AMD,
348
        self::ANG,
349
        self::AOA,
350
        self::ARS,
351
        self::AUD,
352
        self::AWG,
353
        self::AZN,
354
        self::BAM,
355
        self::BBD,
356
        self::BDT,
357
        self::BGN,
358
        self::BHD,
359
        self::BIF,
360
        self::BMD,
361
        self::BND,
362
        self::BOB,
363
        self::BOV,
364
        self::BRL,
365
        self::BSD,
366
        self::BTN,
367
        self::BWP,
368
        self::BYN,
369
        self::BZD,
370
        self::CAD,
371
        self::CDF,
372
        self::CHE,
373
        self::CHF,
374
        self::CHW,
375
        self::CLF,
376
        self::CLP,
377
        self::CNY,
378
        self::COP,
379
        self::COU,
380
        self::CRC,
381
        self::CUC,
382
        self::CUP,
383
        self::CVE,
384
        self::CZK,
385
        self::DJF,
386
        self::DKK,
387
        self::DOP,
388
        self::DZD,
389
        self::EGP,
390
        self::ERN,
391
        self::ETB,
392
        self::EUR,
393
        self::FJD,
394
        self::FKP,
395
        self::GBP,
396
        self::GEL,
397
        self::GHS,
398
        self::GIP,
399
        self::GMD,
400
        self::GNF,
401
        self::GTQ,
402
        self::GYD,
403
        self::HKD,
404
        self::HNL,
405
        self::HRK,
406
        self::HTG,
407
        self::HUF,
408
        self::IDR,
409
        self::ILS,
410
        self::INR,
411
        self::IQD,
412
        self::IRR,
413
        self::ISK,
414
        self::JMD,
415
        self::JOD,
416
        self::JPY,
417
        self::KES,
418
        self::KGS,
419
        self::KHR,
420
        self::KMF,
421
        self::KPW,
422
        self::KRW,
423
        self::KWD,
424
        self::KYD,
425
        self::KZT,
426
        self::LAK,
427
        self::LBP,
428
        self::LKR,
429
        self::LRD,
430
        self::LSL,
431
        self::LYD,
432
        self::MAD,
433
        self::MDL,
434
        self::MGA,
435
        self::MKD,
436
        self::MMK,
437
        self::MNT,
438
        self::MOP,
439
        self::MRU,
440
        self::MUR,
441
        self::MVR,
442
        self::MWK,
443
        self::MXN,
444
        self::MXV,
445
        self::MYR,
446
        self::MZN,
447
        self::NAD,
448
        self::NGN,
449
        self::NIO,
450
        self::NOK,
451
        self::NPR,
452
        self::NZD,
453
        self::OMR,
454
        self::PAB,
455
        self::PEN,
456
        self::PGK,
457
        self::PHP,
458
        self::PKR,
459
        self::PLN,
460
        self::PYG,
461
        self::QAR,
462
        self::RON,
463
        self::RSD,
464
        self::RUB,
465
        self::RWF,
466
        self::SAR,
467
        self::SBD,
468
        self::SCR,
469
        self::SDG,
470
        self::SEK,
471
        self::SGD,
472
        self::SHP,
473
        self::SLL,
474
        self::SOS,
475
        self::SRD,
476
        self::SSP,
477
        self::STN,
478
        self::SVC,
479
        self::SYP,
480
        self::SZL,
481
        self::THB,
482
        self::TJS,
483
        self::TMT,
484
        self::TND,
485
        self::TOP,
486
        self::TRY,
487
        self::TTD,
488
        self::TWD,
489
        self::TZS,
490
        self::UAH,
491
        self::UGX,
492
        self::USD,
493
        self::USN,
494
        self::UYI,
495
        self::UYU,
496
        self::UYW,
497
        self::UZS,
498
        self::VES,
499
        self::VND,
500
        self::VUV,
501
        self::WST,
502
        self::XAF,
503
        self::XCD,
504
        self::XOF,
505
        self::XPF,
506
        self::YER,
507
        self::ZAR,
508
        self::ZMW,
509
        self::ZWL,
510
    ];
511
512
    private string $value;
513
514 10
    private function __construct(string $currency)
515
    {
516 10
        $this->checkValueIsAllowed($currency);
517 6
        $this->value = $currency;
518 6
    }
519
520 10
    public static function fromValue(string $value): Currency
521
    {
522 10
        return new self($value);
523
    }
524
525 10
    private function checkValueIsAllowed(string $value): void
526
    {
527 10
        if (!in_array($value, self::ALLOWED_CURRENCIES)) {
528 4
            throw new \InvalidArgumentException("$value is not an allowed currency");
529
        }
530 6
    }
531
532 6
    public function value(): string
533
    {
534 6
        return $this->value;
535
    }
536
537 6
    public function config(): CurrencyConfig
538
    {
539 6
        return new CurrencyConfig(self::CONFIG[$this->value()]['iso'], self::CONFIG[$this->value()]['decimals']);
540
    }
541
}
542