countries 3.1.0 → 4.0.0

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.
Files changed (395) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +37 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +28 -1
  5. data/Gemfile +5 -0
  6. data/README.markdown +30 -27
  7. data/Rakefile +5 -3
  8. data/countries.gemspec +8 -5
  9. data/lib/countries.rb +0 -1
  10. data/lib/countries/cache/countries.json +1 -1
  11. data/lib/countries/cache/locales/an.json +1 -1
  12. data/lib/countries/cache/locales/be.json +1 -1
  13. data/lib/countries/cache/locales/cv.json +1 -1
  14. data/lib/countries/cache/locales/he.json +1 -1
  15. data/lib/countries/cache/locales/hr.json +1 -1
  16. data/lib/countries/cache/locales/ru.json +1 -1
  17. data/lib/countries/cache/locales/sv.json +1 -1
  18. data/lib/countries/cache/locales/tr.json +1 -1
  19. data/lib/countries/country.rb +4 -0
  20. data/lib/countries/country/class_methods.rb +10 -3
  21. data/lib/countries/data.rb +48 -22
  22. data/lib/countries/data/countries/AL.yaml +2 -2
  23. data/lib/countries/data/countries/AM.yaml +2 -2
  24. data/lib/countries/data/countries/AO.yaml +10 -10
  25. data/lib/countries/data/countries/AQ.yaml +2 -2
  26. data/lib/countries/data/countries/AS.yaml +2 -2
  27. data/lib/countries/data/countries/AT.yaml +3 -3
  28. data/lib/countries/data/countries/BA.yaml +4 -4
  29. data/lib/countries/data/countries/BD.yaml +2 -2
  30. data/lib/countries/data/countries/BE.yaml +1 -1
  31. data/lib/countries/data/countries/BF.yaml +8 -8
  32. data/lib/countries/data/countries/BG.yaml +4 -4
  33. data/lib/countries/data/countries/BH.yaml +4 -4
  34. data/lib/countries/data/countries/BI.yaml +6 -6
  35. data/lib/countries/data/countries/BJ.yaml +2 -2
  36. data/lib/countries/data/countries/BR.yaml +4 -4
  37. data/lib/countries/data/countries/BT.yaml +6 -6
  38. data/lib/countries/data/countries/BV.yaml +10 -10
  39. data/lib/countries/data/countries/BW.yaml +4 -4
  40. data/lib/countries/data/countries/CC.yaml +2 -2
  41. data/lib/countries/data/countries/CF.yaml +2 -2
  42. data/lib/countries/data/countries/CG.yaml +2 -2
  43. data/lib/countries/data/countries/CH.yaml +3 -3
  44. data/lib/countries/data/countries/CI.yaml +2 -2
  45. data/lib/countries/data/countries/CL.yaml +2 -2
  46. data/lib/countries/data/countries/CN.yaml +4 -4
  47. data/lib/countries/data/countries/CO.yaml +4 -4
  48. data/lib/countries/data/countries/CR.yaml +2 -2
  49. data/lib/countries/data/countries/CV.yaml +2 -2
  50. data/lib/countries/data/countries/CY.yaml +2 -2
  51. data/lib/countries/data/countries/CZ.yaml +2 -2
  52. data/lib/countries/data/countries/DE.yaml +2 -2
  53. data/lib/countries/data/countries/DJ.yaml +6 -6
  54. data/lib/countries/data/countries/DK.yaml +2 -2
  55. data/lib/countries/data/countries/DZ.yaml +6 -6
  56. data/lib/countries/data/countries/EC.yaml +4 -4
  57. data/lib/countries/data/countries/EE.yaml +3 -3
  58. data/lib/countries/data/countries/ES.yaml +1 -1
  59. data/lib/countries/data/countries/FI.yaml +5 -5
  60. data/lib/countries/data/countries/FK.yaml +2 -2
  61. data/lib/countries/data/countries/FM.yaml +2 -2
  62. data/lib/countries/data/countries/FO.yaml +5 -5
  63. data/lib/countries/data/countries/FR.yaml +3 -3
  64. data/lib/countries/data/countries/GE.yaml +4 -4
  65. data/lib/countries/data/countries/GG.yaml +10 -10
  66. data/lib/countries/data/countries/GH.yaml +4 -4
  67. data/lib/countries/data/countries/GI.yaml +2 -2
  68. data/lib/countries/data/countries/GL.yaml +6 -6
  69. data/lib/countries/data/countries/GM.yaml +4 -4
  70. data/lib/countries/data/countries/GN.yaml +2 -2
  71. data/lib/countries/data/countries/GR.yaml +2 -2
  72. data/lib/countries/data/countries/GS.yaml +2 -2
  73. data/lib/countries/data/countries/GT.yaml +2 -2
  74. data/lib/countries/data/countries/HK.yaml +4 -4
  75. data/lib/countries/data/countries/HN.yaml +2 -2
  76. data/lib/countries/data/countries/HR.yaml +3 -3
  77. data/lib/countries/data/countries/HU.yaml +7 -7
  78. data/lib/countries/data/countries/IE.yaml +10 -10
  79. data/lib/countries/data/countries/IM.yaml +8 -8
  80. data/lib/countries/data/countries/IN.yaml +2 -2
  81. data/lib/countries/data/countries/IO.yaml +2 -2
  82. data/lib/countries/data/countries/IQ.yaml +2 -2
  83. data/lib/countries/data/countries/IS.yaml +4 -4
  84. data/lib/countries/data/countries/IT.yaml +1 -1
  85. data/lib/countries/data/countries/JO.yaml +2 -2
  86. data/lib/countries/data/countries/KE.yaml +2 -2
  87. data/lib/countries/data/countries/KG.yaml +2 -2
  88. data/lib/countries/data/countries/KI.yaml +6 -6
  89. data/lib/countries/data/countries/KP.yaml +3 -2
  90. data/lib/countries/data/countries/KZ.yaml +2 -2
  91. data/lib/countries/data/countries/LA.yaml +6 -6
  92. data/lib/countries/data/countries/LT.yaml +6 -6
  93. data/lib/countries/data/countries/LV.yaml +4 -4
  94. data/lib/countries/data/countries/MA.yaml +4 -4
  95. data/lib/countries/data/countries/MD.yaml +8 -8
  96. data/lib/countries/data/countries/ME.yaml +2 -2
  97. data/lib/countries/data/countries/MH.yaml +2 -2
  98. data/lib/countries/data/countries/MK.yaml +2 -2
  99. data/lib/countries/data/countries/ML.yaml +4 -4
  100. data/lib/countries/data/countries/MN.yaml +8 -8
  101. data/lib/countries/data/countries/MR.yaml +2 -2
  102. data/lib/countries/data/countries/MT.yaml +2 -2
  103. data/lib/countries/data/countries/MV.yaml +2 -2
  104. data/lib/countries/data/countries/MW.yaml +2 -2
  105. data/lib/countries/data/countries/MX.yaml +2 -2
  106. data/lib/countries/data/countries/MY.yaml +2 -2
  107. data/lib/countries/data/countries/NA.yaml +4 -4
  108. data/lib/countries/data/countries/NE.yaml +4 -4
  109. data/lib/countries/data/countries/NI.yaml +2 -2
  110. data/lib/countries/data/countries/NL.yaml +2 -2
  111. data/lib/countries/data/countries/NO.yaml +4 -4
  112. data/lib/countries/data/countries/NP.yaml +6 -6
  113. data/lib/countries/data/countries/OM.yaml +2 -2
  114. data/lib/countries/data/countries/PA.yaml +2 -2
  115. data/lib/countries/data/countries/PE.yaml +4 -4
  116. data/lib/countries/data/countries/PF.yaml +4 -4
  117. data/lib/countries/data/countries/PH.yaml +2 -2
  118. data/lib/countries/data/countries/PK.yaml +4 -4
  119. data/lib/countries/data/countries/PL.yaml +4 -4
  120. data/lib/countries/data/countries/PR.yaml +8 -8
  121. data/lib/countries/data/countries/PT.yaml +5 -5
  122. data/lib/countries/data/countries/PY.yaml +2 -2
  123. data/lib/countries/data/countries/QA.yaml +2 -2
  124. data/lib/countries/data/countries/RO.yaml +6 -6
  125. data/lib/countries/data/countries/RU.yaml +2 -2
  126. data/lib/countries/data/countries/RW.yaml +2 -2
  127. data/lib/countries/data/countries/SA.yaml +2 -2
  128. data/lib/countries/data/countries/SC.yaml +2 -2
  129. data/lib/countries/data/countries/SD.yaml +2 -2
  130. data/lib/countries/data/countries/SE.yaml +4 -4
  131. data/lib/countries/data/countries/SH.yaml +4 -4
  132. data/lib/countries/data/countries/SI.yaml +4 -4
  133. data/lib/countries/data/countries/SJ.yaml +5 -5
  134. data/lib/countries/data/countries/SK.yaml +6 -6
  135. data/lib/countries/data/countries/SL.yaml +2 -2
  136. data/lib/countries/data/countries/SN.yaml +4 -4
  137. data/lib/countries/data/countries/TF.yaml +5 -5
  138. data/lib/countries/data/countries/TG.yaml +6 -6
  139. data/lib/countries/data/countries/TV.yaml +2 -2
  140. data/lib/countries/data/countries/TZ.yaml +2 -2
  141. data/lib/countries/data/countries/UA.yaml +5 -5
  142. data/lib/countries/data/countries/UG.yaml +4 -4
  143. data/lib/countries/data/countries/UY.yaml +2 -2
  144. data/lib/countries/data/countries/VC.yaml +2 -2
  145. data/lib/countries/data/countries/VE.yaml +2 -2
  146. data/lib/countries/data/countries/VN.yaml +4 -4
  147. data/lib/countries/data/countries/WS.yaml +2 -2
  148. data/lib/countries/data/countries/ZA.yaml +2 -2
  149. data/lib/countries/data/countries/ZM.yaml +4 -4
  150. data/lib/countries/data/countries/ZW.yaml +4 -4
  151. data/lib/countries/data/subdivisions/AD.yaml +35 -28
  152. data/lib/countries/data/subdivisions/AE.yaml +142 -63
  153. data/lib/countries/data/subdivisions/AF.yaml +569 -298
  154. data/lib/countries/data/subdivisions/AG.yaml +141 -68
  155. data/lib/countries/data/subdivisions/AI.yaml +139 -125
  156. data/lib/countries/data/subdivisions/AL.yaml +472 -156
  157. data/lib/countries/data/subdivisions/AM.yaml +235 -99
  158. data/lib/countries/data/subdivisions/AO.yaml +344 -162
  159. data/lib/countries/data/subdivisions/AR.yaml +447 -210
  160. data/lib/countries/data/subdivisions/AS.yaml +64 -45
  161. data/lib/countries/data/subdivisions/AT.yaml +200 -81
  162. data/lib/countries/data/subdivisions/AU.yaml +211 -72
  163. data/lib/countries/data/subdivisions/AW.yaml +9 -0
  164. data/lib/countries/data/subdivisions/AX.yaml +38 -27
  165. data/lib/countries/data/subdivisions/AZ.yaml +1547 -666
  166. data/lib/countries/data/subdivisions/BA.yaml +198 -28
  167. data/lib/countries/data/subdivisions/BB.yaml +187 -99
  168. data/lib/countries/data/subdivisions/BD.yaml +1246 -585
  169. data/lib/countries/data/subdivisions/BE.yaml +276 -100
  170. data/lib/countries/data/subdivisions/BF.yaml +987 -418
  171. data/lib/countries/data/subdivisions/BG.yaml +599 -246
  172. data/lib/countries/data/subdivisions/BH.yaml +73 -40
  173. data/lib/countries/data/subdivisions/BI.yaml +299 -141
  174. data/lib/countries/data/subdivisions/BJ.yaml +214 -108
  175. data/lib/countries/data/subdivisions/BL.yaml +11 -0
  176. data/lib/countries/data/subdivisions/BM.yaml +110 -99
  177. data/lib/countries/data/subdivisions/BN.yaml +63 -36
  178. data/lib/countries/data/subdivisions/BO.yaml +157 -81
  179. data/lib/countries/data/subdivisions/BQ.yaml +61 -26
  180. data/lib/countries/data/subdivisions/BR.yaml +663 -243
  181. data/lib/countries/data/subdivisions/BS.yaml +637 -151
  182. data/lib/countries/data/subdivisions/BT.yaml +346 -180
  183. data/lib/countries/data/subdivisions/BW.yaml +291 -87
  184. data/lib/countries/data/subdivisions/BY.yaml +140 -59
  185. data/lib/countries/data/subdivisions/BZ.yaml +97 -54
  186. data/lib/countries/data/subdivisions/CA.yaml +356 -118
  187. data/lib/countries/data/subdivisions/CD.yaml +453 -97
  188. data/lib/countries/data/subdivisions/CF.yaml +289 -153
  189. data/lib/countries/data/subdivisions/CG.yaml +214 -98
  190. data/lib/countries/data/subdivisions/CH.yaml +593 -234
  191. data/lib/countries/data/subdivisions/CI.yaml +443 -90
  192. data/lib/countries/data/subdivisions/CK.yaml +110 -99
  193. data/lib/countries/data/subdivisions/CL.yaml +262 -148
  194. data/lib/countries/data/subdivisions/CM.yaml +186 -90
  195. data/lib/countries/data/subdivisions/CO.yaml +610 -297
  196. data/lib/countries/data/subdivisions/CP.yaml +4 -0
  197. data/lib/countries/data/subdivisions/CR.yaml +119 -63
  198. data/lib/countries/data/subdivisions/CU.yaml +269 -144
  199. data/lib/countries/data/subdivisions/CV.yaml +416 -151
  200. data/lib/countries/data/subdivisions/CW.yaml +9 -0
  201. data/lib/countries/data/subdivisions/CY.yaml +102 -54
  202. data/lib/countries/data/subdivisions/CZ.yaml +2543 -197
  203. data/lib/countries/data/subdivisions/DE.yaml +450 -144
  204. data/lib/countries/data/subdivisions/DJ.yaml +108 -54
  205. data/lib/countries/data/subdivisions/DK.yaml +194 -109
  206. data/lib/countries/data/subdivisions/DM.yaml +159 -90
  207. data/lib/countries/data/subdivisions/DO.yaml +671 -289
  208. data/lib/countries/data/subdivisions/DZ.yaml +812 -435
  209. data/lib/countries/data/subdivisions/EC.yaml +390 -215
  210. data/lib/countries/data/subdivisions/EE.yaml +273 -135
  211. data/lib/countries/data/subdivisions/EG.yaml +472 -243
  212. data/lib/countries/data/subdivisions/EH.yaml +24 -16
  213. data/lib/countries/data/subdivisions/ER.yaml +109 -54
  214. data/lib/countries/data/subdivisions/ES.yaml +1804 -620
  215. data/lib/countries/data/subdivisions/ET.yaml +204 -99
  216. data/lib/countries/data/subdivisions/FI.yaml +408 -43
  217. data/lib/countries/data/subdivisions/FJ.yaml +312 -58
  218. data/lib/countries/data/subdivisions/FM.yaml +64 -36
  219. data/lib/countries/data/subdivisions/FO.yaml +60 -54
  220. data/lib/countries/data/subdivisions/FR.yaml +2790 -982
  221. data/lib/countries/data/subdivisions/GA.yaml +159 -81
  222. data/lib/countries/data/subdivisions/GB.yaml +4958 -1973
  223. data/lib/countries/data/subdivisions/GD.yaml +114 -63
  224. data/lib/countries/data/subdivisions/GE.yaml +236 -108
  225. data/lib/countries/data/subdivisions/GF.yaml +11 -0
  226. data/lib/countries/data/subdivisions/GG.yaml +110 -99
  227. data/lib/countries/data/subdivisions/GH.yaml +254 -88
  228. data/lib/countries/data/subdivisions/GL.yaml +87 -4
  229. data/lib/countries/data/subdivisions/GM.yaml +122 -54
  230. data/lib/countries/data/subdivisions/GN.yaml +706 -312
  231. data/lib/countries/data/subdivisions/GP.yaml +11 -0
  232. data/lib/countries/data/subdivisions/GQ.yaml +141 -81
  233. data/lib/countries/data/subdivisions/GR.yaml +642 -226
  234. data/lib/countries/data/subdivisions/GT.yaml +351 -198
  235. data/lib/countries/data/subdivisions/GU.yaml +198 -171
  236. data/lib/countries/data/subdivisions/GW.yaml +189 -79
  237. data/lib/countries/data/subdivisions/GY.yaml +163 -90
  238. data/lib/countries/data/subdivisions/HK.yaml +194 -162
  239. data/lib/countries/data/subdivisions/HN.yaml +275 -162
  240. data/lib/countries/data/subdivisions/HR.yaml +428 -189
  241. data/lib/countries/data/subdivisions/HT.yaml +178 -81
  242. data/lib/countries/data/subdivisions/HU.yaml +792 -381
  243. data/lib/countries/data/subdivisions/IC.yaml +4 -0
  244. data/lib/countries/data/subdivisions/ID.yaml +2303 -1868
  245. data/lib/countries/data/subdivisions/IE.yaml +665 -304
  246. data/lib/countries/data/subdivisions/IL.yaml +114 -54
  247. data/lib/countries/data/subdivisions/IM.yaml +240 -216
  248. data/lib/countries/data/subdivisions/IN.yaml +972 -337
  249. data/lib/countries/data/subdivisions/IQ.yaml +316 -157
  250. data/lib/countries/data/subdivisions/IR.yaml +591 -268
  251. data/lib/countries/data/subdivisions/IS.yaml +158 -76
  252. data/lib/countries/data/subdivisions/IT.yaml +2686 -1009
  253. data/lib/countries/data/subdivisions/JE.yaml +120 -108
  254. data/lib/countries/data/subdivisions/JM.yaml +243 -126
  255. data/lib/countries/data/subdivisions/JO.yaml +182 -97
  256. data/lib/countries/data/subdivisions/JP.yaml +950 -425
  257. data/lib/countries/data/subdivisions/KE.yaml +800 -79
  258. data/lib/countries/data/subdivisions/KG.yaml +186 -72
  259. data/lib/countries/data/subdivisions/KH.yaml +436 -216
  260. data/lib/countries/data/subdivisions/KI.yaml +57 -27
  261. data/lib/countries/data/subdivisions/KM.yaml +49 -27
  262. data/lib/countries/data/subdivisions/KN.yaml +307 -127
  263. data/lib/countries/data/subdivisions/KP.yaml +361 -67
  264. data/lib/countries/data/subdivisions/KR.yaml +376 -134
  265. data/lib/countries/data/subdivisions/KW.yaml +88 -54
  266. data/lib/countries/data/subdivisions/KY.yaml +36 -24
  267. data/lib/countries/data/subdivisions/KZ.yaml +360 -151
  268. data/lib/countries/data/subdivisions/LA.yaml +296 -157
  269. data/lib/countries/data/subdivisions/LB.yaml +130 -49
  270. data/lib/countries/data/subdivisions/LC.yaml +167 -10
  271. data/lib/countries/data/subdivisions/LI.yaml +154 -68
  272. data/lib/countries/data/subdivisions/LK.yaml +556 -233
  273. data/lib/countries/data/subdivisions/LR.yaml +253 -126
  274. data/lib/countries/data/subdivisions/LS.yaml +149 -90
  275. data/lib/countries/data/subdivisions/LT.yaml +1090 -149
  276. data/lib/countries/data/subdivisions/LU.yaml +198 -27
  277. data/lib/countries/data/subdivisions/LV.yaml +2332 -277
  278. data/lib/countries/data/subdivisions/LY.yaml +341 -184
  279. data/lib/countries/data/subdivisions/MA.yaml +1487 -562
  280. data/lib/countries/data/subdivisions/MC.yaml +265 -17
  281. data/lib/countries/data/subdivisions/MD.yaml +633 -127
  282. data/lib/countries/data/subdivisions/ME.yaml +429 -190
  283. data/lib/countries/data/subdivisions/MF.yaml +9 -0
  284. data/lib/countries/data/subdivisions/MG.yaml +93 -54
  285. data/lib/countries/data/subdivisions/MH.yaml +429 -213
  286. data/lib/countries/data/subdivisions/MK.yaml +3083 -425
  287. data/lib/countries/data/subdivisions/ML.yaml +185 -80
  288. data/lib/countries/data/subdivisions/MM.yaml +274 -126
  289. data/lib/countries/data/subdivisions/MN.yaml +420 -198
  290. data/lib/countries/data/subdivisions/MO.yaml +9 -0
  291. data/lib/countries/data/subdivisions/MP.yaml +54 -36
  292. data/lib/countries/data/subdivisions/MQ.yaml +11 -0
  293. data/lib/countries/data/subdivisions/MR.yaml +249 -115
  294. data/lib/countries/data/subdivisions/MS.yaml +30 -27
  295. data/lib/countries/data/subdivisions/MT.yaml +1059 -612
  296. data/lib/countries/data/subdivisions/MU.yaml +314 -147
  297. data/lib/countries/data/subdivisions/MV.yaml +466 -192
  298. data/lib/countries/data/subdivisions/MW.yaml +536 -246
  299. data/lib/countries/data/subdivisions/MX.yaml +707 -288
  300. data/lib/countries/data/subdivisions/MY.yaml +334 -144
  301. data/lib/countries/data/subdivisions/MZ.yaml +188 -93
  302. data/lib/countries/data/subdivisions/NA.yaml +221 -120
  303. data/lib/countries/data/subdivisions/NC.yaml +44 -27
  304. data/lib/countries/data/subdivisions/NE.yaml +161 -72
  305. data/lib/countries/data/subdivisions/NG.yaml +833 -333
  306. data/lib/countries/data/subdivisions/NI.yaml +260 -153
  307. data/lib/countries/data/subdivisions/NL.yaml +382 -113
  308. data/lib/countries/data/subdivisions/NO.yaml +596 -102
  309. data/lib/countries/data/subdivisions/NP.yaml +389 -130
  310. data/lib/countries/data/subdivisions/NR.yaml +260 -126
  311. data/lib/countries/data/subdivisions/NZ.yaml +322 -151
  312. data/lib/countries/data/subdivisions/OM.yaml +205 -66
  313. data/lib/countries/data/subdivisions/PA.yaml +204 -113
  314. data/lib/countries/data/subdivisions/PE.yaml +418 -234
  315. data/lib/countries/data/subdivisions/PF.yaml +60 -45
  316. data/lib/countries/data/subdivisions/PG.yaml +383 -177
  317. data/lib/countries/data/subdivisions/PH.yaml +1867 -767
  318. data/lib/countries/data/subdivisions/PK.yaml +185 -63
  319. data/lib/countries/data/subdivisions/PL.yaml +1161 -143
  320. data/lib/countries/data/subdivisions/PM.yaml +30 -18
  321. data/lib/countries/data/subdivisions/PR.yaml +1107 -0
  322. data/lib/countries/data/subdivisions/PS.yaml +265 -16
  323. data/lib/countries/data/subdivisions/PT.yaml +341 -180
  324. data/lib/countries/data/subdivisions/PW.yaml +265 -144
  325. data/lib/countries/data/subdivisions/PY.yaml +321 -162
  326. data/lib/countries/data/subdivisions/QA.yaml +165 -71
  327. data/lib/countries/data/subdivisions/RE.yaml +11 -0
  328. data/lib/countries/data/subdivisions/RO.yaml +731 -381
  329. data/lib/countries/data/subdivisions/RS.yaml +582 -261
  330. data/lib/countries/data/subdivisions/RU.yaml +1873 -750
  331. data/lib/countries/data/subdivisions/RW.yaml +100 -45
  332. data/lib/countries/data/subdivisions/SA.yaml +234 -117
  333. data/lib/countries/data/subdivisions/SB.yaml +169 -90
  334. data/lib/countries/data/subdivisions/SC.yaml +457 -208
  335. data/lib/countries/data/subdivisions/SD.yaml +142 -18
  336. data/lib/countries/data/subdivisions/SE.yaml +435 -258
  337. data/lib/countries/data/subdivisions/SG.yaml +117 -25
  338. data/lib/countries/data/subdivisions/SH.yaml +68 -18
  339. data/lib/countries/data/subdivisions/SI.yaml +3605 -1760
  340. data/lib/countries/data/subdivisions/SJ.yaml +20 -18
  341. data/lib/countries/data/subdivisions/SK.yaml +129 -72
  342. data/lib/countries/data/subdivisions/SL.yaml +80 -35
  343. data/lib/countries/data/subdivisions/SM.yaml +158 -81
  344. data/lib/countries/data/subdivisions/SN.yaml +232 -101
  345. data/lib/countries/data/subdivisions/SO.yaml +313 -161
  346. data/lib/countries/data/subdivisions/SR.yaml +158 -90
  347. data/lib/countries/data/subdivisions/SS.yaml +196 -10
  348. data/lib/countries/data/subdivisions/ST.yaml +30 -18
  349. data/lib/countries/data/subdivisions/SV.yaml +233 -126
  350. data/lib/countries/data/subdivisions/SX.yaml +9 -0
  351. data/lib/countries/data/subdivisions/SY.yaml +219 -124
  352. data/lib/countries/data/subdivisions/SZ.yaml +64 -35
  353. data/lib/countries/data/subdivisions/TA.yaml +4 -0
  354. data/lib/countries/data/subdivisions/TD.yaml +408 -161
  355. data/lib/countries/data/subdivisions/TF.yaml +34 -16
  356. data/lib/countries/data/subdivisions/TG.yaml +75 -45
  357. data/lib/countries/data/subdivisions/TH.yaml +1449 -694
  358. data/lib/countries/data/subdivisions/TJ.yaml +98 -28
  359. data/lib/countries/data/subdivisions/TK.yaml +30 -27
  360. data/lib/countries/data/subdivisions/TL.yaml +209 -117
  361. data/lib/countries/data/subdivisions/TM.yaml +116 -45
  362. data/lib/countries/data/subdivisions/TN.yaml +412 -216
  363. data/lib/countries/data/subdivisions/TO.yaml +76 -45
  364. data/lib/countries/data/subdivisions/TR.yaml +1818 -730
  365. data/lib/countries/data/subdivisions/TT.yaml +296 -131
  366. data/lib/countries/data/subdivisions/TV.yaml +130 -64
  367. data/lib/countries/data/subdivisions/TW.yaml +481 -187
  368. data/lib/countries/data/subdivisions/TZ.yaml +635 -237
  369. data/lib/countries/data/subdivisions/UA.yaml +504 -243
  370. data/lib/countries/data/subdivisions/UG.yaml +2237 -752
  371. data/lib/countries/data/subdivisions/UM.yaml +216 -80
  372. data/lib/countries/data/subdivisions/US.yaml +1570 -495
  373. data/lib/countries/data/subdivisions/UY.yaml +364 -170
  374. data/lib/countries/data/subdivisions/UZ.yaml +288 -127
  375. data/lib/countries/data/subdivisions/VC.yaml +96 -53
  376. data/lib/countries/data/subdivisions/VE.yaml +456 -225
  377. data/lib/countries/data/subdivisions/VI.yaml +44 -27
  378. data/lib/countries/data/subdivisions/VN.yaml +3583 -2980
  379. data/lib/countries/data/subdivisions/VU.yaml +98 -54
  380. data/lib/countries/data/subdivisions/WF.yaml +73 -3
  381. data/lib/countries/data/subdivisions/WS.yaml +200 -99
  382. data/lib/countries/data/subdivisions/YE.yaml +376 -173
  383. data/lib/countries/data/subdivisions/YT.yaml +178 -153
  384. data/lib/countries/data/subdivisions/ZA.yaml +230 -81
  385. data/lib/countries/data/subdivisions/ZM.yaml +156 -81
  386. data/lib/countries/data/subdivisions/ZW.yaml +153 -83
  387. data/lib/countries/data/translation_corrections.yaml +4 -1
  388. data/lib/countries/sources/cldr/downloader.rb +12 -13
  389. data/lib/countries/tasks/geocoding.rake +9 -16
  390. data/lib/countries/version.rb +1 -1
  391. data/spec/country_spec.rb +37 -0
  392. data/spec/data_spec.rb +4 -4
  393. data/spec/thread_safety_spec.rb +46 -0
  394. metadata +33 -25
  395. data/.travis.yml +0 -15
