kountries 0.1.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.
@@ -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