countries 3.1.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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