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
@@ -5,7 +5,7 @@ module ISO3166
5
5
  @@cache_dir = [File.dirname(__FILE__), 'cache']
6
6
  @@cache = {}
7
7
  @@registered_data = {}
8
- @@semaphore = Mutex.new
8
+ @@mutex = Mutex.new
9
9
 
10
10
  def initialize(alpha2)
11
11
  @alpha2 = alpha2.to_s.upcase
@@ -26,10 +26,9 @@ module ISO3166
26
26
 
27
27
  def register(data)
28
28
  alpha2 = data[:alpha2].upcase
29
- @@registered_data[alpha2] = \
30
- data.each_with_object({}) { |(k, v), a| a[k.to_s] = v }
29
+ @@registered_data[alpha2] = deep_stringify_keys(data)
31
30
  @@registered_data[alpha2]['translations'] = \
32
- Translations.new.merge(data[:translations] || {})
31
+ Translations.new.merge(data['translations'] || {})
33
32
  @@cache = cache.merge(@@registered_data)
34
33
  end
35
34
 
@@ -40,9 +39,7 @@ module ISO3166
40
39
  end
41
40
 
42
41
  def cache
43
- @@semaphore.synchronize do
44
- update_cache
45
- end
42
+ update_cache
46
43
  end
47
44
 
48
45
  def reset
@@ -64,10 +61,12 @@ module ISO3166
64
61
 
65
62
  def load_data!
66
63
  return @@cache unless load_required?
67
- @@cache = load_cache %w(countries.json)
68
- @@_country_codes = @@cache.keys
69
- @@cache = @@cache.merge(@@registered_data)
70
- @@cache
64
+ synchronized do
65
+ @@cache = load_cache %w(countries.json)
66
+ @@_country_codes = @@cache.keys
67
+ @@cache = @@cache.merge(@@registered_data)
68
+ @@cache
69
+ end
71
70
  end
72
71
 
73
72
  def sync_translations!
@@ -84,8 +83,23 @@ module ISO3166
84
83
 
85
84
  private
86
85
 
86
+ def synchronized(&block)
87
+ if use_mutex?
88
+ @@mutex.synchronize(&block)
89
+ else
90
+ block.call
91
+ end
92
+ end
93
+
94
+ def use_mutex?
95
+ # Stubbed in testing
96
+ true
97
+ end
98
+
87
99
  def load_required?
88
- @@cache.empty?
100
+ synchronized do
101
+ @@cache.empty?
102
+ end
89
103
  end
90
104
 
91
105
  def loaded_codes
@@ -118,21 +132,25 @@ module ISO3166
118
132
  end
119
133
 
120
134
  def load_translations(locale)
121
- locale_names = load_cache(['locales', "#{locale}.json"])
122
- internal_codes.each do |alpha2|
123
- @@cache[alpha2]['translations'] ||= Translations.new
124
- @@cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
125
- @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
135
+ synchronized do
136
+ locale_names = load_cache(['locales', "#{locale}.json"])
137
+ internal_codes.each do |alpha2|
138
+ @@cache[alpha2]['translations'] ||= Translations.new
139
+ @@cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
140
+ @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
141
+ end
142
+ ISO3166.configuration.loaded_locales << locale
126
143
  end
127
- ISO3166.configuration.loaded_locales << locale
128
144
  end
129
145
 
130
146
  def unload_translations(locale)
131
- internal_codes.each do |alpha2|
132
- @@cache[alpha2]['translations'].delete(locale)
133
- @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
147
+ synchronized do
148
+ internal_codes.each do |alpha2|
149
+ @@cache[alpha2]['translations'].delete(locale)
150
+ @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
151
+ end
152
+ ISO3166.configuration.loaded_locales.delete(locale)
134
153
  end
135
- ISO3166.configuration.loaded_locales.delete(locale)
136
154
  end
137
155
 
138
156
  def load_cache(file_array)
@@ -143,6 +161,14 @@ module ISO3166
143
161
  def datafile_path(file_array)
144
162
  File.join([@@cache_dir] + file_array)