@@ -1,6 +1,6 @@
1
1
  # Contains fixes for upstream pkg-iso-codes
2
2
  # Any change here should have an upstream bug report
3
- # https://alioth.debian.org/projects/pkg-iso-codes/
3
+ # https://salsa.debian.org/iso-codes-team/iso-codes
4
4
  #
5
5
  # These changes are applied during `rake update_cache`
6
6
  #
@@ -34,5 +34,8 @@ he:
34
34
  VI: "איי הבתולה (ארה)"
35
35
  sv:
36
36
  GB: "Storbritannien"
37
+ RU: "Ryssland"
37
38
  pt:
38
39
  CZ: 'República Checa'
40
+ da:
41
+ CZ: 'Tjekkiet'
@@ -2,6 +2,8 @@ require 'uri'
2
2
  require 'net/http'
3
3
  require 'nokogiri'
4
4
  require 'fileutils'
5
+ require 'json'
6
+
5
7
  module Sources
6
8
  module CLDR
7
9
  module Downloader
@@ -14,22 +16,19 @@ module Sources
14
16
  def download_folder(type)
15
17
  folder = File.join(ISO3166_ROOT_PATH, 'tmp', 'cldr', 'trunk', 'common', type)
16
18
  FileUtils.mkdir_p(folder)
