ess 0.9.1
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.
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +448 -0
- data/Rakefile +5 -0
- data/ess.gemspec +21 -0
- data/lib/ess/dtd.rb +491 -0
- data/lib/ess/element.rb +266 -0
- data/lib/ess/ess.rb +8 -0
- data/lib/ess/examples.rb +432 -0
- data/lib/ess/helpers.rb +22 -0
- data/lib/ess/maker.rb +24 -0
- data/lib/ess/postprocessing.rb +69 -0
- data/lib/ess/pusher.rb +63 -0
- data/lib/ess/validation.rb +797 -0
- data/lib/ess/version.rb +3 -0
- data/lib/ess.rb +13 -0
- data/spec/ess/element_spec.rb +796 -0
- data/spec/ess/full_spec.rb +47 -0
- data/spec/ess/maker_spec.rb +30 -0
- data/spec/spec_helper.rb +5 -0
- metadata +88 -0
@@ -0,0 +1,797 @@
|
|
1
|
+
require 'ess/helpers'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module ESS
|
5
|
+
module Validation
|
6
|
+
|
7
|
+
class ValidationError < StandardError
|
8
|
+
end
|
9
|
+
|
10
|
+
class TextIsNotNull
|
11
|
+
def validate tag
|
12
|
+
if tag.text!.strip == ''
|
13
|
+
raise InvalidValueError, "the <#{tag.tag_name}> element cannot be empty"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class TextIsValidEmail
|
19
|
+
def validate tag
|
20
|
+
# TODO: Doing this is not recommended, check if realy necessary
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class URLValidation
|
25
|
+
def validate_url text
|
26
|
+
unless text =~ /^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i || text.length > 10
|
27
|
+
unless isValidIP text
|
28
|
+
raise InvalidValueError, "invalid URL: #{text}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def isValidIP text
|
35
|
+
unless text =~ /^((1?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(1?\d{1,2}|2[0-4]\d|25[0-5])$/
|
36
|
+
return false
|
37
|
+
end
|
38
|
+
return text.split('.').map { |part| part.to_i <= 255 }.all?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class TextIsValidURL < URLValidation
|
43
|
+
def validate tag
|
44
|
+
validate_url tag.text!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class XmlnsIsValidURL < URLValidation
|
49
|
+
def validate ess_tag
|
50
|
+
validate_url ess_tag.xmlns_attr
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class TextIsValidLatitude
|
55
|
+
def validate tag
|
56
|
+
unless tag.text! =~ /^-?([0-8]?[0-9]|90)\.[0-9]{1,6}$/
|
57
|
+
raise InvalidValueError, "invalid latitude: #{tag.text!}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class TextIsValidLongitude
|
63
|
+
def validate tag
|
64
|
+
unless tag.text! =~ /^-?((1?[0-7]?|[0-9]?)[0-9]|180)\.[0-9]{1,6}$/
|
65
|
+
raise InvalidValueError, "invalid longitude: #{tag.text!}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class TextIsValidCountryCode
|
71
|
+
COUNTRY_CODES = {
|
72
|
+
"AU" => "Australia",
|
73
|
+
"AF" => "Afghanistan",
|
74
|
+
"AL" => "Albania",
|
75
|
+
"DZ" => "Algeria",
|
76
|
+
"AS" => "American Samoa",
|
77
|
+
"AD" => "Andorra",
|
78
|
+
"AO" => "Angola",
|
79
|
+
"AI" => "Anguilla",
|
80
|
+
"AQ" => "Antarctica",
|
81
|
+
"AG" => "Antigua & Barbuda",
|
82
|
+
"AR" => "Argentina",
|
83
|
+
"AM" => "Armenia",
|
84
|
+
"AW" => "Aruba",
|
85
|
+
"AT" => "Austria",
|
86
|
+
"AZ" => "Azerbaijan",
|
87
|
+
"BS" => "Bahamas",
|
88
|
+
"BH" => "Bahrain",
|
89
|
+
"BD" => "Bangladesh",
|
90
|
+
"BB" => "Barbados",
|
91
|
+
"BY" => "Belarus",
|
92
|
+
"BE" => "Belgium",
|
93
|
+
"BZ" => "Belize",
|
94
|
+
"BJ" => "Benin",
|
95
|
+
"BM" => "Bermuda",
|
96
|
+
"BT" => "Bhutan",
|
97
|
+
"BO" => "Bolivia",
|
98
|
+
"BA" => "Bosnia/Hercegovina",
|
99
|
+
"BW" => "Botswana",
|
100
|
+
"BV" => "Bouvet Island",
|
101
|
+
"BR" => "Brazil",
|
102
|
+
"IO" => "British Indian Ocean Territory",
|
103
|
+
"BN" => "Brunei Darussalam",
|
104
|
+
"BG" => "Bulgaria",
|
105
|
+
"BF" => "Burkina Faso",
|
106
|
+
"BI" => "Burundi",
|
107
|
+
"KH" => "Cambodia",
|
108
|
+
"CM" => "Cameroon",
|
109
|
+
"CA" => "Canada",
|
110
|
+
"CV" => "Cape Verde",
|
111
|
+
"KY" => "Cayman Is",
|
112
|
+
"CF" => "Central African Republic",
|
113
|
+
"TD" => "Chad",
|
114
|
+
"CL" => "Chile",
|
115
|
+
"CN" => "China, People's Republic of",
|
116
|
+
"CX" => "Christmas Island",
|
117
|
+
"CC" => "Cocos Islands",
|
118
|
+
"CO" => "Colombia",
|
119
|
+
"KM" => "Comoros",
|
120
|
+
"CG" => "Congo",
|
121
|
+
"CD" => "Congo, Democratic Republic",
|
122
|
+
"CK" => "Cook Islands",
|
123
|
+
"CR" => "Costa Rica",
|
124
|
+
"CI" => "Cote d'Ivoire",
|
125
|
+
"HR" => "Croatia",
|
126
|
+
"CU" => "Cuba",
|
127
|
+
"CY" => "Cyprus",
|
128
|
+
"CZ" => "Czech Republic",
|
129
|
+
"DK" => "Denmark",
|
130
|
+
"DJ" => "Djibouti",
|
131
|
+
"DM" => "Dominica",
|
132
|
+
"DO" => "Dominican Republic",
|
133
|
+
"TP" => "East Timor",
|
134
|
+
"EC" => "Ecuador",
|
135
|
+
"EG" => "Egypt",
|
136
|
+
"SV" => "El Salvador",
|
137
|
+
"GQ" => "Equatorial Guinea",
|
138
|
+
"ER" => "Eritrea",
|
139
|
+
"EE" => "Estonia",
|
140
|
+
"ET" => "Ethiopia",
|
141
|
+
"FK" => "Falkland Islands",
|
142
|
+
"FO" => "Faroe Islands",
|
143
|
+
"FJ" => "Fiji",
|
144
|
+
"FI" => "Finland",
|
145
|
+
"FR" => "France",
|
146
|
+
"FX" => "France, Metropolitan",
|
147
|
+
"GF" => "French Guiana",
|
148
|
+
"PF" => "French Polynesia",
|
149
|
+
"TF" => "French South Territories",
|
150
|
+
"GA" => "Gabon",
|
151
|
+
"GM" => "Gambia",
|
152
|
+
"GE" => "Georgia",
|
153
|
+
"DE" => "Germany",
|
154
|
+
"GH" => "Ghana",
|
155
|
+
"GI" => "Gibraltar",
|
156
|
+
"GR" => "Greece",
|
157
|
+
"GL" => "Greenland",
|
158
|
+
"GD" => "Grenada",
|
159
|
+
"GP" => "Guadeloupe",
|
160
|
+
"GU" => "Guam",
|
161
|
+
"GT" => "Guatemala",
|
162
|
+
"GN" => "Guinea",
|
163
|
+
"GW" => "Guinea-Bissau",
|
164
|
+
"GY" => "Guyana",
|
165
|
+
"HT" => "Haiti",
|
166
|
+
"HM" => "Heard Island And Mcdonald Island",
|
167
|
+
"HN" => "Honduras",
|
168
|
+
"HK" => "Hong Kong",
|
169
|
+
"HU" => "Hungary",
|
170
|
+
"IS" => "Iceland",
|
171
|
+
"IN" => "India",
|
172
|
+
"ID" => "Indonesia",
|
173
|
+
"IR" => "Iran",
|
174
|
+
"IQ" => "Iraq",
|
175
|
+
"IE" => "Ireland",
|
176
|
+
"IL" => "Israel",
|
177
|
+
"IT" => "Italy",
|
178
|
+
"JM" => "Jamaica",
|
179
|
+
"JP" => "Japan",
|
180
|
+
"JT" => "Johnston Island",
|
181
|
+
"JO" => "Jordan",
|
182
|
+
"KZ" => "Kazakhstan",
|
183
|
+
"KE" => "Kenya",
|
184
|
+
"KI" => "Kiribati",
|
185
|
+
"KP" => "Korea, Democratic Peoples Republic",
|
186
|
+
"KR" => "Korea, Republic of",
|
187
|
+
"KW" => "Kuwait",
|
188
|
+
"KG" => "Kyrgyzstan",
|
189
|
+
"LA" => "Lao People's Democratic Republic",
|
190
|
+
"LV" => "Latvia",
|
191
|
+
"LB" => "Lebanon",
|
192
|
+
"LS" => "Lesotho",
|
193
|
+
"LR" => "Liberia",
|
194
|
+
"LY" => "Libyan Arab Jamahiriya",
|
195
|
+
"LI" => "Liechtenstein",
|
196
|
+
"LT" => "Lithuania",
|
197
|
+
"LU" => "Luxembourg",
|
198
|
+
"MO" => "Macau",
|
199
|
+
"MK" => "Macedonia",
|
200
|
+
"MG" => "Madagascar",
|
201
|
+
"MW" => "Malawi",
|
202
|
+
"MY" => "Malaysia",
|
203
|
+
"MV" => "Maldives",
|
204
|
+
"ML" => "Mali",
|
205
|
+
"MT" => "Malta",
|
206
|
+
"MH" => "Marshall Islands",
|
207
|
+
"MQ" => "Martinique",
|
208
|
+
"MR" => "Mauritania",
|
209
|
+
"MU" => "Mauritius",
|
210
|
+
"YT" => "Mayotte",
|
211
|
+
"MX" => "Mexico",
|
212
|
+
"FM" => "Micronesia",
|
213
|
+
"MD" => "Moldavia",
|
214
|
+
"MC" => "Monaco",
|
215
|
+
"MN" => "Mongolia",
|
216
|
+
"ME" => "Montenegro",
|
217
|
+
"MS" => "Montserrat",
|
218
|
+
"MA" => "Morocco",
|
219
|
+
"MZ" => "Mozambique",
|
220
|
+
"MM" => "Union Of Myanmar",
|
221
|
+
"NA" => "Namibia",
|
222
|
+
"NR" => "Nauru Island",
|
223
|
+
"NP" => "Nepal",
|
224
|
+
"NL" => "Netherlands",
|
225
|
+
"AN" => "Netherlands Antilles",
|
226
|
+
"NC" => "New Caledonia",
|
227
|
+
"NZ" => "New Zealand",
|
228
|
+
"NI" => "Nicaragua",
|
229
|
+
"NE" => "Niger",
|
230
|
+
"NG" => "Nigeria",
|
231
|
+
"NU" => "Niue",
|
232
|
+
"NF" => "Norfolk Island",
|
233
|
+
"MP" => "Mariana Islands, Northern",
|
234
|
+
"NO" => "Norway",
|
235
|
+
"OM" => "Oman",
|
236
|
+
"PK" => "Pakistan",
|
237
|
+
"PW" => "Palau Islands",
|
238
|
+
"PS" => "Palestine",
|
239
|
+
"PA" => "Panama",
|
240
|
+
"PG" => "Papua New Guinea",
|
241
|
+
"PY" => "Paraguay",
|
242
|
+
"PE" => "Peru",
|
243
|
+
"PH" => "Philippines",
|
244
|
+
"PN" => "Pitcairn",
|
245
|
+
"PL" => "Poland",
|
246
|
+
"PT" => "Portugal",
|
247
|
+
"PR" => "Puerto Rico",
|
248
|
+
"QA" => "Qatar",
|
249
|
+
"RE" => "Reunion Island",
|
250
|
+
"RO" => "Romania",
|
251
|
+
"RU" => "Russian Federation",
|
252
|
+
"RW" => "Rwanda",
|
253
|
+
"WS" => "Samoa",
|
254
|
+
"SH" => "St Helena",
|
255
|
+
"KN" => "St Kitts & Nevis",
|
256
|
+
"LC" => "St Lucia",
|
257
|
+
"PM" => "St Pierre & Miquelon",
|
258
|
+
"VC" => "St Vincent",
|
259
|
+
"SM" => "San Marino",
|
260
|
+
"ST" => "Sao Tome & Principe",
|
261
|
+
"SA" => "Saudi Arabia",
|
262
|
+
"SN" => "Senegal",
|
263
|
+
"RS" => "Serbia",
|
264
|
+
"SC" => "Seychelles",
|
265
|
+
"SL" => "Sierra Leone",
|
266
|
+
"SG" => "Singapore",
|
267
|
+
"SK" => "Slovakia",
|
268
|
+
"SI" => "Slovenia",
|
269
|
+
"SB" => "Solomon Islands",
|
270
|
+
"SO" => "Somalia",
|
271
|
+
"ZA" => "South Africa",
|
272
|
+
"GS" => "South Georgia and South Sandwich",
|
273
|
+
"ES" => "Spain",
|
274
|
+
"LK" => "Sri Lanka",
|
275
|
+
"XX" => "Stateless Persons",
|
276
|
+
"SD" => "Sudan",
|
277
|
+
"SR" => "Suriname",
|
278
|
+
"SJ" => "Svalbard and Jan Mayen",
|
279
|
+
"SZ" => "Swaziland",
|
280
|
+
"SE" => "Sweden",
|
281
|
+
"CH" => "Switzerland",
|
282
|
+
"SY" => "Syrian Arab Republic",
|
283
|
+
"TW" => "Taiwan, Republic of China",
|
284
|
+
"TJ" => "Tajikistan",
|
285
|
+
"TZ" => "Tanzania",
|
286
|
+
"TH" => "Thailand",
|
287
|
+
"TL" => "Timor Leste",
|
288
|
+
"TG" => "Togo",
|
289
|
+
"TK" => "Tokelau",
|
290
|
+
"TO" => "Tonga",
|
291
|
+
"TT" => "Trinidad & Tobago",
|
292
|
+
"TN" => "Tunisia",
|
293
|
+
"TR" => "Turkey",
|
294
|
+
"TM" => "Turkmenistan",
|
295
|
+
"TC" => "Turks And Caicos Islands",
|
296
|
+
"TV" => "Tuvalu",
|
297
|
+
"UG" => "Uganda",
|
298
|
+
"UA" => "Ukraine",
|
299
|
+
"AE" => "United Arab Emirates",
|
300
|
+
"GB" => "United Kingdom",
|
301
|
+
"UM" => "US Minor Outlying Islands",
|
302
|
+
"US" => "USA",
|
303
|
+
"HV" => "Upper Volta",
|
304
|
+
"UY" => "Uruguay",
|
305
|
+
"UZ" => "Uzbekistan",
|
306
|
+
"VU" => "Vanuatu",
|
307
|
+
"VA" => "Vatican City State",
|
308
|
+
"VE" => "Venezuela",
|
309
|
+
"VN" => "Vietnam",
|
310
|
+
"VG" => "Virgin Islands (British)",
|
311
|
+
"VI" => "Virgin Islands (US)",
|
312
|
+
"WF" => "Wallis And Futuna Islands",
|
313
|
+
"EH" => "Western Sahara",
|
314
|
+
"YE" => "Yemen Arab Rep.",
|
315
|
+
"YD" => "Yemen Democratic",
|
316
|
+
"YU" => "Yugoslavia",
|
317
|
+
"ZR" => "Zaire",
|
318
|
+
"ZM" => "Zambia",
|
319
|
+
"ZW" => "Zimbabwe"
|
320
|
+
}
|
321
|
+
|
322
|
+
def validate tag
|
323
|
+
unless COUNTRY_CODES.keys.include? tag.text!.strip.upcase
|
324
|
+
raise InvalidValueError, "invalid country code: #{tag.text!}"
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
class TextIsValidCurrency
|
330
|
+
CURRENCIES = {
|
331
|
+
'AF' => 'AFA',
|
332
|
+
'AL' => 'ALL',
|
333
|
+
'DZ' => 'DZD',
|
334
|
+
'AS' => 'USD',
|
335
|
+
'AD' => 'EUR',
|
336
|
+
'AO' => 'AOA',
|
337
|
+
'AI' => 'XCD',
|
338
|
+
'AQ' => 'NOK',
|
339
|
+
'AG' => 'XCD',
|
340
|
+
'AR' => 'ARA',
|
341
|
+
'AM' => 'AMD',
|
342
|
+
'AW' => 'AWG',
|
343
|
+
'AU' => 'AUD',
|
344
|
+
'AT' => 'EUR',
|
345
|
+
'AZ' => 'AZM',
|
346
|
+
'BS' => 'BSD',
|
347
|
+
'BH' => 'BHD',
|
348
|
+
'BD' => 'BDT',
|
349
|
+
'BB' => 'BBD',
|
350
|
+
'BY' => 'BYR',
|
351
|
+
'BE' => 'EUR',
|
352
|
+
'BZ' => 'BZD',
|
353
|
+
'BJ' => 'XAF',
|
354
|
+
'BM' => 'BMD',
|
355
|
+
'BT' => 'BTN',
|
356
|
+
'BO' => 'BOB',
|
357
|
+
'BA' => 'BAM',
|
358
|
+
'BW' => 'BWP',
|
359
|
+
'BV' => 'NOK',
|
360
|
+
'BR' => 'BRL',
|
361
|
+
'IO' => 'GBP',
|
362
|
+
'BN' => 'BND',
|
363
|
+
'BG' => 'BGN',
|
364
|
+
'BF' => 'XAF',
|
365
|
+
'BI' => 'BIF',
|
366
|
+
'KH' => 'KHR',
|
367
|
+
'CM' => 'XAF',
|
368
|
+
'CA' => 'CAD',
|
369
|
+
'CV' => 'CVE',
|
370
|
+
'KY' => 'KYD',
|
371
|
+
'CF' => 'XAF',
|
372
|
+
'TD' => 'XAF',
|
373
|
+
'CL' => 'CLF',
|
374
|
+
'CN' => 'CNY',
|
375
|
+
'CX' => 'AUD',
|
376
|
+
'CC' => 'AUD',
|
377
|
+
'CO' => 'COP',
|
378
|
+
'KM' => 'KMF',
|
379
|
+
'CD' => 'CDZ',
|
380
|
+
'CG' => 'XAF',
|
381
|
+
'CK' => 'NZD',
|
382
|
+
'CR' => 'CRC',
|
383
|
+
'HR' => 'HRK',
|
384
|
+
'CU' => 'CUP',
|
385
|
+
'CY' => 'EUR',
|
386
|
+
'CZ' => 'CZK',
|
387
|
+
'DK' => 'DKK',
|
388
|
+
'DJ' => 'DJF',
|
389
|
+
'DM' => 'XCD',
|
390
|
+
'DO' => 'DOP',
|
391
|
+
'TP' => 'TPE',
|
392
|
+
'EC' => 'USD',
|
393
|
+
'EG' => 'EGP',
|
394
|
+
'SV' => 'USD',
|
395
|
+
'GQ' => 'XAF',
|
396
|
+
'ER' => 'ERN',
|
397
|
+
'EE' => 'EEK',
|
398
|
+
'ET' => 'ETB',
|
399
|
+
'FK' => 'FKP',
|
400
|
+
'FO' => 'DKK',
|
401
|
+
'FJ' => 'FJD',
|
402
|
+
'FI' => 'EUR',
|
403
|
+
'FR' => 'EUR',
|
404
|
+
'FX' => 'EUR',
|
405
|
+
'GF' => 'EUR',
|
406
|
+
'PF' => 'XPF',
|
407
|
+
'TF' => 'EUR',
|
408
|
+
'GA' => 'XAF',
|
409
|
+
'GM' => 'GMD',
|
410
|
+
'GE' => 'GEL',
|
411
|
+
'DE' => 'EUR',
|
412
|
+
'GH' => 'GHC',
|
413
|
+
'GI' => 'GIP',
|
414
|
+
'GR' => 'EUR',
|
415
|
+
'GL' => 'DKK',
|
416
|
+
'GD' => 'XCD',
|
417
|
+
'GP' => 'EUR',
|
418
|
+
'GU' => 'USD',
|
419
|
+
'GT' => 'GTQ',
|
420
|
+
'GN' => 'GNS',
|
421
|
+
'GW' => 'GWP',
|
422
|
+
'GY' => 'GYD',
|
423
|
+
'HT' => 'HTG',
|
424
|
+
'HM' => 'AUD',
|
425
|
+
'VA' => 'EUR',
|
426
|
+
'HN' => 'HNL',
|
427
|
+
'HK' => 'HKD',
|
428
|
+
'HU' => 'HUF',
|
429
|
+
'IS' => 'ISK',
|
430
|
+
'IN' => 'INR',
|
431
|
+
'ID' => 'IDR',
|
432
|
+
'IR' => 'IRR',
|
433
|
+
'IQ' => 'IQD',
|
434
|
+
'IE' => 'EUR',
|
435
|
+
'IL' => 'ILS',
|
436
|
+
'IT' => 'EUR',
|
437
|
+
'CI' => 'XAF',
|
438
|
+
'JM' => 'JMD',
|
439
|
+
'JP' => 'JPY',
|
440
|
+
'JO' => 'JOD',
|
441
|
+
'KZ' => 'KZT',
|
442
|
+
'KE' => 'KES',
|
443
|
+
'KI' => 'AUD',
|
444
|
+
'KP' => 'KPW',
|
445
|
+
'KR' => 'KRW',
|
446
|
+
'KW' => 'KWD',
|
447
|
+
'KG' => 'KGS',
|
448
|
+
'LA' => 'LAK',
|
449
|
+
'LV' => 'LVL',
|
450
|
+
'LB' => 'LBP',
|
451
|
+
'LS' => 'LSL',
|
452
|
+
'LR' => 'LRD',
|
453
|
+
'LY' => 'LYD',
|
454
|
+
'LI' => 'CHF',
|
455
|
+
'LT' => 'LTL',
|
456
|
+
'LU' => 'EUR',
|
457
|
+
'MO' => 'MOP',
|
458
|
+
'MK' => 'MKD',
|
459
|
+
'MG' => 'MGF',
|
460
|
+
'MW' => 'MWK',
|
461
|
+
'MY' => 'MYR',
|
462
|
+
'MV' => 'MVR',
|
463
|
+
'ML' => 'XAF',
|
464
|
+
'MT' => 'EUR',
|
465
|
+
'MH' => 'USD',
|
466
|
+
'MQ' => 'EUR',
|
467
|
+
'MR' => 'MRO',
|
468
|
+
'MU' => 'MUR',
|
469
|
+
'YT' => 'EUR',
|
470
|
+
'MX' => 'MXN',
|
471
|
+
'FM' => 'USD',
|
472
|
+
'MD' => 'MDL',
|
473
|
+
'MC' => 'EUR',
|
474
|
+
'MN' => 'MNT',
|
475
|
+
'MS' => 'XCD',
|
476
|
+
'MA' => 'MAD',
|
477
|
+
'MZ' => 'MZM',
|
478
|
+
'MM' => 'MMK',
|
479
|
+
'NA' => 'NAD',
|
480
|
+
'NR' => 'AUD',
|
481
|
+
'NP' => 'NPR',
|
482
|
+
'NL' => 'EUR',
|
483
|
+
'AN' => 'ANG',
|
484
|
+
'NC' => 'XPF',
|
485
|
+
'NZ' => 'NZD',
|
486
|
+
'NI' => 'NIC',
|
487
|
+
'NE' => 'XOF',
|
488
|
+
'NG' => 'NGN',
|
489
|
+
'NU' => 'NZD',
|
490
|
+
'NF' => 'AUD',
|
491
|
+
'MP' => 'USD',
|
492
|
+
'NO' => 'NOK',
|
493
|
+
'OM' => 'OMR',
|
494
|
+
'PK' => 'PKR',
|
495
|
+
'PW' => 'USD',
|
496
|
+
'PA' => 'PAB',
|
497
|
+
'PG' => 'PGK',
|
498
|
+
'PY' => 'PYG',
|
499
|
+
'PE' => 'PEI',
|
500
|
+
'PH' => 'PHP',
|
501
|
+
'PN' => 'NZD',
|
502
|
+
'PL' => 'PLN',
|
503
|
+
'PT' => 'EUR',
|
504
|
+
'PR' => 'USD',
|
505
|
+
'QA' => 'QAR',
|
506
|
+
'RE' => 'EUR',
|
507
|
+
'RO' => 'ROL',
|
508
|
+
'RU' => 'RUB',
|
509
|
+
'RW' => 'RWF',
|
510
|
+
'KN' => 'XCD',
|
511
|
+
'LC' => 'XCD',
|
512
|
+
'VC' => 'XCD',
|
513
|
+
'WS' => 'WST',
|
514
|
+
'SM' => 'EUR',
|
515
|
+
'ST' => 'STD',
|
516
|
+
'SA' => 'SAR',
|
517
|
+
'SN' => 'XOF',
|
518
|
+
'CS' => 'EUR',
|
519
|
+
'SC' => 'SCR',
|
520
|
+
'SL' => 'SLL',
|
521
|
+
'SG' => 'SGD',
|
522
|
+
'SK' => 'EUR',
|
523
|
+
'SI' => 'EUR',
|
524
|
+
'SB' => 'SBD',
|
525
|
+
'SO' => 'SOS',
|
526
|
+
'ZA' => 'ZAR',
|
527
|
+
'GS' => 'GBP',
|
528
|
+
'ES' => 'EUR',
|
529
|
+
'LK' => 'LKR',
|
530
|
+
'SH' => 'SHP',
|
531
|
+
'PM' => 'EUR',
|
532
|
+
'SD' => 'SDG',
|
533
|
+
'SR' => 'SRG',
|
534
|
+
'SJ' => 'NOK',
|
535
|
+
'SZ' => 'SZL',
|
536
|
+
'SE' => 'SEK',
|
537
|
+
'CH' => 'CHF',
|
538
|
+
'SY' => 'SYP',
|
539
|
+
'TW' => 'TWD',
|
540
|
+
'TJ' => 'TJR',
|
541
|
+
'TZ' => 'TZS',
|
542
|
+
'TH' => 'THB',
|
543
|
+
'TG' => 'XAF',
|
544
|
+
'TK' => 'NZD',
|
545
|
+
'TO' => 'TOP',
|
546
|
+
'TT' => 'TTD',
|
547
|
+
'TN' => 'TND',
|
548
|
+
'TR' => 'TRY',
|
549
|
+
'TM' => 'TMM',
|
550
|
+
'TC' => 'USD',
|
551
|
+
'TV' => 'AUD',
|
552
|
+
'UG' => 'UGS',
|
553
|
+
'UA' => 'UAH',
|
554
|
+
'SU' => 'SUR',
|
555
|
+
'AE' => 'AED',
|
556
|
+
'GB' => 'GBP',
|
557
|
+
'US' => 'USD',
|
558
|
+
'UM' => 'USD',
|
559
|
+
'UY' => 'UYU',
|
560
|
+
'UZ' => 'UZS',
|
561
|
+
'VU' => 'VUV',
|
562
|
+
'VE' => 'VEF',
|
563
|
+
'VN' => 'VND',
|
564
|
+
'VG' => 'USD',
|
565
|
+
'VI' => 'USD',
|
566
|
+
'WF' => 'XPF',
|
567
|
+
'XO' => 'XOF',
|
568
|
+
'EH' => 'MAD',
|
569
|
+
'ZM' => 'ZMK',
|
570
|
+
'ZW' => 'USD'
|
571
|
+
}
|
572
|
+
|
573
|
+
def validate tag
|
574
|
+
unless CURRENCIES.values.include? tag.text!.strip.upcase
|
575
|
+
raise InvalidValueError, "invalid currency: #{tag.text!}"
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
class CurrMandatoryIfValueGT0
|
581
|
+
def validate price_tag
|
582
|
+
if price_tag.value.text!.to_i != 0
|
583
|
+
if price_tag.currency.text! == ""
|
584
|
+
raise InvalidValueError, "the <currency> element of a price item cannot be empty if <value> is not 0"
|
585
|
+
end
|
586
|
+
end
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
class LangIsValid
|
591
|
+
LANGUAGES = {
|
592
|
+
'aa' => 'Afar',
|
593
|
+
'ab' => 'Abkhaz',
|
594
|
+
'ae' => 'Avestan',
|
595
|
+
'af' => 'Afrikaans',
|
596
|
+
'ak' => 'Akan',
|
597
|
+
'am' => 'Amharic',
|
598
|
+
'an' => 'Aragonese',
|
599
|
+
'ar' => 'Arabic',
|
600
|
+
'as' => 'Assamese',
|
601
|
+
'av' => 'Avaric',
|
602
|
+
'ay' => 'Aymara',
|
603
|
+
'az' => 'Azerbaijani',
|
604
|
+
'ba' => 'Bashkir',
|
605
|
+
'be' => 'Belarusian',
|
606
|
+
'bg' => 'Bulgarian',
|
607
|
+
'bh' => 'Bihari',
|
608
|
+
'bi' => 'Bislama',
|
609
|
+
'bm' => 'Bambara',
|
610
|
+
'bn' => 'Bengali',
|
611
|
+
'bo' => 'Tibetan Standard, Tibetan, Central',
|
612
|
+
'br' => 'Breton',
|
613
|
+
'bs' => 'Bosnian',
|
614
|
+
'ca' => 'Catalan; Valencian',
|
615
|
+
'ce' => 'Chechen',
|
616
|
+
'ch' => 'Chamorro',
|
617
|
+
'co' => 'Corsican',
|
618
|
+
'cr' => 'Cree',
|
619
|
+
'cs' => 'Czech',
|
620
|
+
'cu' => 'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic',
|
621
|
+
'cv' => 'Chuvash',
|
622
|
+
'cy' => 'Welsh',
|
623
|
+
'da' => 'Danish',
|
624
|
+
'de' => 'German',
|
625
|
+
'dv' => 'Divehi; Dhivehi; Maldivian;',
|
626
|
+
'dz' => 'Dzongkha',
|
627
|
+
'ee' => 'Ewe',
|
628
|
+
'el' => 'Greek, Modern',
|
629
|
+
'en' => 'English',
|
630
|
+
'eo' => 'Esperanto',
|
631
|
+
'es' => 'Spanish; Castilian',
|
632
|
+
'et' => 'Estonian',
|
633
|
+
'eu' => 'Basque',
|
634
|
+
'fa' => 'Persian',
|
635
|
+
'ff' => 'Fula; Fulah; Pulaar; Pular',
|
636
|
+
'fi' => 'Finnish',
|
637
|
+
'fj' => 'Fijian',
|
638
|
+
'fo' => 'Faroese',
|
639
|
+
'fr' => 'French',
|
640
|
+
'fy' => 'Western Frisian',
|
641
|
+
'ga' => 'Irish',
|
642
|
+
'gd' => 'Scottish Gaelic; Gaelic',
|
643
|
+
'gl' => 'Galician',
|
644
|
+
'gn' => 'Guaran',
|
645
|
+
'gu' => 'Gujarati',
|
646
|
+
'gv' => 'Manx',
|
647
|
+
'ha' => 'Hausa',
|
648
|
+
'he' => 'Hebrew (modern)',
|
649
|
+
'hi' => 'Hindi',
|
650
|
+
'ho' => 'Hiri Motu',
|
651
|
+
'hr' => 'Croatian',
|
652
|
+
'ht' => 'Haitian; Haitian Creole',
|
653
|
+
'hu' => 'Hungarian',
|
654
|
+
'hy' => 'Armenian',
|
655
|
+
'hz' => 'Herero',
|
656
|
+
'ia' => 'Interlingua',
|
657
|
+
'id' => 'Indonesian',
|
658
|
+
'ie' => 'Interlingue',
|
659
|
+
'ig' => 'Igbo',
|
660
|
+
'ii' => 'Nuosu',
|
661
|
+
'ik' => 'Inupiaq',
|
662
|
+
'io' => 'Ido',
|
663
|
+
'is' => 'Icelandic',
|
664
|
+
'it' => 'Italian',
|
665
|
+
'iu' => 'Inuktitut',
|
666
|
+
'ja' => 'Japanese (ja)',
|
667
|
+
'jv' => 'Javanese (jv)',
|
668
|
+
'ka' => 'Georgian',
|
669
|
+
'kg' => 'Kongo',
|
670
|
+
'ki' => 'Kikuyu, Gikuyu',
|
671
|
+
'kj' => 'Kwanyama, Kuanyama',
|
672
|
+
'kk' => 'Kazakh',
|
673
|
+
'kl' => 'Kalaallisut, Greenlandic',
|
674
|
+
'km' => 'Khmer',
|
675
|
+
'kn' => 'Kannada',
|
676
|
+
'ko' => 'Korean',
|
677
|
+
'kr' => 'Kanuri',
|
678
|
+
'ks' => 'Kashmiri',
|
679
|
+
'ku' => 'Kurdish',
|
680
|
+
'kv' => 'Komi',
|
681
|
+
'kw' => 'Cornish',
|
682
|
+
'ky' => 'Kirghiz, Kyrgyz',
|
683
|
+
'la' => 'Latin',
|
684
|
+
'lb' => 'Luxembourgish, Letzeburgesch',
|
685
|
+
'lg' => 'Luganda',
|
686
|
+
'li' => 'Limburgish, Limburgan, Limburger',
|
687
|
+
'ln' => 'Lingala',
|
688
|
+
'lo' => 'Lao',
|
689
|
+
'lt' => 'Lithuanian',
|
690
|
+
'lu' => 'Luba-Katanga',
|
691
|
+
'lv' => 'Latvian',
|
692
|
+
'mg' => 'Malagasy',
|
693
|
+
'mh' => 'Marshallese',
|
694
|
+
'mi' => 'Maori',
|
695
|
+
'mk' => 'Macedonian',
|
696
|
+
'ml' => 'Malayalam',
|
697
|
+
'mn' => 'Mongolian',
|
698
|
+
'mr' => 'Marathi (Mara?hi)',
|
699
|
+
'ms' => 'Malay',
|
700
|
+
'mt' => 'Maltese',
|
701
|
+
'my' => 'Burmese',
|
702
|
+
'na' => 'Nauru',
|
703
|
+
'nb' => 'Norwegian Bokm',
|
704
|
+
'nd' => 'North Ndebele',
|
705
|
+
'ne' => 'Nepali',
|
706
|
+
'ng' => 'Ndonga',
|
707
|
+
'nl' => 'Dutch',
|
708
|
+
'nn' => 'Norwegian Nynorsk',
|
709
|
+
'no' => 'Norwegian',
|
710
|
+
'nr' => 'South Ndebele',
|
711
|
+
'nv' => 'Navajo, Navaho',
|
712
|
+
'ny' => 'Chichewa; Chewa; Nyanja',
|
713
|
+
'oc' => 'Occitan',
|
714
|
+
'oj' => 'Ojibwe, Ojibwa',
|
715
|
+
'om' => 'Oromo',
|
716
|
+
'or' => 'Oriya',
|
717
|
+
'os' => 'Ossetian, Ossetic',
|
718
|
+
'pa' => 'Panjabi, Punjabi',
|
719
|
+
'pi' => 'Pali',
|
720
|
+
'pl' => 'Polish',
|
721
|
+
'ps' => 'Pashto, Pushto',
|
722
|
+
'pt' => 'Portuguese',
|
723
|
+
'qu' => 'Quechua',
|
724
|
+
'rm' => 'Romansh',
|
725
|
+
'rn' => 'Kirundi',
|
726
|
+
'ro' => 'Romanian, Moldavian, Moldovan',
|
727
|
+
'ru' => 'Russian',
|
728
|
+
'rw' => 'Kinyarwanda',
|
729
|
+
'sa' => 'Sanskrit (Sa?sk?ta)',
|
730
|
+
'sc' => 'Sardinian',
|
731
|
+
'sd' => 'Sindhi',
|
732
|
+
'se' => 'Northern Sami',
|
733
|
+
'sg' => 'Sango',
|
734
|
+
'si' => 'Sinhala, Sinhalese',
|
735
|
+
'sk' => 'Slovak',
|
736
|
+
'sl' => 'Slovene',
|
737
|
+
'sm' => 'Samoan',
|
738
|
+
'sn' => 'Shona',
|
739
|
+
'so' => 'Somali',
|
740
|
+
'sq' => 'Albanian',
|
741
|
+
'sr' => 'Serbian',
|
742
|
+
'ss' => 'Swati',
|
743
|
+
'st' => 'Southern Sotho',
|
744
|
+
'su' => 'Sundanese',
|
745
|
+
'sv' => 'Swedish',
|
746
|
+
'sw' => 'Swahili',
|
747
|
+
'ta' => 'Tamil',
|
748
|
+
'te' => 'Telugu',
|
749
|
+
'tg' => 'Tajik',
|
750
|
+
'th' => 'Thai',
|
751
|
+
'ti' => 'Tigrinya',
|
752
|
+
'tk' => 'Turkmen',
|
753
|
+
'tl' => 'Tagalog',
|
754
|
+
'tn' => 'Tswana',
|
755
|
+
'to' => 'Tonga (Tonga Islands)',
|
756
|
+
'tr' => 'Turkish',
|
757
|
+
'ts' => 'Tsonga',
|
758
|
+
'tt' => 'Tatar',
|
759
|
+
'tw' => 'Twi',
|
760
|
+
'ty' => 'Tahitian',
|
761
|
+
'ug' => 'Uighur, Uyghur',
|
762
|
+
'uk' => 'Ukrainian',
|
763
|
+
'ur' => 'Urdu',
|
764
|
+
'uz' => 'Uzbek',
|
765
|
+
've' => 'Venda',
|
766
|
+
'vi' => 'Vietnamese',
|
767
|
+
'vo' => 'Volapk',
|
768
|
+
'wa' => 'Walloon',
|
769
|
+
'wo' => 'Wolof',
|
770
|
+
'xh' => 'Xhosa',
|
771
|
+
'yi' => 'Yiddish',
|
772
|
+
'yo' => 'Yoruba',
|
773
|
+
'za' => 'Zhuang, Chuang',
|
774
|
+
'zh' => 'Chinese',
|
775
|
+
'zu' => 'Zulu'
|
776
|
+
}
|
777
|
+
|
778
|
+
def validate ess_tag
|
779
|
+
unless LANGUAGES.has_key?(ess_tag.lang_attr) || ess_tag.lang_attr == ""
|
780
|
+
raise InvalidValueError, "the \"lang\" attribute value is invalid: #{ess_tag.lang_attr}"
|
781
|
+
end
|
782
|
+
end
|
783
|
+
end
|
784
|
+
|
785
|
+
class UnitMandatoryIfRecurrent
|
786
|
+
def validate item_tag
|
787
|
+
if item_tag.type_attr == "recurrent"
|
788
|
+
unless item_tag.unit_attr != ""
|
789
|
+
raise InvalidValueError, "the \"unit\" attribute is mandatory in a date item if type is recurrent"
|
790
|
+
end
|
791
|
+
end
|
792
|
+
end
|
793
|
+
end
|
794
|
+
|
795
|
+
end
|
796
|
+
end
|
797
|
+
|