145
163
  end
164
+
165
+ def deep_stringify_keys(data)
166
+ data.transform_keys!(&:to_s)
167
+ data.transform_values! do |v|
168
+ v.is_a?(Hash) ? deep_stringify_keys(v) : v
169
+ end
170
+ return data
171
+ end
146
172
  end
147
173
  end
148
174
  end
@@ -38,13 +38,13 @@ AL:
38
38
  latitude_dec: '41.11113357543945'
39
39
  longitude: 20.168331
40
40
  longitude_dec: '20.02745246887207'
41
- max_latitude: 42.6610819
41
+ max_latitude: 42.6611669
42
42
  max_longitude: 21.0572394
43
43
  min_latitude: 39.6447296
44
44
  min_longitude: 19.1217
45
45
  bounds:
46
46
  northeast:
47
- lat: 42.6610819
47
+ lat: 42.6611669
48
48
  lng: 21.0572394
49
49
  southwest:
50
50
  lat: 39.6447296
@@ -39,13 +39,13 @@ AM:
39
39
  longitude: 45.038189
40
40
  longitude_dec: '44.93947219848633'
41
41
  max_latitude: 41.300993
42
- max_longitude: 46.634222
42
+ max_longitude: 46.6342219
43
43
  min_latitude: 38.840244
44
44
  min_longitude: 43.4472601
45
45
  bounds:
46
46
  northeast:
47
47
  lat: 41.300993
48
- lng: 46.634222
48
+ lng: 46.6342219
49
49
  southwest:
50
50
  lat: 38.840244
51
51
  lng: 43.4472601
@@ -28,20 +28,20 @@ AO:
28
28
  languages_spoken:
29
29
  - pt
30
30
  geo:
31
- latitude: 47.516231
31
+ latitude: -11.202692
32
32
  latitude_dec: "-12.333555221557617"
33
- longitude: 14.550072
33
+ longitude: 17.873887
34
34
  longitude_dec: '17.539464950561523'
35
- max_latitude: 49.0206081
36
- max_longitude: 17.1606861
37
- min_latitude: 46.37233579999999
38
- min_longitude: 9.530783399999999
35
+ max_latitude: -4.388063300000001
36
+ max_longitude: 24.0878855
37
+ min_latitude: -18.0391039
38
+ min_longitude: 11.4696999
39
39
  bounds:
40
40
  northeast:
41
- lat: 49.0206081
42
- lng: 17.1606861
41
+ lat: -4.388063300000001
42
+ lng: 24.0878855
43
43
  southwest:
44
- lat: 46.37233579999999
45
- lng: 9.530783399999999
44
+ lat: -18.0391039
45
+ lng: 11.4696999
46
46
  currency_code: AOA
47
47
  start_of_week: monday
@@ -27,9 +27,9 @@ AQ:
27
27
  languages_official: []
28
28
  languages_spoken: []
29
29
  geo:
30
- latitude: -75.250973
30
+ latitude: -82.862752
31
31
  latitude_dec: "-82.862752"
32
- longitude: -0.071389
32
+ longitude: 135
33
33
  longitude_dec: "-135.0"
34
34
  max_latitude: -60.1086999
35
35
  max_longitude: 180
@@ -36,9 +36,9 @@ AS:
36
36
  - en
37
37
  - sm
38
38
  geo:
39
- latitude: -14.3060204
39
+ latitude: -14.270972
40
40
  latitude_dec: "-14.31956672668457"
41
- longitude: -170.6961815
41
+ longitude: -170.132217
42
42
  longitude_dec: "-170.7403564453125"
43
43
  max_latitude: -13.4056506
44
44
  max_longitude: -169.2059326
@@ -38,7 +38,7 @@ AT:
38
38
  standard: 20
39
39
  reduced:
40
40
  - 10
41
- super_reduced:
41
+ super_reduced:
42
42
  parking: 12
43
43
  postal_code: true
44
44
  postal_code_format: "\\d{4}"
@@ -58,13 +58,13 @@ AT:
58
58
  longitude: 14.550072