17
- doc = Nokogiri::HTML get(type + '/')
18
- doc.css('a[href]').map { |e| e.attributes['href'].value }.each do |href|
19
- next if href == '../'
20
- File.write(File.join(folder, href), get([type, href].join('/')))
19
+ url = URI.parse("https://api.github.com/repos/unicode-org/cldr/contents/common/" + type)
20
+ path_listing = JSON.parse(Net::HTTP.get_response(url).body)
21
+ path_listing.each do |path|
22
+ if path['name'] =~ /\.xml$/
23
+ File.open(File.join(folder, path['name']), 'w') do |f|
24
+ raw_url = URI.parse(path['download_url'])
25
+ f.write(Net::HTTP.get_response(raw_url).body)
26
+ end
27
+ end
21
28
  end
22
29
  end
23
30
 
24
- def get(path)
25
- url = URI("http://www.unicode.org/repos/cldr/trunk/common/#{path}")
26
-
27
- http = Net::HTTP.new(url.host, url.port)
28
-
29
- request = Net::HTTP::Get.new(url)
30
- response = http.request(request)
31
- response.read_body
32
- end
33
31
  end
34
32
  end
35
33
  end
34
+
@@ -2,7 +2,9 @@ require 'geocoder'
2
2
  require 'retryable'
3
3
 
