kountries 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,466 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kountries
4
+ # Europe
5
+ module Europe
6
+ def self.find_country_by_name(name)
7
+ constants.each do |country|
8
+ european_country_class = Module.const_get "Kountries::Europe::#{country}"
9
+ return as_struct(european_country_class) if european_country_class::NAME.upcase == name.upcase
10
+ return as_struct(european_country_class) if european_country_class::UN_OFFICIAL_NAMES.include?(name.capitalize)
11
+ end
12
+
13
+ empty_struct
14
+ end
15
+
16
+ def self.find_country_by_code(code)
17
+ return empty_struct unless Kountries::Europe.constants.include?(code.intern)
18
+
19
+ european_country_class = Module.const_get "Kountries::Europe::#{code}"
20
+ return as_struct(european_country_class) if european_country_class::ALPHA_2 == code
21
+ end
22
+
23
+ def self.as_struct(european_country_class)
24
+ OpenStruct.new(
25
+ alpha2: european_country_class::ALPHA_2,
26
+ alpha3: european_country_class::ALPHA_3,
27
+ country_code: european_country_class::COUNTRY_CODE,
28
+ name: european_country_class::NAME,
29
+ unofficial_names: european_country_class::UN_OFFICIAL_NAMES
30
+ )
31
+ end
32
+
33
+ def self.empty_struct
34
+ OpenStruct.new(
35
+ alpha2: nil,
36
+ alpha3: nil,
37
+ country_code: nil,
38
+ name: nil,
39
+ unofficial_names: nil
40
+ )
41
+ end
42
+
43
+ class NL
44
+ ALPHA_2 = "NL"
45
+ ALPHA_3 = "NLD"
46
+ COUNTRY_CODE = "31"
47
+ NAME = "Netherlands"
48
+ UN_OFFICIAL_NAMES = ["Netherlands", "The Netherlands", "Niederlande", "Pays-Bas", "Países Bajos", "オランダ",
49
+ "Nederland"].freeze
50
+ end
51
+
52
+ class LU
53
+ ALPHA_2 = "LU"
54
+ ALPHA_3 = "LUX"
55
+ COUNTRY_CODE = "352"
56
+ NAME = "Luxembourg"
57
+ UN_OFFICIAL_NAMES = %w[Luxembourg Luxemburg Luxemburgo ルクセンブルク].freeze
58
+ end
59
+
60
+ class SM
61
+ ALPHA_2 = "SM"
62
+ ALPHA_3 = "SMR"
63
+ COUNTRY_CODE = "378"
64
+ NAME = "San Marino"
65
+ UN_OFFICIAL_NAMES = ["San Marino", "Saint-Marin", "サンマリノ"].freeze
66
+ end
67
+
68
+ class MK
69
+ ALPHA_2 = "MK"
70
+ ALPHA_3 = "MKD"
71
+ COUNTRY_CODE = "389"
72
+ NAME = "North Macedonia"
73
+ UN_OFFICIAL_NAMES = ["Macedonia", "Mazedonien", "Macédoine", "F.Y.R.O.M (Macedonia)", "マケドニア旧ユーゴスラビア共和国",
74
+ "Macedonië [FYROM].freeze", "Macedonia (The Former Yugoslav Republic of)",
75
+ "North Macedonia"].freeze
76
+ end
77
+
78
+ class UA
79
+ ALPHA_2 = "UA"
80
+ ALPHA_3 = "UKR"
81
+ COUNTRY_CODE = "380"
82
+ NAME = "Ukraine"
83
+ UN_OFFICIAL_NAMES = %w[Ukraine Ucrania ウクライナ Oekraïne Украина Україна Украіна].freeze
84
+ end
85
+
86
+ class CH
87
+ ALPHA_2 = "CH"
88
+ ALPHA_3 = "CHE"
89
+ COUNTRY_CODE = "41"
90
+ NAME = "Switzerland"
91
+ UN_OFFICIAL_NAMES = %w[Switzerland Schweiz Suisse Suiza スイス Zwitserland].freeze
92
+ end
93
+
94
+ class FO
95
+ ALPHA_2 = "FO"
96
+ ALPHA_3 = "FRO"
97
+ COUNTRY_CODE = "298"
98
+ NAME = "Faroe Islands"
99
+ UN_OFFICIAL_NAMES = ["Faroe Islands", "Färöer-Inseln", "Îles Féroé", "Islas Faroe", "フェロー諸島", "Faeröer"].freeze
100
+ end
101
+
102
+ class GI
103
+ ALPHA_2 = "GI"
104
+ ALPHA_3 = "GIB"
105
+ COUNTRY_CODE = "350"
106
+ NAME = "Gibraltar"
107
+ UN_OFFICIAL_NAMES = %w[Gibraltar ジブラルタル].freeze
108
+ end
109
+
110
+ class IS
111
+ ALPHA_2 = "IS"
112
+ ALPHA_3 = "ISL"
113
+ COUNTRY_CODE = "354"
114
+ NAME = "Iceland"
115
+ UN_OFFICIAL_NAMES = %w[Iceland Island Islande Islandia アイスランド IJsland].freeze
116
+ end
117
+
118
+ class EE
119
+ ALPHA_2 = "EE"
120
+ ALPHA_3 = "EST"
121
+ COUNTRY_CODE = "372"
122
+ NAME = "Estonia"
123
+ UN_OFFICIAL_NAMES = %w[Estonia Estland Estonie エストニア].freeze
124
+ end
125
+
126
+ class LT
127
+ ALPHA_2 = "LT"
128
+ ALPHA_3 = "LTU"
129
+ COUNTRY_CODE = "370"
130
+ NAME = "Lithuania"
131
+ UN_OFFICIAL_NAMES = %w[Lithuania Litauen Lituanie Lituania リトアニア Litouwen Літва Lietuva].freeze
132
+ end
133
+
134
+ class RS
135
+ ALPHA_2 = "RS"
136
+ ALPHA_3 = "SRB"
137
+ COUNTRY_CODE = "381"
138
+ NAME = "Serbia"
139
+ UN_OFFICIAL_NAMES = %w[Serbia Serbien Serbie セルビア Servië].freeze
140
+ end
141
+
142
+ class AD
143
+ ALPHA_2 = "AD"
144
+ ALPHA_3 = "AND"
145
+ COUNTRY_CODE = "376"
146
+ NAME = "Andorra"
147
+ UN_OFFICIAL_NAMES = %w[Andorre Andorra アンドラ].freeze
148
+ end
149
+
150
+ class HU
151
+ ALPHA_2 = "HU"
152
+ ALPHA_3 = "HUN"
153
+ COUNTRY_CODE = "36"
154
+ NAME = "Hungary"
155
+ UN_OFFICIAL_NAMES = %w[Hungary Ungarn Hongrie Hungría ハンガリー Hongarije].freeze
156
+ end
157
+
158
+ class BE
159
+ ALPHA_2 = "BE"
160
+ ALPHA_3 = "BEL"
161
+ COUNTRY_CODE = "32"
162
+ NAME = "Belgium"
163
+ UN_OFFICIAL_NAMES = %w[Belgium Belgien Belgique Bélgica ベルギー België].freeze
164
+ end
165
+
166
+ class PT
167
+ ALPHA_2 = "PT"
168
+ ALPHA_3 = "PRT"
169
+ COUNTRY_CODE = "351"
170
+ NAME = "Portugal"
171
+ UN_OFFICIAL_NAMES = %w[Portugal ポルトガル].freeze
172
+ end
173
+
174
+ class GB
175
+ ALPHA_2 = "GB"
176
+ ALPHA_3 = "GBR"
177
+ COUNTRY_CODE = "44"
178
+ NAME = "United Kingdom of Great Britain and Northern Ireland"
179
+ UN_OFFICIAL_NAMES = ["United Kingdom", "The United Kingdom", "Vereinigtes Königreich", "Royaume-Uni",
180
+ "Reino Unido", "イギリス", "Verenigd Koninkrijk", "Great Britain (UK)", "UK",
181
+ "Великобритания", "England", "Scotland", "Wales", "Northern Ireland",
182
+ "Great Britain"].freeze
183
+ end
184
+
185
+ class IM
186
+ ALPHA_2 = "IM"
187
+ ALPHA_3 = "IMN"
188
+ COUNTRY_CODE = "44"
189
+ NAME = "Isle of Man"
190
+ UN_OFFICIAL_NAMES = ["Isle of Man", "Insel Man", "Île de Man", "Isla de Man", "マン島"].freeze
191
+ end
192
+
193
+ class SK
194
+ ALPHA_2 = "SK"
195
+ ALPHA_3 = "SVK"
196
+ COUNTRY_CODE = "421"
197
+ NAME = "Slovakia"
198
+ UN_OFFICIAL_NAMES = ["Slovakia", "Slowakei", "Slovaquie", "República Eslovaca", "スロバキア", "Slowakije"].freeze
199
+ end
200
+
201
+ class HR
202
+ ALPHA_2 = "HR"
203
+ ALPHA_3 = "HRV"
204
+ COUNTRY_CODE = "385"
205
+ NAME = "Croatia"
206
+ UN_OFFICIAL_NAMES = ["Croatia", "Kroatien", "Croatie", "Croacia", "クロアチア", "Kroatië", "Croatia (Hrvatska)"].freeze
207
+ end
208
+
209
+ class CZ
210
+ ALPHA_2 = "CZ"
211
+ ALPHA_3 = "CZE"
212
+ COUNTRY_CODE = "420"
213
+ NAME = "Czech Republic"
214
+ UN_OFFICIAL_NAMES = ["Czech Republic", "Tschechische Republik", "République Tchèque", "República Checa",
215
+ "チェコ", "Tsjechië", "Czechia"].freeze
216
+ end
217
+
218
+ class IT
219
+ ALPHA_2 = "IT"
220
+ ALPHA_3 = "ITA"
221
+ COUNTRY_CODE = "39"
222
+ NAME = "Italy"
223
+ UN_OFFICIAL_NAMES = %w[Italy Italien Italie Italia イタリア Italië].freeze
224
+ end
225
+
226
+ class FI
227
+ ALPHA_2 = "FI"
228
+ ALPHA_3 = "FIN"
229
+ COUNTRY_CODE = "358"
230
+ NAME = "Finland"
231
+ UN_OFFICIAL_NAMES = %w[Finland Finnland Finlande Finlandia フィンランド].freeze
232
+ end
233
+
234
+ class VA
235
+ ALPHA_2 = "VA"
236
+ ALPHA_3 = "VAT"
237
+ COUNTRY_CODE = "39"
238
+ NAME = "Holy See"
239
+ UN_OFFICIAL_NAMES = ["Vatican City", "Vatikan", "Cité du Vatican", "Ciudad del Vaticano",
240
+ "バチカン市国", "Vaticaanstad", "Vatican City State (Holy See)"].freeze
241
+ end
242
+
243
+ class RU
244
+ ALPHA_2 = "RU"
245
+ ALPHA_3 = "RUS"
246
+ COUNTRY_CODE = "7"
247
+ NAME = "Russian Federation"
248
+ UN_OFFICIAL_NAMES = %w[Russia Russland Russie Rusia ロシア連邦 Rusland Россия Расія].freeze
249
+ end
250
+
251
+ class PL
252
+ ALPHA_2 = "PL"
253
+ ALPHA_3 = "POL"
254
+ COUNTRY_CODE = "48"
255
+ NAME = "Poland"
256
+ UN_OFFICIAL_NAMES = %w[Poland Polen Pologne Polonia ポーランド].freeze
257
+ end
258
+
259
+ class MT
260
+ ALPHA_2 = "MT"
261
+ ALPHA_3 = "MLT"
262
+ COUNTRY_CODE = "356"
263
+ NAME = "Malta"
264
+ UN_OFFICIAL_NAMES = %w[Malta Malte マルタ].freeze
265
+ end
266
+
267
+ class DE
268
+ ALPHA_2 = "DE"
269
+ ALPHA_3 = "DEU"
270
+ COUNTRY_CODE = "49"
271
+ NAME = "Germany"
272
+ UN_OFFICIAL_NAMES = %w[Germany Deutschland Allemagne Alemania ドイツ Duitsland].freeze
273
+ end
274
+
275
+ class SJ
276
+ ALPHA_2 = "SJ"
277
+ ALPHA_3 = "SJM"
278
+ COUNTRY_CODE = "47"
279
+ NAME = "Svalbard and Jan Mayen"
280
+ UN_OFFICIAL_NAMES = ["Svalbard and Jan Mayen", "Svalbard und Jan Mayen", "Îles Svalbard et Jan Mayen",
281
+ "Islas Svalbard y Jan Mayen", "スヴァールバル諸島およびヤンマイエン島",
282
+ "Svalbard en Jan Mayen"].freeze
283
+ end
284
+
285
+ class SI
286
+ ALPHA_2 = "SI"
287
+ ALPHA_3 = "SVN"
288
+ COUNTRY_CODE = "386"
289
+ NAME = "Slovenia"
290
+ UN_OFFICIAL_NAMES = %w[Slovenia Slowenien Slovénie Eslovenia スロベニア Slovenië].freeze
291
+ end
292
+
293
+ class AX
294
+ ALPHA_2 = "AX"
295
+ ALPHA_3 = "ALA"
296
+ COUNTRY_CODE = "358"
297
+ NAME = "Åland Islands"
298
+ UN_OFFICIAL_NAMES = ["Åland Islands", "Åland", "オーランド諸島", "Ålandeilanden"].freeze
299
+ end
300
+
301
+ class RO
302
+ ALPHA_2 = "RO"
303
+ ALPHA_3 = "ROU"
304
+ COUNTRY_CODE = "40"
305
+ NAME = "Romania"
306
+ UN_OFFICIAL_NAMES = %w[Romania Rumänien Roumanie Rumania ルーマニア Roemenië].freeze
307
+ end
308
+
309
+ class BG
310
+ ALPHA_2 = "BG"
311
+ ALPHA_3 = "BGR"
312
+ COUNTRY_CODE = "359"
313
+ NAME = "Bulgaria"
314
+ UN_OFFICIAL_NAMES = %w[Bulgaria Bulgarien Bulgarie ブルガリア Bulgarije].freeze
315
+ end
316
+
317
+ class JE
318
+ ALPHA_2 = "JE"
319
+ ALPHA_3 = "JEY"
320
+ COUNTRY_CODE = "44"
321
+ NAME = "Jersey"
322
+ UN_OFFICIAL_NAMES = %w[Jersey ジャージー].freeze
323
+ end
324
+
325
+ class AT
326
+ ALPHA_2 = "AT"
327
+ ALPHA_3 = "AUT"
328
+ COUNTRY_CODE = "43"
329
+ NAME = "Austria"
330
+ UN_OFFICIAL_NAMES = %w[Austria Österreich Autriche オーストリア Oostenrijk].freeze
331
+ end
332
+
333
+ class SE
334
+ ALPHA_2 = "SE"
335
+ ALPHA_3 = "SWE"
336
+ COUNTRY_CODE = "46"
337
+ NAME = "Sweden"
338
+ UN_OFFICIAL_NAMES = %w[Sweden Schweden Suède Suecia スウェーデン Zweden].freeze
339
+ end
340
+
341
+ class MC
342
+ ALPHA_2 = "MC"
343
+ ALPHA_3 = "MCO"
344
+ COUNTRY_CODE = "377"
345
+ NAME = "Monaco"
346
+ UN_OFFICIAL_NAMES = %w[Monaco Mónaco モナコ].freeze
347
+ end
348
+
349
+ class DK
350
+ ALPHA_2 = "DK"
351
+ ALPHA_3 = "DNK"
352
+ COUNTRY_CODE = "45"
353
+ NAME = "Denmark"
354
+ UN_OFFICIAL_NAMES = %w[Denmark Dänemark Danemark Dinamarca デンマーク Denemarken].freeze
355
+ end
356
+
357
+ class FR
358
+ ALPHA_2 = "FR"
359
+ ALPHA_3 = "FRA"
360
+ COUNTRY_CODE = "33"
361
+ NAME = "France"
362
+ UN_OFFICIAL_NAMES = ["France", "Frankreich", "the French Republic", "フランス", "Frankrijk", "Francia"].freeze
363
+ end
364
+
365
+ class AL
366
+ ALPHA_2 = "AL"
367
+ ALPHA_3 = "ALB"
368
+ COUNTRY_CODE = "355"
369
+ NAME = "Albania"
370
+ UN_OFFICIAL_NAMES = %w[Albania Albanien Albanie アルバニア Albanië].freeze
371
+ end
372
+
373
+ class LI
374
+ ALPHA_2 = "LI"
375
+ ALPHA_3 = "LIE"
376
+ COUNTRY_CODE = "423"
377
+ NAME = "Liechtenstein"
378
+ UN_OFFICIAL_NAMES = %w[Liechtenstein リヒテンシュタイン].freeze
379
+ end
380
+
381
+ class MD
382
+ ALPHA_2 = "MD"
383
+ ALPHA_3 = "MDA"
384
+ COUNTRY_CODE = "373"
385
+ NAME = "Moldova (Republic of)"
386
+ UN_OFFICIAL_NAMES = ["Moldova", "Moldawien", "Moldavie", "Moldavia", "the Republic of Moldova", "モルドバ共和国",
387
+ "Moldavië"].freeze
388
+ end
389
+
390
+ class IE
391
+ ALPHA_2 = "IE"
392
+ ALPHA_3 = "IRL"
393
+ COUNTRY_CODE = "353"
394
+ NAME = "Ireland"
395
+ UN_OFFICIAL_NAMES = %w[Ireland Irland Irlande Irlanda アイルランド Ierland].freeze
396
+ end
397
+
398
+ class ES
399
+ ALPHA_2 = "ES"
400
+ ALPHA_3 = "ESP"
401
+ COUNTRY_CODE = "34"
402
+ NAME = "Spain"
403
+ UN_OFFICIAL_NAMES = %w[Spain Spanien Espagne España スペイン Spanje].freeze
404
+ end
405
+
406
+ class BA
407
+ ALPHA_2 = "BA"
408
+ ALPHA_3 = "BIH"
409
+ COUNTRY_CODE = "387"
410
+ NAME = "Bosnia and Herzegovina"
411
+ UN_OFFICIAL_NAMES = ["Bosnia and Herzegovina", "Bosnien und Herzegowina",
412
+ "Bosnie et Herzégovine", "Bosnia y Herzegovina",
413
+ "ボスニア・ヘルツェゴビナ", "Bosnië en Herzegovina", "Bosnia Herzegovina"].freeze
414
+ end
415
+
416
+ class GR
417
+ ALPHA_2 = "GR"
418
+ ALPHA_3 = "GRC"
419
+ COUNTRY_CODE = "30"
420
+ NAME = "Greece"
421
+ UN_OFFICIAL_NAMES = %w[Greece Griechenland Grèce Grecia ギリシャ Griekenland].freeze
422
+ end
423
+
424
+ class GG
425
+ ALPHA_2 = "GG"
426
+ ALPHA_3 = "GGY"
427
+ COUNTRY_CODE = "44"
428
+ NAME = "Guernsey"
429
+ UN_OFFICIAL_NAMES = ["Guernsey and Alderney", "Guernsey und Alderney",
430
+ "Guernsey et Alderney", "Guernsey y Alderney",
431
+ "ガーンジー", "Guernsey"].freeze
432
+ end
433
+
434
+ class BY
435
+ ALPHA_2 = "BY"
436
+ ALPHA_3 = "BLR"
437
+ COUNTRY_CODE = "375"
438
+ NAME = "Belarus"
439
+ UN_OFFICIAL_NAMES = %w[Belarus Weißrussland Biélorussie Bielorrusia ベラルーシ Wit-Rusland Беларусь].freeze
440
+ end
441
+
442
+ class LV
443
+ ALPHA_2 = "LV"
444
+ ALPHA_3 = "LVA"
445
+ COUNTRY_CODE = "371"
446
+ NAME = "Latvia"
447
+ UN_OFFICIAL_NAMES = %w[Latvia Lettland Lettonie Letonia ラトビア Letland].freeze
448
+ end
449
+
450
+ class NO
451
+ ALPHA_2 = "NO"
452
+ ALPHA_3 = "NOR"
453
+ COUNTRY_CODE = "47"
454
+ NAME = "Norway"
455
+ UN_OFFICIAL_NAMES = %w[Norway Norwegen Norvège Noruega ノルウェー Noorwegen].freeze
456
+ end
457
+
458
+ class ME
459
+ ALPHA_2 = "ME"
460
+ ALPHA_3 = "MNE"
461
+ COUNTRY_CODE = "382"
462
+ NAME = "Montenegro"
463
+ UN_OFFICIAL_NAMES = ["Crna Gora", "Montenegro", "モンテネグロ"].freeze
464
+ end
465
+ end
466
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kountries
4
+ # lookup country by code
5
+ class LookupByCode
6
+ def self.call(code:)
7
+ new(code).call
8
+ end
9
+
10
+ def initialize(code)
11
+ @code = code
12
+ end
13
+
14
+ def call
15
+ country_lookup
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :code
21
+
22
+ def country_lookup
23
+ african_country ||
24
+ american_country ||
25
+ asian_country ||
26
+ european_country ||
27
+ oceania_country || nil
28
+ end
29
+
30
+ def african_country
31
+ Kountries::Africa.find_country_by_code(code)
32
+ end
33
+
34
+ def american_country
35
+ Kountries::America.find_country_by_code(code)
36
+ end
37
+
38
+ def asian_country
39
+ Kountries::Asia.find_country_by_code(code)
40
+ end
41
+
42
+ def european_country
43
+ Kountries::Europe.find_country_by_code(code)
44
+ end
45
+
46
+ def oceania_country
47
+ Kountries::Oceania.find_country_by_code(code)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kountries
4
+ # lookup country by name
5
+ class LookupByName
6
+ def self.call(name:)
7
+ new(name).call
8
+ end
9
+
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+
14
+ def call
15
+ country_lookup
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :name
21
+
22
+ def country_lookup
23
+ african_country ||
24
+ american_country ||
25
+ asian_country ||
26
+ european_country ||
27
+ oceania_country || nil
28
+ end
29
+
30
+ def african_country
31
+ Kountries::Africa.find_country_by_name(name)
32
+ end
33
+
34
+ def american_country
35
+ Kountries::America.find_country_by_name(name)
36
+ end
37
+
38
+ def asian_country
39
+ Kountries::Asia.find_country_by_name(name)
40
+ end
41
+
42
+ def european_country
43
+ Kountries::Europe.find_country_by_name(name)
44
+ end
45
+
46
+ def oceania_country
47
+ Kountries::Oceania.find_country_by_name(name)
48
+ end
49
+ end
50
+ end