59
59
  longitude_dec: '14.14021110534668'
60
60
  max_latitude: 49.0206081
61
- max_longitude: 17.1606861
61
+ max_longitude: 17.1607329
62
62
  min_latitude: 46.37233579999999
63
63
  min_longitude: 9.530783399999999
64
64
  bounds:
65
65
  northeast:
66
66
  lat: 49.0206081
67
- lng: 17.1606861
67
+ lng: 17.1607329
68
68
  southwest:
69
69
  lat: 46.37233579999999
70
70
  lng: 9.530783399999999
@@ -48,15 +48,15 @@ BA:
48
48
  longitude: 17.679076
49
49
  longitude_dec: '17.790241241455078'
50
50
  max_latitude: 45.2766262
51
- max_longitude: 19.621935
52
- min_latitude: 42.5564516
51
+ max_longitude: 19.6237016
52
+ min_latitude: 42.5564808
53
53
  min_longitude: 15.7223665
54
54
  bounds:
55
55
  northeast:
56
56
  lat: 45.2766262
57
- lng: 19.621935
57
+ lng: 19.6237016
58
58
  southwest:
59
- lat: 42.5564516
59
+ lat: 42.5564808
60
60
  lng: 15.7223665
61
61
  currency_code: BAM
62
62
  start_of_week: monday
@@ -36,14 +36,14 @@ BD:
36
36
  longitude_dec: '90.30652618408203'
37
37
  max_latitude: 26.633914
38
38
  max_longitude: 92.6801153
39
- min_latitude: 20.6173999
39
+ min_latitude: 20.3794
40
40
  min_longitude: 88.00861410000002
41
41
  bounds:
42
42
  northeast:
43
43
  lat: 26.633914
44
44
  lng: 92.6801153
45
45
  southwest:
46
- lat: 20.6173999
46
+ lat: 20.3794
47
47
  lng: 88.00861410000002
48
48
  currency_code: BDT
49
49
  start_of_week: sunday
@@ -32,7 +32,7 @@ BE:
32
32
  reduced:
33
33
  - 6
34
34
  - 12
35
- super_reduced:
35
+ super_reduced:
36
36
  parking: 12
37
37
  postal_code: true
38
38
  postal_code_format: "\\d{4}"
@@ -34,16 +34,16 @@ BF:
34
34
  latitude_dec: '12.284985542297363'
35
35
  longitude: -1.561593
36
36
  longitude_dec: "-1.745560646057129"
37
- max_latitude: 15.0840032
38
- max_longitude: 2.4043598
39
- min_latitude: 9.4104719
40
- min_longitude: -5.5157196
37
+ max_latitude: 15.0840397
38
+ max_longitude: 2.4043596
39
+ min_latitude: 9.4104717
40
+ min_longitude: -5.5132416
41
41
  bounds:
42
42
  northeast:
43
- lat: 15.0840032
44
- lng: 2.4043598
43
+ lat: 15.0840397
44
+ lng: 2.4043596
45
45
  southwest:
46
- lat: 9.4104719
47
- lng: -5.5157196
46
+ lat: 9.4104717
47
+ lng: -5.5132416
48
48
  currency_code: XOF
49
49
  start_of_week: monday
@@ -32,8 +32,8 @@ BG:
32
32
  standard: 20
33
33
  reduced:
34
34
  - 9
35
- super_reduced:
36
- parking:
35
+ super_reduced:
36
+ parking:
37
37
  postal_code: true
38
38
  postal_code_format: "\\d{4}"
39
39
  unofficial_names:
@@ -51,13 +51,13 @@ BG:
51
51
  latitude_dec: '42.7661018371582'
52
52
  longitude: 25.48583
53
53
  longitude_dec: '25.283733367919922'
54
- max_latitude: 44.2152333
54
+ max_latitude: 44.2153059
55
55
  max_longitude: 28.7292001
56
56
  min_latitude: 41.2354469
57
57
  min_longitude: 22.3573446
58
58
  bounds:
59
59
  northeast:
60
- lat: 44.2152333
60
+ lat: 44.2153059
61
61
  lng: 28.7292001
62
62
  southwest:
63
63
  lat: 41.2354469
@@ -41,16 +41,16 @@ BH:
41
41
  latitude_dec: '26.094240188598633'
42
42
  longitude: 50.5577
43
43
  longitude_dec: '50.54299545288086'
44
- max_latitude: 26.3315761
44
+ max_latitude: 26.3469001
45
45
  max_longitude: 50.8509064
46
46
  min_latitude: 25.5349999
47
- min_longitude: 50.3448485
47
+ min_longitude: 50.324246
48
48
  bounds:
49
49
  northeast:
50
- lat: 26.3315761
50
+ lat: 26.3469001
51
51
  lng: 50.8509064
52
52
  southwest:
53
53
  lat: 25.5349999
54
- lng: 50.3448485
54
+ lng: 50.324246
55
55
  currency_code: BHD
56
56
  start_of_week: monday
@@ -34,16 +34,16 @@ BI:
34
34
  latitude_dec: "-3.365208148956299"
35
35
  longitude: 29.918886
36
36
  longitude_dec: '29.88650894165039'
37
- max_latitude: -2.3097302
38
- max_longitude: 30.8495447
37
+ max_latitude: -2.3097301
38
+ max_longitude: 30.84954
39
39
  min_latitude: -4.4693288
40
- min_longitude: 29.000993
40
+ min_longitude: 29.000968
41
41
  bounds:
42
42
  northeast:
43
- lat: -2.3097302
44
- lng: 30.8495447
43
+ lat: -2.3097301
44
+ lng: 30.84954
45
45
  southwest:
46
46
  lat: -4.4693288
47
- lng: 29.000993
47
+ lng: 29.000968
48
48
  currency_code: BIF
49
49
  start_of_week: monday
@@ -36,13 +36,13 @@ BJ:
36
36
  max_latitude: 12.4086111
37
37
  max_longitude: 3.8433429
38
38
  min_latitude: 6.2061001
39
- min_longitude: 0.7765055
39
+ min_longitude: 0.7754124000000001
40
40
  bounds:
41
41
  northeast:
42
42
  lat: 12.4086111
43
43
  lng: 3.8433429
44
44
  southwest:
45
45
  lat: 6.2061001
46
- lng: 0.7765055
46
+ lng: 0.7754124000000001
47
47
  currency_code: XOF
48
48
  start_of_week: monday
@@ -51,15 +51,15 @@ BR:
51
51
  longitude: -51.92528
52
52
  longitude_dec: "-52.97311782836914"
53
53
  max_latitude: 5.2717863
54
- max_longitude: -29.3434
54
+ max_longitude: -28.650543
55
55
  min_latitude: -34.0891
56
- min_longitude: -73.982817
56
+ min_longitude: -73.9828169
57
57
  bounds:
58
58
  northeast:
59
59
  lat: 5.2717863
60
- lng: -29.3434
60
+ lng: -28.650543
61
61
  southwest:
62
62
  lat: -34.0891
63
- lng: -73.982817
63
+ lng: -73.9828169
64
64
  currency_code: BRL
65
65
  start_of_week: monday
@@ -36,16 +36,16 @@ BT:
36
36
  latitude_dec: '27.416879653930664'
37
37
  longitude: 90.433601
38
38
  longitude_dec: '90.43476104736328'
39
- max_latitude: 28.360825
40
- max_longitude: 92.12523209999999
39
+ max_latitude: 28.246987
40
+ max_longitude: 92.125232
41
41
  min_latitude: 26.702016
42
- min_longitude: 88.74647350000001
42
+ min_longitude: 88.7464739
43
43
  bounds:
44
44
  northeast:
45
- lat: 28.360825
46
- lng: 92.12523209999999
45
+ lat: 28.246987
46
+ lng: 92.125232
47
47
  southwest:
48
48
  lat: 26.702016
49
- lng: 88.74647350000001
49
+ lng: 88.7464739
50
50
  currency_code: BTN
51
51
  start_of_week: monday