4
4
  Geocoder.configure(
5
- timeout: 10
5
+ lookup: :google,
6
+ timeout: 10,
7
+ api_key: GOOGLE_API_KEY
6
8
  )
7
9
 
8
10
  # raise on geocoding errors such as query limit exceeded
@@ -10,9 +12,9 @@ Geocoder.configure(always_raise: :all)
10
12
  # Try to geocode a given query, on exceptions it retries up to 3 times then gives up.
11
13
  # @param [String] query string to geocode
12
14
  # @return [Hash] first valid result or nil
13
- def geocode(query)
15
+ def geocode(query, params)
14
16
  Retryable.retryable(tries: 3, sleep: ->(n) { 2**n }) do
15
- Geocoder.search(query).first
17
+ Geocoder.search(query, params: params).first
16
18
  end
17
19
  rescue => e
18
20
  warn "Attempts exceeded for query #{query}, last error was #{e.message}"
@@ -41,12 +43,8 @@ namespace :geocode do
41
43
  # Load unmutated yaml file.
42
44
  data = load_country_yaml(country.alpha2)
43
45
 
44
- lookup = "#{country.alpha2} country"
45
- # LU country lookup appears to match to Los Angeles
46
- lookup = country.name if country.alpha2 == 'LU'
47
-
48
- next unless (result = geocode(lookup))
49
- puts 'WARNING:: Geocoder returned something that was not a country' unless result.types.include?('country')
46
+ next unless (result = geocode(country.name, {region: country.alpha2}))
47
+ puts "WARNING:: Geocoder returned something that was not a country for #{country.alpha2}" unless result.types.include?('country')
50
48
  geometry = result.geometry
51
49
 
52
50
  # Extract center point data
@@ -76,15 +74,10 @@ namespace :geocode do
76
74
  # Iterate subdivisions
77
75
  state_data = c.subdivisions.dup
78
76
  state_data.reject { |_, data| data['geo'] }.each do |code, data|
79
- location = "#{data['name']}, #{c.name}"
77
+ location = "#{c.alpha2}-#{code}"
80
78
 
81
- # Handle special geocoding cases where Google defaults to well known
82
- # cities, instead of the states.
83
- if c.alpha2 == 'US' && %w(NY WA OK).include?(code)
84
- location = "#{data['name']} State, United States"
85
- end
79
+ next unless (result = geocode(location, {region: c.alpha2}))
86
80
 
87
- next unless (result = geocode(location))
88
81
  geometry = result.geometry
89
82
  if geometry['location']
90
83
  state_data[code]['geo'] ||= {}
@@ -1,3 +1,3 @@
1
1
  module Countries
2
- VERSION = '3.1.0'.freeze
2
+ VERSION = '4.0.0'.freeze
3
3
  end
data/spec/country_spec.rb CHANGED
@@ -345,6 +345,26 @@ describe ISO3166::Country do
345
345
  expect(countries.first).to eq('Aruba')
346
346
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
347
347
  end
348
+
349
+ context 'with custom countries' do
350
+ before do
351
+ ISO3166::Data.register(
352
+ alpha2: 'XX',
353
+ name: 'Custom Country',
354
+ translations: { 'en' => 'Custom Country' }
355
+ )
356
+ end
357
+
358
+ it 'should include custom registered countries' do
359
+ custom_country = ISO3166::Country.find_by_alpha2('XX')[1]
360
+ countries = ISO3166::Country.all_translated
361
+ expect(countries).to include(custom_country['name'])
362
+ end
363
+
364
+ after do
365
+ ISO3166::Data.unregister('XX')
366
+ end
367
+ end
348
368
  end
349
369
 
350
370
  describe 'all_names_with_codes' do
@@ -838,6 +858,23 @@ describe ISO3166::Country do
838
858
  end
839
859
  end
840
860
 
861
+ describe 'in_esm?' do
862
+ let(:netherlands) { ISO3166::Country.search('NL') }
863
+ let(:switzerland) { ISO3166::Country.search('CH') }
864
+
865
+ it 'should return false for countries without esm_member or eea_member flag' do
866
+ expect(country.in_esm?).to be_falsey
867
+ end
868
+
869
+ it 'should return true for countries with eea_member flag set to true' do
870
+ expect(netherlands.in_esm?).to be_truthy
871
+ end
872
+
873
+ it 'should return true for countries with esm_member flag set to true' do
874
+ expect(switzerland.in_esm?).to be_truthy
875
+ end
876
+ end
877
+
841
878
  describe 'gec' do
842
879
  it 'should return the country\'s GEC code' do
843
880
  expect(ISO3166::Country.new('NA').gec).to eql 'WA'
data/spec/data_spec.rb CHANGED
@@ -116,8 +116,8 @@ describe ISO3166::Data do
116
116
  expect(subject.name).to eq 'NEW Taiwan'
117
117
  expect(subject.translations).to eq('en' => 'NEW Taiwan',
118
118
  'de' => 'NEW Taiwan')
119
- expect(subject.subdivisions).to eq(CHA: ISO3166::Subdivision.new({name: 'New Changhua'}),
120
- CYI: ISO3166::Subdivision.new({name: 'New Municipality'}))
119
+ expect(subject.subdivisions).to eq('CHA' => ISO3166::Subdivision.new({name: 'New Changhua'}),
120
+ 'CYI' => ISO3166::Subdivision.new({name: 'New Municipality'}))
121
121
  end
122
122
  end
123
123
 
@@ -143,8 +143,8 @@ describe ISO3166::Data do
143
143
  data = ISO3166::Data.new('LOL').call
144
144
  expect(data['name']).to eq 'Happy Country'
145
145
  expect(subject.name).to eq 'Happy Country'
146
- expect(subject.subdivisions).to eq(LOL1: ISO3166::Subdivision.new({name: 'Happy sub1'}),
147
- LOL2: ISO3166::Subdivision.new({name: 'Happy sub2'}))
146
+ expect(subject.subdivisions).to eq('LOL1' => ISO3166::Subdivision.new({name: 'Happy sub1'}),
147
+ 'LOL2' => ISO3166::Subdivision.new({name: 'Happy sub2'}))
148
148
  end
149
149
 
150
150
  it 'detect a stale cache' do
@@ -0,0 +1,46 @@
1
+ describe 'Accessing ISO3166::Country instances data in multiple threads' do
2
+ before do
3
+ if Thread.respond_to?(:report_on_exception)
4
+ @report_on_exception_value = Thread.report_on_exception
5
+ Thread.report_on_exception = false
6
+ end
7
+
8
+ ISO3166::Data.reset
9
+ end
10
+
11
+ def create_countries_threaded
12
+ nthreads = 100
13
+ threads = []
14
+
15
+ alpha2_codes = ['us', 'es', 'nl', 'ca', 'de', 'fr', 'mx', 'ru', 'ch', 'jp']
16
+
17
+ nthreads.times do
18
+ threads << Thread.new do
19
+ alpha2_codes.each do |a2|
20
+ country = ISO3166::Country[a2]
21
+ # This will fail if data['translations'] has been
22
+ # left nil due to a race condition
23
+ country.translation
24
+ end
25
+ end
26
+ end
27
+ threads.map(&:join)
28
+ end
29
+
30
+ it "doesn't raise any exceptions when using a mutex" do
31
+ expect { create_countries_threaded }.to_not raise_error
32
+ end
33
+
34
+ it "raises NoMethodError when not using a mutex" do
35
+ allow(ISO3166::Data).to receive(:use_mutex?).and_return(false)
36
+
37
+ expect { create_countries_threaded }.to raise_error(NoMethodError)
38
+ end
39
+
40
+ after do
41
+ if Thread.respond_to?(:report_on_exception)
42
+ Thread.report_on_exception = @report_on_exception_value
43
+ end
44
+ end
45
+ end
46
+
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: countries
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Robinson
8
8
  - Joe Corcoran
9
9
  - Russell Osborne
10
- autorequire:
10
+ - Pedro Moreira
11
+ autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2021-03-24 00:00:00.000000000 Z
14
+ date: 2021-06-11 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: i18n_data
@@ -18,28 +19,14 @@ dependencies:
18
19
  requirements:
19
20
  - - "~>"
20
21
  - !ruby/object:Gem::Version
21
- version: 0.11.0
22
+ version: 0.13.0
22
23
  type: :runtime
23
24
  prerelease: false
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
26
  requirements:
26
27
  - - "~>"
27
28
  - !ruby/object:Gem::Version
28
- version: 0.11.0
29
- - !ruby/object:Gem::Dependency
30
- name: unicode_utils
31
- requirement: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - "~>"
34
- - !ruby/object:Gem::Version
35
- version: '1.4'
36
- type: :runtime
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - "~>"
41
- - !ruby/object:Gem::Version
42
- version: '1.4'
29
+ version: 0.13.0
43
30
  - !ruby/object:Gem::Dependency
44
31
  name: sixarm_ruby_unaccent
45
32
  requirement: !ruby/object:Gem::Requirement
@@ -101,15 +88,16 @@ description: All sorts of useful information about every country packaged as pre
101
88
  email:
102
89
  - hexorx@gmail.com
103
90
  - russell@burningpony.com
91
+ - pedro@codecreations.tech
104
92
  executables: []
105
93
  extensions: []
106
94
  extra_rdoc_files: []
107
95
  files:
96
+ - ".github/workflows/tests.yml"
108
97
  - ".gitignore"
109
98
  - ".rspec"
110
99
  - ".rubocop.yml"
111
100
  - ".rubocop_todo.yml"
112
- - ".travis.yml"
113
101
  - CHANGELOG.md
114
102
  - Gemfile
115
103
  - LICENSE
@@ -518,6 +506,7 @@ files:
518
506
  - lib/countries/data/subdivisions/AS.yaml
519
507
  - lib/countries/data/subdivisions/AT.yaml
520
508
  - lib/countries/data/subdivisions/AU.yaml
509
+ - lib/countries/data/subdivisions/AW.yaml
521
510
  - lib/countries/data/subdivisions/AX.yaml
522
511
  - lib/countries/data/subdivisions/AZ.yaml
523
512
  - lib/countries/data/subdivisions/BA.yaml
@@ -529,6 +518,7 @@ files:
529
518
  - lib/countries/data/subdivisions/BH.yaml
530
519
  - lib/countries/data/subdivisions/BI.yaml
531
520
  - lib/countries/data/subdivisions/BJ.yaml
521
+ - lib/countries/data/subdivisions/BL.yaml
532
522
  - lib/countries/data/subdivisions/BM.yaml
533
523
  - lib/countries/data/subdivisions/BN.yaml
534
524
  - lib/countries/data/subdivisions/BO.yaml
@@ -550,9 +540,11 @@ files:
550
540
  - lib/countries/data/subdivisions/CM.yaml
551
541
  - lib/countries/data/subdivisions/CN.yaml
552
542
  - lib/countries/data/subdivisions/CO.yaml
543
+ - lib/countries/data/subdivisions/CP.yaml
553
544
  - lib/countries/data/subdivisions/CR.yaml
554
545
  - lib/countries/data/subdivisions/CU.yaml
555
546
  - lib/countries/data/subdivisions/CV.yaml
547
+ - lib/countries/data/subdivisions/CW.yaml
556
548
  - lib/countries/data/subdivisions/CY.yaml
557
549
  - lib/countries/data/subdivisions/CZ.yaml
558
550
  - lib/countries/data/subdivisions/DE.yaml
@@ -577,11 +569,13 @@ files:
577
569
  - lib/countries/data/subdivisions/GB.yaml
578
570
  - lib/countries/data/subdivisions/GD.yaml
579
571
  - lib/countries/data/subdivisions/GE.yaml
572
+ - lib/countries/data/subdivisions/GF.yaml
580
573
  - lib/countries/data/subdivisions/GG.yaml
581
574
  - lib/countries/data/subdivisions/GH.yaml
582
575
  - lib/countries/data/subdivisions/GL.yaml
583
576
  - lib/countries/data/subdivisions/GM.yaml
584
577
  - lib/countries/data/subdivisions/GN.yaml
578
+ - lib/countries/data/subdivisions/GP.yaml
585
579
  - lib/countries/data/subdivisions/GQ.yaml
586
580
  - lib/countries/data/subdivisions/GR.yaml
587
581
  - lib/countries/data/subdivisions/GT.yaml
@@ -593,6 +587,7 @@ files:
593
587
  - lib/countries/data/subdivisions/HR.yaml
594
588
  - lib/countries/data/subdivisions/HT.yaml
595
589
  - lib/countries/data/subdivisions/HU.yaml
590
+ - lib/countries/data/subdivisions/IC.yaml
596
591
  - lib/countries/data/subdivisions/ID.yaml
597
592
  - lib/countries/data/subdivisions/IE.yaml
598
593
  - lib/countries/data/subdivisions/IL.yaml
@@ -632,13 +627,16 @@ files:
632
627
  - lib/countries/data/subdivisions/MC.yaml
633
628
  - lib/countries/data/subdivisions/MD.yaml
634
629
  - lib/countries/data/subdivisions/ME.yaml
630
+ - lib/countries/data/subdivisions/MF.yaml
635
631
  - lib/countries/data/subdivisions/MG.yaml
636
632
  - lib/countries/data/subdivisions/MH.yaml
637
633
  - lib/countries/data/subdivisions/MK.yaml
638
634
  - lib/countries/data/subdivisions/ML.yaml
639
635
  - lib/countries/data/subdivisions/MM.yaml
640
636
  - lib/countries/data/subdivisions/MN.yaml
637
+ - lib/countries/data/subdivisions/MO.yaml
641
638
  - lib/countries/data/subdivisions/MP.yaml
639
+ - lib/countries/data/subdivisions/MQ.yaml
642
640
  - lib/countries/data/subdivisions/MR.yaml
643
641
  - lib/countries/data/subdivisions/MS.yaml
644
642
  - lib/countries/data/subdivisions/MT.yaml
@@ -667,11 +665,13 @@ files:
667
665
  - lib/countries/data/subdivisions/PK.yaml
668
666
  - lib/countries/data/subdivisions/PL.yaml
669
667
  - lib/countries/data/subdivisions/PM.yaml
668
+ - lib/countries/data/subdivisions/PR.yaml
670
669
  - lib/countries/data/subdivisions/PS.yaml
671
670
  - lib/countries/data/subdivisions/PT.yaml
672
671
  - lib/countries/data/subdivisions/PW.yaml
673
672
  - lib/countries/data/subdivisions/PY.yaml
674
673
  - lib/countries/data/subdivisions/QA.yaml
674
+ - lib/countries/data/subdivisions/RE.yaml
675
675
  - lib/countries/data/subdivisions/RO.yaml
676
676
  - lib/countries/data/subdivisions/RS.yaml
677
677
  - lib/countries/data/subdivisions/RU.yaml
@@ -694,8 +694,10 @@ files:
694
694
  - lib/countries/data/subdivisions/SS.yaml
695
695
  - lib/countries/data/subdivisions/ST.yaml
696
696
  - lib/countries/data/subdivisions/SV.yaml
697
+ - lib/countries/data/subdivisions/SX.yaml
697
698
  - lib/countries/data/subdivisions/SY.yaml
698
699
  - lib/countries/data/subdivisions/SZ.yaml
700
+ - lib/countries/data/subdivisions/TA.yaml
699
701
  - lib/countries/data/subdivisions/TD.yaml
700
702
  - lib/countries/data/subdivisions/TF.yaml
701
703
  - lib/countries/data/subdivisions/TG.yaml
@@ -756,12 +758,17 @@ files:
756
758
  - spec/perf_spec.rb
757
759
  - spec/spec_helper.rb
758
760
  - spec/subdivision_spec.rb
761
+ - spec/thread_safety_spec.rb
759
762
  - spec/timezone_spec.rb
760
- homepage: http://github.com/hexorx/countries
763
+ homepage: http://github.com/countries/countries
761
764
  licenses:
762
765
  - MIT
763
- metadata: {}
764
- post_install_message:
766
+ metadata:
767
+ bug_tracker_uri: http://github.com/countries/countries/issues
768
+ changelog_uri: https://github.com/countries/countries/blob/master/CHANGELOG.md
769
+ source_code_uri: https://github.com/countries/countries
770
+ wiki_uri: https://github.com/countries/countries/wiki
771
+ post_install_message:
765
772
  rdoc_options: []
766
773
  require_paths:
767
774
  - lib
@@ -776,8 +783,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
776
783
  - !ruby/object:Gem::Version
777
784
  version: '0'
778
785
  requirements: []
779
- rubygems_version: 3.1.4
780
- signing_key:
786
+ rubygems_version: 3.1.6
787
+ signing_key:
781
788
  specification_version: 4
782
789
  summary: Gives you a country object full of all sorts of useful information.
783
790
  test_files:
@@ -789,4 +796,5 @@ test_files:
789
796
  - spec/perf_spec.rb
790
797
  - spec/spec_helper.rb
791
798
  - spec/subdivision_spec.rb
799
+ - spec/thread_safety_spec.rb
792
800
  - spec/timezone_spec.rb
data/.travis.yml DELETED
@@ -1,15 +0,0 @@
1
- cache: bundler
2
- language: ruby
3
- rvm:
4
- - 1.9.3
5
- - 2.3.6
6
- - 2.4.3
7
- - 2.5.0
8
- - ruby-head
9
- before_install:
10
- - gem update --system
11
- - gem install bundler
12
- matrix:
13
- allow_failures:
14
- - rvm: ruby-head
15
- - rvm: 1.9.3