countries 3.0.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (790) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +70 -0
  3. data/.github/workflows/tests.yml +35 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +40 -1
  6. data/.rubocop_todo.yml +8 -41
  7. data/CHANGELOG.md +315 -1
  8. data/Gemfile +9 -2
  9. data/LICENSE +3 -1
  10. data/README.markdown +141 -123
  11. data/Rakefile +29 -56
  12. data/UPGRADE.md +39 -0
  13. data/bin/console +1 -0
  14. data/countries.gemspec +15 -10
  15. data/lib/countries/cache/countries.json +1 -1
  16. data/lib/countries/cache/locales/ab.json +1 -0
  17. data/lib/countries/cache/locales/af.json +1 -1
  18. data/lib/countries/cache/locales/ak.json +1 -0
  19. data/lib/countries/cache/locales/am.json +1 -1
  20. data/lib/countries/cache/locales/an.json +1 -0
  21. data/lib/countries/cache/locales/ar.json +1 -1
  22. data/lib/countries/cache/locales/as.json +1 -1
  23. data/lib/countries/cache/locales/ay.json +1 -0
  24. data/lib/countries/cache/locales/az.json +1 -1
  25. data/lib/countries/cache/locales/ba.json +1 -0
  26. data/lib/countries/cache/locales/be.json +1 -1
  27. data/lib/countries/cache/locales/bg.json +1 -1
  28. data/lib/countries/cache/locales/bi.json +1 -0
  29. data/lib/countries/cache/locales/bn-in.json +1 -0
  30. data/lib/countries/cache/locales/bn.json +1 -1
  31. data/lib/countries/cache/locales/br.json +1 -1
  32. data/lib/countries/cache/locales/bs.json +1 -1
  33. data/lib/countries/cache/locales/ca.json +1 -1
  34. data/lib/countries/cache/locales/ce.json +1 -0
  35. data/lib/countries/cache/locales/ch.json +1 -0
  36. data/lib/countries/cache/locales/cs.json +1 -1
  37. data/lib/countries/cache/locales/cv.json +1 -0
  38. data/lib/countries/cache/locales/cy.json +1 -1
  39. data/lib/countries/cache/locales/da.json +1 -1
  40. data/lib/countries/cache/locales/de.json +1 -1
  41. data/lib/countries/cache/locales/dv.json +1 -0
  42. data/lib/countries/cache/locales/dz.json +1 -1
  43. data/lib/countries/cache/locales/ee.json +1 -0
  44. data/lib/countries/cache/locales/el.json +1 -1
  45. data/lib/countries/cache/locales/en.json +1 -1
  46. data/lib/countries/cache/locales/eo.json +1 -1
  47. data/lib/countries/cache/locales/es.json +1 -1
  48. data/lib/countries/cache/locales/et.json +1 -1
  49. data/lib/countries/cache/locales/eu.json +1 -1
  50. data/lib/countries/cache/locales/fa.json +1 -1
  51. data/lib/countries/cache/locales/ff.json +1 -0
  52. data/lib/countries/cache/locales/fi.json +1 -1
  53. data/lib/countries/cache/locales/fo.json +1 -1
  54. data/lib/countries/cache/locales/fr.json +1 -1
  55. data/lib/countries/cache/locales/fy.json +1 -0
  56. data/lib/countries/cache/locales/ga.json +1 -1
  57. data/lib/countries/cache/locales/gl.json +1 -1
  58. data/lib/countries/cache/locales/gn.json +1 -0
  59. data/lib/countries/cache/locales/gu.json +1 -1
  60. data/lib/countries/cache/locales/gv.json +1 -0
  61. data/lib/countries/cache/locales/ha.json +1 -0
  62. data/lib/countries/cache/locales/he.json +1 -1
  63. data/lib/countries/cache/locales/hi.json +1 -1
  64. data/lib/countries/cache/locales/hr.json +1 -1
  65. data/lib/countries/cache/locales/ht.json +1 -0
  66. data/lib/countries/cache/locales/hu.json +1 -1
  67. data/lib/countries/cache/locales/hy.json +1 -1
  68. data/lib/countries/cache/locales/ia.json +1 -1
  69. data/lib/countries/cache/locales/id.json +1 -1
  70. data/lib/countries/cache/locales/io.json +1 -0
  71. data/lib/countries/cache/locales/is.json +1 -1
  72. data/lib/countries/cache/locales/it.json +1 -1
  73. data/lib/countries/cache/locales/iu.json +1 -0
  74. data/lib/countries/cache/locales/ja.json +1 -1
  75. data/lib/countries/cache/locales/ka.json +1 -1
  76. data/lib/countries/cache/locales/ki.json +1 -0
  77. data/lib/countries/cache/locales/kk.json +1 -1
  78. data/lib/countries/cache/locales/kl.json +1 -0
  79. data/lib/countries/cache/locales/km.json +1 -1
  80. data/lib/countries/cache/locales/kn.json +1 -1
  81. data/lib/countries/cache/locales/ko.json +1 -1
  82. data/lib/countries/cache/locales/ku.json +1 -1
  83. data/lib/countries/cache/locales/kv.json +1 -0
  84. data/lib/countries/cache/locales/kw.json +1 -0
  85. data/lib/countries/cache/locales/ky.json +1 -0
  86. data/lib/countries/cache/locales/lo.json +1 -0
  87. data/lib/countries/cache/locales/lt.json +1 -1
  88. data/lib/countries/cache/locales/lv.json +1 -1
  89. data/lib/countries/cache/locales/mi.json +1 -1
  90. data/lib/countries/cache/locales/mk.json +1 -1
  91. data/lib/countries/cache/locales/ml.json +1 -1
  92. data/lib/countries/cache/locales/mn.json +1 -1
  93. data/lib/countries/cache/locales/mr.json +1 -1
  94. data/lib/countries/cache/locales/ms.json +1 -1
  95. data/lib/countries/cache/locales/mt.json +1 -1
  96. data/lib/countries/cache/locales/my.json +1 -0
  97. data/lib/countries/cache/locales/na.json +1 -0
  98. data/lib/countries/cache/locales/nb.json +1 -1
  99. data/lib/countries/cache/locales/ne.json +1 -1
  100. data/lib/countries/cache/locales/nl.json +1 -1
  101. data/lib/countries/cache/locales/nn.json +1 -1
  102. data/lib/countries/cache/locales/nv.json +1 -0
  103. data/lib/countries/cache/locales/oc.json +1 -1
  104. data/lib/countries/cache/locales/or.json +1 -1
  105. data/lib/countries/cache/locales/pa.json +1 -1
  106. data/lib/countries/cache/locales/pi.json +1 -0
  107. data/lib/countries/cache/locales/pl.json +1 -1
  108. data/lib/countries/cache/locales/ps.json +1 -1
  109. data/lib/countries/cache/locales/pt-br.json +1 -0
  110. data/lib/countries/cache/locales/pt.json +1 -1
  111. data/lib/countries/cache/locales/ro.json +1 -1
  112. data/lib/countries/cache/locales/ru.json +1 -1
  113. data/lib/countries/cache/locales/rw.json +1 -1
  114. data/lib/countries/cache/locales/sc.json +1 -0
  115. data/lib/countries/cache/locales/sd.json +1 -0
  116. data/lib/countries/cache/locales/si.json +1 -1
  117. data/lib/countries/cache/locales/sk.json +1 -1
  118. data/lib/countries/cache/locales/sl.json +1 -1
  119. data/lib/countries/cache/locales/so.json +1 -1
  120. data/lib/countries/cache/locales/sq.json +1 -1
  121. data/lib/countries/cache/locales/sr.json +1 -1
  122. data/lib/countries/cache/locales/sv.json +1 -1
  123. data/lib/countries/cache/locales/sw.json +1 -1
  124. data/lib/countries/cache/locales/ta.json +1 -1
  125. data/lib/countries/cache/locales/te.json +1 -1
  126. data/lib/countries/cache/locales/tg.json +1 -0
  127. data/lib/countries/cache/locales/th.json +1 -1
  128. data/lib/countries/cache/locales/ti.json +1 -1
  129. data/lib/countries/cache/locales/tk.json +1 -1
  130. data/lib/countries/cache/locales/tl.json +1 -1
  131. data/lib/countries/cache/locales/tr.json +1 -1
  132. data/lib/countries/cache/locales/tt.json +1 -1
  133. data/lib/countries/cache/locales/ug.json +1 -1
  134. data/lib/countries/cache/locales/uk.json +1 -1
  135. data/lib/countries/cache/locales/ur.json +1 -0
  136. data/lib/countries/cache/locales/uz.json +1 -0
  137. data/lib/countries/cache/locales/ve.json +1 -1
  138. data/lib/countries/cache/locales/vi.json +1 -1
  139. data/lib/countries/cache/locales/wa.json +1 -1
  140. data/lib/countries/cache/locales/wo.json +1 -1
  141. data/lib/countries/cache/locales/xh.json +1 -1
  142. data/lib/countries/cache/locales/yo.json +1 -0
  143. data/lib/countries/cache/locales/zh-cn.json +1 -0
  144. data/lib/countries/cache/locales/zh-hk.json +1 -0
  145. data/lib/countries/cache/locales/zh-tw.json +1 -0
  146. data/lib/countries/cache/locales/zu.json +1 -1
  147. data/lib/countries/configuration.rb +15 -0
  148. data/lib/countries/country/class_methods.rb +41 -97
  149. data/lib/countries/country/currency_methods.rb +6 -1
  150. data/lib/countries/country/emoji.rb +5 -3
  151. data/lib/countries/country/finder_methods.rb +81 -0
  152. data/lib/countries/country.rb +145 -11
  153. data/lib/countries/data/countries/AD.yaml +28 -28
  154. data/lib/countries/data/countries/AE.yaml +32 -33
  155. data/lib/countries/data/countries/AF.yaml +32 -32
  156. data/lib/countries/data/countries/AG.yaml +29 -30
  157. data/lib/countries/data/countries/AI.yaml +27 -27
  158. data/lib/countries/data/countries/AL.yaml +29 -29
  159. data/lib/countries/data/countries/AM.yaml +30 -30
  160. data/lib/countries/data/countries/AO.yaml +27 -28
  161. data/lib/countries/data/countries/AQ.yaml +26 -27
  162. data/lib/countries/data/countries/AR.yaml +30 -30
  163. data/lib/countries/data/countries/AS.yaml +31 -31
  164. data/lib/countries/data/countries/AT.yaml +36 -36
  165. data/lib/countries/data/countries/AU.yaml +34 -34
  166. data/lib/countries/data/countries/AW.yaml +25 -26
  167. data/lib/countries/data/countries/AX.yaml +27 -27
  168. data/lib/countries/data/countries/AZ.yaml +30 -30
  169. data/lib/countries/data/countries/BA.yaml +32 -32
  170. data/lib/countries/data/countries/BB.yaml +28 -28
  171. data/lib/countries/data/countries/BD.yaml +28 -28
  172. data/lib/countries/data/countries/BE.yaml +41 -41
  173. data/lib/countries/data/countries/BF.yaml +29 -30
  174. data/lib/countries/data/countries/BG.yaml +36 -36
  175. data/lib/countries/data/countries/BH.yaml +29 -29
  176. data/lib/countries/data/countries/BI.yaml +29 -30
  177. data/lib/countries/data/countries/BJ.yaml +27 -28
  178. data/lib/countries/data/countries/BL.yaml +25 -25
  179. data/lib/countries/data/countries/BM.yaml +29 -29
  180. data/lib/countries/data/countries/BN.yaml +26 -26
  181. data/lib/countries/data/countries/BO.yaml +31 -32
  182. data/lib/countries/data/countries/BQ.yaml +28 -29
  183. data/lib/countries/data/countries/BR.yaml +35 -35
  184. data/lib/countries/data/countries/BS.yaml +26 -28
  185. data/lib/countries/data/countries/BT.yaml +28 -28
  186. data/lib/countries/data/countries/BV.yaml +26 -27
  187. data/lib/countries/data/countries/BW.yaml +29 -30
  188. data/lib/countries/data/countries/BY.yaml +30 -30
  189. data/lib/countries/data/countries/BZ.yaml +28 -29
  190. data/lib/countries/data/countries/CA.yaml +30 -30
  191. data/lib/countries/data/countries/CC.yaml +29 -29
  192. data/lib/countries/data/countries/CD.yaml +35 -36
  193. data/lib/countries/data/countries/CF.yaml +29 -30
  194. data/lib/countries/data/countries/CG.yaml +29 -30
  195. data/lib/countries/data/countries/CH.yaml +40 -40
  196. data/lib/countries/data/countries/CI.yaml +27 -28
  197. data/lib/countries/data/countries/CK.yaml +27 -28
  198. data/lib/countries/data/countries/CL.yaml +33 -28
  199. data/lib/countries/data/countries/CM.yaml +29 -30
  200. data/lib/countries/data/countries/CN.yaml +28 -28
  201. data/lib/countries/data/countries/CO.yaml +28 -28
  202. data/lib/countries/data/countries/CR.yaml +28 -28
  203. data/lib/countries/data/countries/CU.yaml +27 -27
  204. data/lib/countries/data/countries/CV.yaml +28 -28
  205. data/lib/countries/data/countries/CW.yaml +25 -26
  206. data/lib/countries/data/countries/CX.yaml +30 -30
  207. data/lib/countries/data/countries/CY.yaml +41 -41
  208. data/lib/countries/data/countries/CZ.yaml +40 -38
  209. data/lib/countries/data/countries/DE.yaml +36 -36
  210. data/lib/countries/data/countries/DJ.yaml +29 -30
  211. data/lib/countries/data/countries/DK.yaml +35 -35
  212. data/lib/countries/data/countries/DM.yaml +26 -27
  213. data/lib/countries/data/countries/DO.yaml +28 -28
  214. data/lib/countries/data/countries/DZ.yaml +28 -28
  215. data/lib/countries/data/countries/EC.yaml +28 -28
  216. data/lib/countries/data/countries/EE.yaml +36 -36
  217. data/lib/countries/data/countries/EG.yaml +28 -28
  218. data/lib/countries/data/countries/EH.yaml +30 -30
  219. data/lib/countries/data/countries/ER.yaml +31 -32
  220. data/lib/countries/data/countries/ES.yaml +36 -36
  221. data/lib/countries/data/countries/ET.yaml +28 -28
  222. data/lib/countries/data/countries/FI.yaml +39 -39
  223. data/lib/countries/data/countries/FJ.yaml +33 -34
  224. data/lib/countries/data/countries/FK.yaml +29 -29
  225. data/lib/countries/data/countries/FM.yaml +28 -28
  226. data/lib/countries/data/countries/FO.yaml +28 -28
  227. data/lib/countries/data/countries/FR.yaml +37 -37
  228. data/lib/countries/data/countries/GA.yaml +27 -28
  229. data/lib/countries/data/countries/GB.yaml +44 -36
  230. data/lib/countries/data/countries/GD.yaml +26 -27
  231. data/lib/countries/data/countries/GE.yaml +28 -28
  232. data/lib/countries/data/countries/GF.yaml +29 -29
  233. data/lib/countries/data/countries/GG.yaml +31 -31
  234. data/lib/countries/data/countries/GH.yaml +27 -28
  235. data/lib/countries/data/countries/GI.yaml +28 -28
  236. data/lib/countries/data/countries/GL.yaml +29 -29
  237. data/lib/countries/data/countries/GM.yaml +28 -29
  238. data/lib/countries/data/countries/GN.yaml +30 -30
  239. data/lib/countries/data/countries/GP.yaml +27 -27
  240. data/lib/countries/data/countries/GQ.yaml +29 -30
  241. data/lib/countries/data/countries/GR.yaml +37 -37
  242. data/lib/countries/data/countries/GS.yaml +29 -29
  243. data/lib/countries/data/countries/GT.yaml +28 -28
  244. data/lib/countries/data/countries/GU.yaml +31 -31
  245. data/lib/countries/data/countries/GW.yaml +28 -28
  246. data/lib/countries/data/countries/GY.yaml +26 -27
  247. data/lib/countries/data/countries/HK.yaml +29 -30
  248. data/lib/countries/data/countries/HM.yaml +28 -28
  249. data/lib/countries/data/countries/HN.yaml +28 -28
  250. data/lib/countries/data/countries/HR.yaml +37 -37
  251. data/lib/countries/data/countries/HT.yaml +29 -29
  252. data/lib/countries/data/countries/HU.yaml +37 -37
  253. data/lib/countries/data/countries/ID.yaml +28 -28
  254. data/lib/countries/data/countries/IE.yaml +39 -39
  255. data/lib/countries/data/countries/IL.yaml +35 -30
  256. data/lib/countries/data/countries/IM.yaml +31 -31
  257. data/lib/countries/data/countries/IN.yaml +30 -30
  258. data/lib/countries/data/countries/IO.yaml +28 -28
  259. data/lib/countries/data/countries/IQ.yaml +28 -28
  260. data/lib/countries/data/countries/IR.yaml +28 -28
  261. data/lib/countries/data/countries/IS.yaml +35 -35
  262. data/lib/countries/data/countries/IT.yaml +36 -36
  263. data/lib/countries/data/countries/JE.yaml +26 -26
  264. data/lib/countries/data/countries/JM.yaml +28 -29
  265. data/lib/countries/data/countries/JO.yaml +28 -28
  266. data/lib/countries/data/countries/JP.yaml +28 -28
  267. data/lib/countries/data/countries/KE.yaml +30 -30
  268. data/lib/countries/data/countries/KG.yaml +30 -30
  269. data/lib/countries/data/countries/KH.yaml +28 -28
  270. data/lib/countries/data/countries/KI.yaml +27 -28
  271. data/lib/countries/data/countries/KM.yaml +29 -30
  272. data/lib/countries/data/countries/KN.yaml +28 -29
  273. data/lib/countries/data/countries/KP.yaml +28 -28
  274. data/lib/countries/data/countries/KR.yaml +28 -28
  275. data/lib/countries/data/countries/KW.yaml +28 -28
  276. data/lib/countries/data/countries/KY.yaml +29 -29
  277. data/lib/countries/data/countries/KZ.yaml +30 -30
  278. data/lib/countries/data/countries/LA.yaml +28 -28
  279. data/lib/countries/data/countries/LB.yaml +30 -30
  280. data/lib/countries/data/countries/LC.yaml +28 -29
  281. data/lib/countries/data/countries/LI.yaml +27 -27
  282. data/lib/countries/data/countries/LK.yaml +28 -28
  283. data/lib/countries/data/countries/LR.yaml +28 -28
  284. data/lib/countries/data/countries/LS.yaml +28 -28
  285. data/lib/countries/data/countries/LT.yaml +37 -37
  286. data/lib/countries/data/countries/LU.yaml +39 -39
  287. data/lib/countries/data/countries/LV.yaml +42 -36
  288. data/lib/countries/data/countries/LY.yaml +27 -28
  289. data/lib/countries/data/countries/MA.yaml +28 -28
  290. data/lib/countries/data/countries/MC.yaml +28 -28
  291. data/lib/countries/data/countries/MD.yaml +28 -28
  292. data/lib/countries/data/countries/ME.yaml +34 -34
  293. data/lib/countries/data/countries/MF.yaml +29 -29
  294. data/lib/countries/data/countries/MG.yaml +30 -30
  295. data/lib/countries/data/countries/MH.yaml +30 -30
  296. data/lib/countries/data/countries/MK.yaml +30 -28
  297. data/lib/countries/data/countries/ML.yaml +27 -28
  298. data/lib/countries/data/countries/MM.yaml +27 -27
  299. data/lib/countries/data/countries/MN.yaml +28 -28
  300. data/lib/countries/data/countries/MO.yaml +28 -29
  301. data/lib/countries/data/countries/MP.yaml +31 -31
  302. data/lib/countries/data/countries/MQ.yaml +27 -27
  303. data/lib/countries/data/countries/MR.yaml +29 -30
  304. data/lib/countries/data/countries/MS.yaml +26 -27
  305. data/lib/countries/data/countries/MT.yaml +38 -38
  306. data/lib/countries/data/countries/MU.yaml +28 -28
  307. data/lib/countries/data/countries/MV.yaml +28 -28
  308. data/lib/countries/data/countries/MW.yaml +29 -30
  309. data/lib/countries/data/countries/MX.yaml +33 -33
  310. data/lib/countries/data/countries/MY.yaml +30 -30
  311. data/lib/countries/data/countries/MZ.yaml +28 -28
  312. data/lib/countries/data/countries/NA.yaml +30 -30
  313. data/lib/countries/data/countries/NC.yaml +29 -29
  314. data/lib/countries/data/countries/NE.yaml +28 -28
  315. data/lib/countries/data/countries/NF.yaml +29 -29
  316. data/lib/countries/data/countries/NG.yaml +34 -34
  317. data/lib/countries/data/countries/NI.yaml +28 -28
  318. data/lib/countries/data/countries/NL.yaml +38 -36
  319. data/lib/countries/data/countries/NO.yaml +36 -36
  320. data/lib/countries/data/countries/NP.yaml +32 -32
  321. data/lib/countries/data/countries/NR.yaml +27 -28
  322. data/lib/countries/data/countries/NU.yaml +25 -26
  323. data/lib/countries/data/countries/NZ.yaml +35 -35
  324. data/lib/countries/data/countries/OM.yaml +28 -28
  325. data/lib/countries/data/countries/PA.yaml +27 -28
  326. data/lib/countries/data/countries/PE.yaml +28 -28
  327. data/lib/countries/data/countries/PF.yaml +29 -29
  328. data/lib/countries/data/countries/PG.yaml +28 -28
  329. data/lib/countries/data/countries/PH.yaml +35 -35
  330. data/lib/countries/data/countries/PK.yaml +30 -30
  331. data/lib/countries/data/countries/PL.yaml +37 -37
  332. data/lib/countries/data/countries/PM.yaml +29 -29
  333. data/lib/countries/data/countries/PN.yaml +27 -27
  334. data/lib/countries/data/countries/PR.yaml +30 -30
  335. data/lib/countries/data/countries/PS.yaml +31 -32
  336. data/lib/countries/data/countries/PT.yaml +34 -34
  337. data/lib/countries/data/countries/PW.yaml +26 -26
  338. data/lib/countries/data/countries/PY.yaml +30 -30
  339. data/lib/countries/data/countries/QA.yaml +27 -28
  340. data/lib/countries/data/countries/RE.yaml +28 -28
  341. data/lib/countries/data/countries/RO.yaml +37 -37
  342. data/lib/countries/data/countries/RS.yaml +28 -28
  343. data/lib/countries/data/countries/RU.yaml +28 -28
  344. data/lib/countries/data/countries/RW.yaml +31 -32
  345. data/lib/countries/data/countries/SA.yaml +33 -28
  346. data/lib/countries/data/countries/SB.yaml +28 -29
  347. data/lib/countries/data/countries/SC.yaml +29 -30
  348. data/lib/countries/data/countries/SD.yaml +30 -30
  349. data/lib/countries/data/countries/SE.yaml +37 -37
  350. data/lib/countries/data/countries/SG.yaml +32 -32
  351. data/lib/countries/data/countries/SH.yaml +29 -29
  352. data/lib/countries/data/countries/SI.yaml +36 -36
  353. data/lib/countries/data/countries/SJ.yaml +29 -29
  354. data/lib/countries/data/countries/SK.yaml +36 -36
  355. data/lib/countries/data/countries/SL.yaml +27 -28
  356. data/lib/countries/data/countries/SM.yaml +28 -28
  357. data/lib/countries/data/countries/SN.yaml +28 -28
  358. data/lib/countries/data/countries/SO.yaml +30 -30
  359. data/lib/countries/data/countries/SR.yaml +26 -27
  360. data/lib/countries/data/countries/SS.yaml +29 -30
  361. data/lib/countries/data/countries/ST.yaml +27 -28
  362. data/lib/countries/data/countries/SV.yaml +27 -27
  363. data/lib/countries/data/countries/SX.yaml +28 -29
  364. data/lib/countries/data/countries/SY.yaml +27 -28
  365. data/lib/countries/data/countries/SZ.yaml +30 -30
  366. data/lib/countries/data/countries/TC.yaml +30 -30
  367. data/lib/countries/data/countries/TD.yaml +29 -30
  368. data/lib/countries/data/countries/TF.yaml +30 -31
  369. data/lib/countries/data/countries/TG.yaml +27 -28
  370. data/lib/countries/data/countries/TH.yaml +35 -33
  371. data/lib/countries/data/countries/TJ.yaml +30 -30
  372. data/lib/countries/data/countries/TK.yaml +27 -28
  373. data/lib/countries/data/countries/TL.yaml +27 -28
  374. data/lib/countries/data/countries/TM.yaml +30 -30
  375. data/lib/countries/data/countries/TN.yaml +30 -30
  376. data/lib/countries/data/countries/TO.yaml +29 -30
  377. data/lib/countries/data/countries/TR.yaml +28 -28
  378. data/lib/countries/data/countries/TT.yaml +28 -29
  379. data/lib/countries/data/countries/TV.yaml +27 -28
  380. data/lib/countries/data/countries/TW.yaml +31 -29
  381. data/lib/countries/data/countries/TZ.yaml +30 -30
  382. data/lib/countries/data/countries/UA.yaml +34 -34
  383. data/lib/countries/data/countries/UG.yaml +29 -30
  384. data/lib/countries/data/countries/UM.yaml +29 -29
  385. data/lib/countries/data/countries/US.yaml +30 -28
  386. data/lib/countries/data/countries/UY.yaml +28 -28
  387. data/lib/countries/data/countries/UZ.yaml +30 -30
  388. data/lib/countries/data/countries/VA.yaml +31 -31
  389. data/lib/countries/data/countries/VC.yaml +29 -29
  390. data/lib/countries/data/countries/VE.yaml +28 -28
  391. data/lib/countries/data/countries/VG.yaml +30 -30
  392. data/lib/countries/data/countries/VI.yaml +29 -28
  393. data/lib/countries/data/countries/VN.yaml +34 -28
  394. data/lib/countries/data/countries/VU.yaml +31 -32
  395. data/lib/countries/data/countries/WF.yaml +29 -29
  396. data/lib/countries/data/countries/WS.yaml +29 -30
  397. data/lib/countries/data/countries/YE.yaml +27 -28
  398. data/lib/countries/data/countries/YT.yaml +26 -26
  399. data/lib/countries/data/countries/ZA.yaml +40 -40
  400. data/lib/countries/data/countries/ZM.yaml +28 -28
  401. data/lib/countries/data/countries/ZW.yaml +31 -32
  402. data/lib/countries/data/subdivisions/AD.yaml +42 -28
  403. data/lib/countries/data/subdivisions/AE.yaml +161 -63
  404. data/lib/countries/data/subdivisions/AF.yaml +719 -419
  405. data/lib/countries/data/subdivisions/AG.yaml +152 -76
  406. data/lib/countries/data/subdivisions/AL.yaml +264 -468
  407. data/lib/countries/data/subdivisions/AM.yaml +247 -88
  408. data/lib/countries/data/subdivisions/AO.yaml +362 -144
  409. data/lib/countries/data/subdivisions/AR.yaml +474 -187
  410. data/lib/countries/data/subdivisions/AT.yaml +211 -72
  411. data/lib/countries/data/subdivisions/AU.yaml +220 -64
  412. data/lib/countries/data/subdivisions/AZ.yaml +1783 -803
  413. data/lib/countries/data/subdivisions/BA.yaml +120 -95
  414. data/lib/countries/data/subdivisions/BB.yaml +201 -88
  415. data/lib/countries/data/subdivisions/BD.yaml +1288 -543
  416. data/lib/countries/data/subdivisions/BE.yaml +369 -166
  417. data/lib/countries/data/subdivisions/BF.yaml +2976 -2291
  418. data/lib/countries/data/subdivisions/BG.yaml +628 -219
  419. data/lib/countries/data/subdivisions/BH.yaml +70 -46
  420. data/lib/countries/data/subdivisions/BI.yaml +407 -213
  421. data/lib/countries/data/subdivisions/BJ.yaml +238 -96
  422. data/lib/countries/data/subdivisions/BN.yaml +67 -32
  423. data/lib/countries/data/subdivisions/BO.yaml +166 -72
  424. data/lib/countries/data/subdivisions/BQ.yaml +66 -24
  425. data/lib/countries/data/subdivisions/BR.yaml +716 -216
  426. data/lib/countries/data/subdivisions/BS.yaml +961 -566
  427. data/lib/countries/data/subdivisions/BT.yaml +366 -160
  428. data/lib/countries/data/subdivisions/BW.yaml +499 -261
  429. data/lib/countries/data/subdivisions/BY.yaml +205 -126
  430. data/lib/countries/data/subdivisions/BZ.yaml +103 -48
  431. data/lib/countries/data/subdivisions/CA.yaml +371 -105
  432. data/lib/countries/data/subdivisions/CD.yaml +752 -406
  433. data/lib/countries/data/subdivisions/CF.yaml +308 -136
  434. data/lib/countries/data/subdivisions/CG.yaml +231 -90
  435. data/lib/countries/data/subdivisions/CH.yaml +619 -208
  436. data/lib/countries/data/subdivisions/CI.yaml +415 -322
  437. data/lib/countries/data/subdivisions/CL.yaml +336 -153
  438. data/lib/countries/data/subdivisions/CM.yaml +200 -80
  439. data/lib/countries/data/subdivisions/CN.yaml +2290 -1650
  440. data/lib/countries/data/subdivisions/CO.yaml +676 -264
  441. data/lib/countries/data/subdivisions/CR.yaml +126 -56
  442. data/lib/countries/data/subdivisions/CU.yaml +284 -128
  443. data/lib/countries/data/subdivisions/CV.yaml +677 -363
  444. data/lib/countries/data/subdivisions/CY.yaml +108 -48
  445. data/lib/countries/data/subdivisions/CZ.yaml +2064 -1347
  446. data/lib/countries/data/subdivisions/DE.yaml +500 -144
  447. data/lib/countries/data/subdivisions/DJ.yaml +116 -48
  448. data/lib/countries/data/subdivisions/DK.yaml +113 -236
  449. data/lib/countries/data/subdivisions/DM.yaml +169 -80
  450. data/lib/countries/data/subdivisions/DO.yaml +702 -248
  451. data/lib/countries/data/subdivisions/DZ.yaml +857 -384
  452. data/lib/countries/data/subdivisions/EC.yaml +499 -276
  453. data/lib/countries/data/subdivisions/EE.yaml +826 -152
  454. data/lib/countries/data/subdivisions/EG.yaml +499 -216
  455. data/lib/countries/data/subdivisions/ER.yaml +115 -48
  456. data/lib/countries/data/subdivisions/ES.yaml +2773 -1401
  457. data/lib/countries/data/subdivisions/ET.yaml +218 -88
  458. data/lib/countries/data/subdivisions/FI.yaml +294 -123
  459. data/lib/countries/data/subdivisions/FJ.yaml +557 -264
  460. data/lib/countries/data/subdivisions/FM.yaml +67 -32
  461. data/lib/countries/data/subdivisions/FR.yaml +2967 -1258
  462. data/lib/countries/data/subdivisions/GA.yaml +168 -72
  463. data/lib/countries/data/subdivisions/GB.yaml +5311 -2625
  464. data/lib/countries/data/subdivisions/GD.yaml +121 -56
  465. data/lib/countries/data/subdivisions/GE.yaml +250 -96
  466. data/lib/countries/data/subdivisions/GH.yaml +259 -113
  467. data/lib/countries/data/subdivisions/GL.yaml +77 -43
  468. data/lib/countries/data/subdivisions/GM.yaml +130 -48
  469. data/lib/countries/data/subdivisions/GN.yaml +981 -503
  470. data/lib/countries/data/subdivisions/GQ.yaml +155 -72
  471. data/lib/countries/data/subdivisions/GR.yaml +276 -677
  472. data/lib/countries/data/subdivisions/GT.yaml +373 -176
  473. data/lib/countries/data/subdivisions/GW.yaml +211 -79
  474. data/lib/countries/data/subdivisions/GY.yaml +173 -80
  475. data/lib/countries/data/subdivisions/HN.yaml +292 -144
  476. data/lib/countries/data/subdivisions/HR.yaml +450 -168
  477. data/lib/countries/data/subdivisions/HT.yaml +223 -106
  478. data/lib/countries/data/subdivisions/HU.yaml +876 -381
  479. data/lib/countries/data/subdivisions/ID.yaml +2417 -1858
  480. data/lib/countries/data/subdivisions/IE.yaml +886 -429
  481. data/lib/countries/data/subdivisions/IL.yaml +120 -48
  482. data/lib/countries/data/subdivisions/IN.yaml +1092 -535
  483. data/lib/countries/data/subdivisions/IQ.yaml +388 -191
  484. data/lib/countries/data/subdivisions/IR.yaml +1675 -1305
  485. data/lib/countries/data/subdivisions/IS.yaml +580 -67
  486. data/lib/countries/data/subdivisions/IT.yaml +8979 -7307
  487. data/lib/countries/data/subdivisions/JM.yaml +257 -112
  488. data/lib/countries/data/subdivisions/JO.yaml +205 -96
  489. data/lib/countries/data/subdivisions/JP.yaml +997 -376
  490. data/lib/countries/data/subdivisions/KE.yaml +975 -273
  491. data/lib/countries/data/subdivisions/KG.yaml +251 -118
  492. data/lib/countries/data/subdivisions/KH.yaml +464 -194
  493. data/lib/countries/data/subdivisions/KI.yaml +60 -24
  494. data/lib/countries/data/subdivisions/KM.yaml +52 -24
  495. data/lib/countries/data/subdivisions/KN.yaml +324 -112
  496. data/lib/countries/data/subdivisions/KP.yaml +291 -186
  497. data/lib/countries/data/subdivisions/KR.yaml +410 -128
  498. data/lib/countries/data/subdivisions/KW.yaml +93 -48
  499. data/lib/countries/data/subdivisions/KZ.yaml +361 -189
  500. data/lib/countries/data/subdivisions/LA.yaml +306 -149
  501. data/lib/countries/data/subdivisions/LB.yaml +156 -62
  502. data/lib/countries/data/subdivisions/LC.yaml +231 -55
  503. data/lib/countries/data/subdivisions/LI.yaml +197 -88
  504. data/lib/countries/data/subdivisions/LK.yaml +809 -431
  505. data/lib/countries/data/subdivisions/LR.yaml +346 -187
  506. data/lib/countries/data/subdivisions/LS.yaml +159 -80
  507. data/lib/countries/data/subdivisions/LT.yaml +2146 -1114
  508. data/lib/countries/data/subdivisions/LU.yaml +292 -146
  509. data/lib/countries/data/subdivisions/LV.yaml +2447 -5217
  510. data/lib/countries/data/subdivisions/LY.yaml +361 -162
  511. data/lib/countries/data/subdivisions/MA.yaml +1604 -1424
  512. data/lib/countries/data/subdivisions/MC.yaml +396 -129
  513. data/lib/countries/data/subdivisions/MD.yaml +1130 -590
  514. data/lib/countries/data/subdivisions/ME.yaml +465 -186
  515. data/lib/countries/data/subdivisions/MG.yaml +99 -48
  516. data/lib/countries/data/subdivisions/MH.yaml +526 -276
  517. data/lib/countries/data/subdivisions/MK.yaml +3636 -3147
  518. data/lib/countries/data/subdivisions/ML.yaml +197 -70
  519. data/lib/countries/data/subdivisions/MM.yaml +302 -112
  520. data/lib/countries/data/subdivisions/MN.yaml +443 -176
  521. data/lib/countries/data/subdivisions/MR.yaml +253 -111
  522. data/lib/countries/data/subdivisions/MT.yaml +1127 -544
  523. data/lib/countries/data/subdivisions/MU.yaml +241 -293
  524. data/lib/countries/data/subdivisions/MV.yaml +464 -263
  525. data/lib/countries/data/subdivisions/MW.yaml +689 -337
  526. data/lib/countries/data/subdivisions/MX.yaml +733 -260
  527. data/lib/countries/data/subdivisions/MY.yaml +352 -128
  528. data/lib/countries/data/subdivisions/MZ.yaml +202 -83
  529. data/lib/countries/data/subdivisions/NA.yaml +256 -129
  530. data/lib/countries/data/subdivisions/NE.yaml +178 -64
  531. data/lib/countries/data/subdivisions/NG.yaml +907 -296
  532. data/lib/countries/data/subdivisions/NI.yaml +277 -136
  533. data/lib/countries/data/subdivisions/NL.yaml +566 -263
  534. data/lib/countries/data/subdivisions/NO.yaml +653 -1093
  535. data/lib/countries/data/subdivisions/NP.yaml +525 -228
  536. data/lib/countries/data/subdivisions/NR.yaml +274 -112
  537. data/lib/countries/data/subdivisions/NZ.yaml +357 -197
  538. data/lib/countries/data/subdivisions/OM.yaml +345 -246
  539. data/lib/countries/data/subdivisions/PA.yaml +230 -113
  540. data/lib/countries/data/subdivisions/PE.yaml +478 -242
  541. data/lib/countries/data/subdivisions/PG.yaml +468 -237
  542. data/lib/countries/data/subdivisions/PH.yaml +5157 -3894
  543. data/lib/countries/data/subdivisions/PK.yaml +245 -204
  544. data/lib/countries/data/subdivisions/PL.yaml +131 -32
  545. data/lib/countries/data/subdivisions/PS.yaml +273 -0
  546. data/lib/countries/data/subdivisions/PT.yaml +375 -173
  547. data/lib/countries/data/subdivisions/PW.yaml +285 -128
  548. data/lib/countries/data/subdivisions/PY.yaml +339 -144
  549. data/lib/countries/data/subdivisions/QA.yaml +149 -97
  550. data/lib/countries/data/subdivisions/RO.yaml +771 -336
  551. data/lib/countries/data/subdivisions/RS.yaml +642 -261
  552. data/lib/countries/data/subdivisions/RU.yaml +1958 -665
  553. data/lib/countries/data/subdivisions/RW.yaml +107 -40
  554. data/lib/countries/data/subdivisions/SA.yaml +247 -104
  555. data/lib/countries/data/subdivisions/SB.yaml +179 -80
  556. data/lib/countries/data/subdivisions/SC.yaml +493 -184
  557. data/lib/countries/data/subdivisions/SD.yaml +832 -673
  558. data/lib/countries/data/subdivisions/SE.yaml +456 -237
  559. data/lib/countries/data/subdivisions/SG.yaml +81 -54
  560. data/lib/countries/data/subdivisions/SH.yaml +73 -31
  561. data/lib/countries/data/subdivisions/SI.yaml +3823 -1590
  562. data/lib/countries/data/subdivisions/SK.yaml +137 -64
  563. data/lib/countries/data/subdivisions/SL.yaml +85 -31
  564. data/lib/countries/data/subdivisions/SM.yaml +168 -72
  565. data/lib/countries/data/subdivisions/SN.yaml +352 -193
  566. data/lib/countries/data/subdivisions/SO.yaml +329 -144
  567. data/lib/countries/data/subdivisions/SR.yaml +168 -80
  568. data/lib/countries/data/subdivisions/SS.yaml +206 -0
  569. data/lib/countries/data/subdivisions/ST.yaml +51 -26
  570. data/lib/countries/data/subdivisions/SV.yaml +245 -112
  571. data/lib/countries/data/subdivisions/SY.yaml +234 -112
  572. data/lib/countries/data/subdivisions/SZ.yaml +69 -32
  573. data/lib/countries/data/subdivisions/TD.yaml +591 -312
  574. data/lib/countries/data/subdivisions/TG.yaml +80 -40
  575. data/lib/countries/data/subdivisions/TH.yaml +1565 -652
  576. data/lib/countries/data/subdivisions/TJ.yaml +209 -128
  577. data/lib/countries/data/subdivisions/TL.yaml +222 -104
  578. data/lib/countries/data/subdivisions/TM.yaml +122 -40
  579. data/lib/countries/data/subdivisions/TN.yaml +436 -192
  580. data/lib/countries/data/subdivisions/TO.yaml +80 -40
  581. data/lib/countries/data/subdivisions/TR.yaml +1898 -648
  582. data/lib/countries/data/subdivisions/TT.yaml +355 -204
  583. data/lib/countries/data/subdivisions/TV.yaml +162 -94
  584. data/lib/countries/data/subdivisions/TW.yaml +514 -251
  585. data/lib/countries/data/subdivisions/TZ.yaml +692 -208
  586. data/lib/countries/data/subdivisions/UA.yaml +533 -217
  587. data/lib/countries/data/subdivisions/UG.yaml +5416 -3641
  588. data/lib/countries/data/subdivisions/UM.yaml +216 -72
  589. data/lib/countries/data/subdivisions/US.yaml +1692 -483
  590. data/lib/countries/data/subdivisions/UY.yaml +429 -195
  591. data/lib/countries/data/subdivisions/UZ.yaml +303 -113
  592. data/lib/countries/data/subdivisions/VC.yaml +107 -48
  593. data/lib/countries/data/subdivisions/VE.yaml +481 -200
  594. data/lib/countries/data/subdivisions/VN.yaml +1274 -543
  595. data/lib/countries/data/subdivisions/VU.yaml +104 -48
  596. data/lib/countries/data/subdivisions/WF.yaml +66 -0
  597. data/lib/countries/data/subdivisions/WS.yaml +211 -88
  598. data/lib/countries/data/subdivisions/YE.yaml +534 -289
  599. data/lib/countries/data/subdivisions/ZA.yaml +283 -131
  600. data/lib/countries/data/subdivisions/ZM.yaml +167 -72
  601. data/lib/countries/data/subdivisions/ZW.yaml +162 -73
  602. data/lib/countries/data/translations/countries-ab.yaml +254 -0
  603. data/lib/countries/data/translations/countries-af.yaml +254 -0
  604. data/lib/countries/data/translations/countries-ak.yaml +254 -0
  605. data/lib/countries/data/translations/countries-am.yaml +254 -0
  606. data/lib/countries/data/translations/countries-an.yaml +254 -0
  607. data/lib/countries/data/translations/countries-ar.yaml +254 -0
  608. data/lib/countries/data/translations/countries-as.yaml +254 -0
  609. data/lib/countries/data/translations/countries-ay.yaml +254 -0
  610. data/lib/countries/data/translations/countries-az.yaml +254 -0
  611. data/lib/countries/data/translations/countries-ba.yaml +254 -0
  612. data/lib/countries/data/translations/countries-be.yaml +254 -0
  613. data/lib/countries/data/translations/countries-bg.yaml +254 -0
  614. data/lib/countries/data/translations/countries-bi.yaml +254 -0
  615. data/lib/countries/data/translations/countries-bn.yaml +254 -0
  616. data/lib/countries/data/translations/countries-bn_IN.yaml +254 -0
  617. data/lib/countries/data/translations/countries-br.yaml +254 -0
  618. data/lib/countries/data/translations/countries-bs.yaml +254 -0
  619. data/lib/countries/data/translations/countries-ca.yaml +254 -0
  620. data/lib/countries/data/translations/countries-ce.yaml +254 -0
  621. data/lib/countries/data/translations/countries-ch.yaml +254 -0
  622. data/lib/countries/data/translations/countries-cs.yaml +254 -0
  623. data/lib/countries/data/translations/countries-cv.yaml +254 -0
  624. data/lib/countries/data/translations/countries-cy.yaml +254 -0
  625. data/lib/countries/data/translations/countries-da.yaml +254 -0
  626. data/lib/countries/data/translations/countries-de.yaml +254 -0
  627. data/lib/countries/data/translations/countries-dv.yaml +254 -0
  628. data/lib/countries/data/translations/countries-dz.yaml +254 -0
  629. data/lib/countries/data/translations/countries-ee.yaml +254 -0
  630. data/lib/countries/data/translations/countries-el.yaml +254 -0
  631. data/lib/countries/data/translations/countries-en.yaml +254 -0
  632. data/lib/countries/data/translations/countries-eo.yaml +254 -0
  633. data/lib/countries/data/translations/countries-es.yaml +254 -0
  634. data/lib/countries/data/translations/countries-et.yaml +254 -0
  635. data/lib/countries/data/translations/countries-eu.yaml +254 -0
  636. data/lib/countries/data/translations/countries-fa.yaml +254 -0
  637. data/lib/countries/data/translations/countries-ff.yaml +254 -0
  638. data/lib/countries/data/translations/countries-fi.yaml +254 -0
  639. data/lib/countries/data/translations/countries-fo.yaml +254 -0
  640. data/lib/countries/data/translations/countries-fr.yaml +254 -0
  641. data/lib/countries/data/translations/countries-fy.yaml +254 -0
  642. data/lib/countries/data/translations/countries-ga.yaml +254 -0
  643. data/lib/countries/data/translations/countries-gl.yaml +254 -0
  644. data/lib/countries/data/translations/countries-gn.yaml +254 -0
  645. data/lib/countries/data/translations/countries-gu.yaml +254 -0
  646. data/lib/countries/data/translations/countries-gv.yaml +254 -0
  647. data/lib/countries/data/translations/countries-ha.yaml +254 -0
  648. data/lib/countries/data/translations/countries-he.yaml +254 -0
  649. data/lib/countries/data/translations/countries-hi.yaml +254 -0
  650. data/lib/countries/data/translations/countries-hr.yaml +254 -0
  651. data/lib/countries/data/translations/countries-ht.yaml +254 -0
  652. data/lib/countries/data/translations/countries-hu.yaml +254 -0
  653. data/lib/countries/data/translations/countries-hy.yaml +254 -0
  654. data/lib/countries/data/translations/countries-ia.yaml +254 -0
  655. data/lib/countries/data/translations/countries-id.yaml +254 -0
  656. data/lib/countries/data/translations/countries-io.yaml +254 -0
  657. data/lib/countries/data/translations/countries-is.yaml +254 -0
  658. data/lib/countries/data/translations/countries-it.yaml +254 -0
  659. data/lib/countries/data/translations/countries-iu.yaml +254 -0
  660. data/lib/countries/data/translations/countries-ja.yaml +254 -0
  661. data/lib/countries/data/translations/countries-ka.yaml +254 -0
  662. data/lib/countries/data/translations/countries-ki.yaml +254 -0
  663. data/lib/countries/data/translations/countries-kk.yaml +254 -0
  664. data/lib/countries/data/translations/countries-kl.yaml +254 -0
  665. data/lib/countries/data/translations/countries-km.yaml +254 -0
  666. data/lib/countries/data/translations/countries-kn.yaml +254 -0
  667. data/lib/countries/data/translations/countries-ko.yaml +254 -0
  668. data/lib/countries/data/translations/countries-ku.yaml +254 -0
  669. data/lib/countries/data/translations/countries-kv.yaml +254 -0
  670. data/lib/countries/data/translations/countries-kw.yaml +254 -0
  671. data/lib/countries/data/translations/countries-ky.yaml +254 -0
  672. data/lib/countries/data/translations/countries-lo.yaml +254 -0
  673. data/lib/countries/data/translations/countries-lt.yaml +254 -0
  674. data/lib/countries/data/translations/countries-lv.yaml +254 -0
  675. data/lib/countries/data/translations/countries-mi.yaml +254 -0
  676. data/lib/countries/data/translations/countries-mk.yaml +254 -0
  677. data/lib/countries/data/translations/countries-ml.yaml +254 -0
  678. data/lib/countries/data/translations/countries-mn.yaml +254 -0
  679. data/lib/countries/data/translations/countries-mr.yaml +254 -0
  680. data/lib/countries/data/translations/countries-ms.yaml +254 -0
  681. data/lib/countries/data/translations/countries-mt.yaml +254 -0
  682. data/lib/countries/data/translations/countries-my.yaml +254 -0
  683. data/lib/countries/data/translations/countries-na.yaml +254 -0
  684. data/lib/countries/data/translations/countries-nb.yaml +254 -0
  685. data/lib/countries/data/translations/countries-ne.yaml +254 -0
  686. data/lib/countries/data/translations/countries-nl.yaml +254 -0
  687. data/lib/countries/data/translations/countries-nn.yaml +254 -0
  688. data/lib/countries/data/translations/countries-nv.yaml +254 -0
  689. data/lib/countries/data/translations/countries-oc.yaml +254 -0
  690. data/lib/countries/data/translations/countries-or.yaml +254 -0
  691. data/lib/countries/data/translations/countries-pa.yaml +254 -0
  692. data/lib/countries/data/translations/countries-pi.yaml +254 -0
  693. data/lib/countries/data/translations/countries-pl.yaml +254 -0
  694. data/lib/countries/data/translations/countries-ps.yaml +254 -0
  695. data/lib/countries/data/translations/countries-pt.yaml +254 -0
  696. data/lib/countries/data/translations/countries-pt_BR.yaml +254 -0
  697. data/lib/countries/data/translations/countries-ro.yaml +254 -0
  698. data/lib/countries/data/translations/countries-ru.yaml +254 -0
  699. data/lib/countries/data/translations/countries-rw.yaml +254 -0
  700. data/lib/countries/data/translations/countries-sc.yaml +254 -0
  701. data/lib/countries/data/translations/countries-sd.yaml +254 -0
  702. data/lib/countries/data/translations/countries-si.yaml +254 -0
  703. data/lib/countries/data/translations/countries-sk.yaml +254 -0
  704. data/lib/countries/data/translations/countries-sl.yaml +254 -0
  705. data/lib/countries/data/translations/countries-so.yaml +254 -0
  706. data/lib/countries/data/translations/countries-sq.yaml +254 -0
  707. data/lib/countries/data/translations/countries-sr.yaml +254 -0
  708. data/lib/countries/data/translations/countries-sv.yaml +254 -0
  709. data/lib/countries/data/translations/countries-sw.yaml +254 -0
  710. data/lib/countries/data/translations/countries-ta.yaml +254 -0
  711. data/lib/countries/data/translations/countries-te.yaml +254 -0
  712. data/lib/countries/data/translations/countries-tg.yaml +254 -0
  713. data/lib/countries/data/translations/countries-th.yaml +254 -0
  714. data/lib/countries/data/translations/countries-ti.yaml +254 -0
  715. data/lib/countries/data/translations/countries-tk.yaml +254 -0
  716. data/lib/countries/data/translations/countries-tl.yaml +254 -0
  717. data/lib/countries/data/translations/countries-tr.yaml +254 -0
  718. data/lib/countries/data/translations/countries-tt.yaml +254 -0
  719. data/lib/countries/data/translations/countries-ug.yaml +254 -0
  720. data/lib/countries/data/translations/countries-uk.yaml +254 -0
  721. data/lib/countries/data/translations/countries-ur.yaml +254 -0
  722. data/lib/countries/data/translations/countries-uz.yaml +254 -0
  723. data/lib/countries/data/translations/countries-ve.yaml +254 -0
  724. data/lib/countries/data/translations/countries-vi.yaml +254 -0
  725. data/lib/countries/data/translations/countries-wa.yaml +254 -0
  726. data/lib/countries/data/translations/countries-wo.yaml +254 -0
  727. data/lib/countries/data/translations/countries-xh.yaml +254 -0
  728. data/lib/countries/data/translations/countries-yo.yaml +254 -0
  729. data/lib/countries/data/translations/countries-zh_CN.yaml +254 -0
  730. data/lib/countries/data/translations/countries-zh_HK.yaml +254 -0
  731. data/lib/countries/data/translations/countries-zh_TW.yaml +254 -0
  732. data/lib/countries/data/translations/countries-zu.yaml +254 -0
  733. data/lib/countries/data.rb +106 -44
  734. data/lib/countries/global.rb +15 -3
  735. data/lib/countries/iso3166.rb +3 -1
  736. data/lib/countries/kwarg_struct.rb +2 -0
  737. data/lib/countries/mongoid.rb +5 -0
  738. data/lib/countries/sources/cldr/downloader.rb +16 -14
  739. data/lib/countries/sources/cldr/subdivision.rb +4 -0
  740. data/lib/countries/sources/cldr/subdivision_updater.rb +24 -17
  741. data/lib/countries/sources/local/cached_loader.rb +5 -0
  742. data/lib/countries/sources/local/subdivision.rb +6 -2
  743. data/lib/countries/sources.rb +2 -0
  744. data/lib/countries/structure.rb +4 -6
  745. data/lib/countries/subdivision.rb +21 -8
  746. data/lib/countries/tasks/geocoding.rake +21 -19
  747. data/lib/countries/tasks/postal_codes.rake +50 -0
  748. data/lib/countries/timezones.rb +9 -4
  749. data/lib/countries/translations.rb +5 -4
  750. data/lib/countries/version.rb +3 -1
  751. data/lib/countries.rb +1 -2
  752. data/spec/00_global_spec.rb +2 -0
  753. data/spec/configuration_spec.rb +11 -5
  754. data/spec/country_spec.rb +356 -79
  755. data/spec/data_spec.rb +105 -30
  756. data/spec/mongoid_spec.rb +2 -2
  757. data/spec/perf_spec.rb +16 -16
  758. data/spec/spec_helper.rb +2 -0
  759. data/spec/subdivision_spec.rb +17 -1
  760. data/spec/thread_safety_spec.rb +47 -0
  761. data/spec/timezone_spec.rb +2 -0
  762. metadata +205 -78
  763. data/.travis.yml +0 -16
  764. data/lib/countries/cache/locales/zh.json +0 -1
  765. data/lib/countries/data/subdivisions/AI.yaml +0 -183
  766. data/lib/countries/data/subdivisions/AS.yaml +0 -66
  767. data/lib/countries/data/subdivisions/AX.yaml +0 -40
  768. data/lib/countries/data/subdivisions/BM.yaml +0 -144
  769. data/lib/countries/data/subdivisions/CK.yaml +0 -144
  770. data/lib/countries/data/subdivisions/EH.yaml +0 -72
  771. data/lib/countries/data/subdivisions/FO.yaml +0 -79
  772. data/lib/countries/data/subdivisions/GG.yaml +0 -144
  773. data/lib/countries/data/subdivisions/GU.yaml +0 -248
  774. data/lib/countries/data/subdivisions/HK.yaml +0 -235
  775. data/lib/countries/data/subdivisions/IM.yaml +0 -313
  776. data/lib/countries/data/subdivisions/JE.yaml +0 -157
  777. data/lib/countries/data/subdivisions/KY.yaml +0 -73
  778. data/lib/countries/data/subdivisions/MP.yaml +0 -53
  779. data/lib/countries/data/subdivisions/MS.yaml +0 -40
  780. data/lib/countries/data/subdivisions/NC.yaml +0 -40
  781. data/lib/countries/data/subdivisions/PF.yaml +0 -66
  782. data/lib/countries/data/subdivisions/PM.yaml +0 -27
  783. data/lib/countries/data/subdivisions/PR.yaml +0 -1015
  784. data/lib/countries/data/subdivisions/SJ.yaml +0 -27
  785. data/lib/countries/data/subdivisions/TF.yaml +0 -49
  786. data/lib/countries/data/subdivisions/TK.yaml +0 -40
  787. data/lib/countries/data/subdivisions/VI.yaml +0 -40
  788. data/lib/countries/data/subdivisions/YT.yaml +0 -222
  789. data/lib/countries/data/translation_corrections.yaml +0 -32
  790. data/lib/countries/setup.rb +0 -18
@@ -0,0 +1,254 @@
1
+ # Country name translations for locale zu
2
+ #
3
+ # alpha2: localized_name
4
+ #
5
+ ---
6
+ AD: I-Andora
7
+ AE: United Arab Emirates
8
+ AF: I-Afganistani
9
+ AG: Antigua no Barbuda
10
+ AI: Anguilla
11
+ AL: I-Albaniya
12
+ AM: Armenia
13
+ AO: I-Angola
14
+ AQ: Antarctica
15
+ AR: I-Argentina
16
+ AS: American Samoa
17
+ AT: I-Ostriya
18
+ AU: I-Ostreliya
19
+ AW: Aruba
20
+ AX: Åland Islands
21
+ AZ: I-Azerbayijani
22
+ BA: IBhosniya neHerzegovina
23
+ BB: I-Barbados
24
+ BD: Isi-Bhangladeshi
25
+ BE: Isi-Bhelijiyamu
26
+ BF: IBukhina Faso
27
+ BG: IBulgariya
28
+ BH: Bahrain
29
+ BI: IBurundi
30
+ BJ: IBenini
31
+ BL: Saint Barthélemy
32
+ BM: Bermuda
33
+ BN: Brunei Darussalam
34
+ BO: I Boliviya
35
+ BQ: Bonaire, Sint Eustatius and Saba
36
+ BR: IBrazili
37
+ BS: Bahamas
38
+ BT: Bhutan
39
+ BV: Bouvet Island
40
+ BW: IButswana
41
+ BY: IBelarusi
42
+ BZ: Belize
43
+ CA: I Khanada
44
+ CC: Cocos (Keeling) Islands
45
+ CD: Congo, The Democratic Republic of the
46
+ CF: Central African Republic
47
+ CG: Congo
48
+ CH: I-Switzerland
49
+ CI: Côte d'Ivoire
50
+ CK: Cook Islands
51
+ CL: I-Chile
52
+ CM: IKamerooni
53
+ CN: Isi-Shayina
54
+ CO: IKolombiya
55
+ CR: Costa Rica
56
+ CU: Cuba
57
+ CV: Cabo Verde
58
+ CW: Curaçao
59
+ CX: Christmas Island
60
+ CY: Cyprus
61
+ CZ: Czechia
62
+ DE: IJalimani
63
+ DJ: IJibuthi
64
+ DK: IDenimaki
65
+ DM: Dominica
66
+ DO: Ulawulo lokuziphatha kwe Dominikhani
67
+ DZ: IAljiriya
68
+ EC: Ecuador
69
+ EE: I-Estoniya
70
+ EG: IGibhithe
71
+ EH: Western Sahara
72
+ ER: I-Eritrea
73
+ ES: ISpeyini
74
+ ET: I-Ithiopia
75
+ FI: IFinlandi
76
+ FJ: IFiji
77
+ FK: Falkland Islands (Malvinas)
78
+ FM: Micronesia, Federated States of
79
+ FO: Faroe Islands
80
+ FR: IFulansi
81
+ GA: IGaboni
82
+ GB: Umbuso Ohlangeneyo
83
+ GD: I-Grenada
84
+ GE: Georgia
85
+ GF: French Guiana
86
+ GG: Guernsey
87
+ GH: IGana
88
+ GI: Gibraltar
89
+ GL: Greenland
90
+ GM: Gambia
91
+ GN: IGini
92
+ GP: Guadeloupe
93
+ GQ: IGini Enkabazwe
94
+ GR: IGreki
95
+ GS: South Georgia and the South Sandwich Islands
96
+ GT: I-Guwathemala
97
+ GU: Guam
98
+ GW: IGini Bisawu
99
+ GY: Guyana
100
+ HK: Hong Kong
101
+ HM: Heard Island and McDonald Islands
102
+ HN: I-Hondurasi
103
+ HR: IKrowati
104
+ HT: Haiti
105
+ HU: I-Hungariya
106
+ ID: I-Indonesia
107
+ IE: I-Ayilendi
108
+ IL: Isreyili
109
+ IM: Isle of Man
110
+ IN: India
111
+ IO: British Indian Ocean Territory
112
+ IQ: I-Iraki
113
+ IR: Iran, Islamic Republic of
114
+ IS: I-Ayisilandi
115
+ IT: ITaliya
116
+ JE: Jersey
117
+ JM: Jamaica
118
+ JO: Jordan
119
+ JP: IJaphani
120
+ KE: IKenya
121
+ KG: Kyrgyzstan
122
+ KH: Cambodia
123
+ KI: Kiribati
124
+ KM: IsiKhomorosi
125
+ KN: Saint Kitts and Nevis
126
+ KP: North Korea
127
+ KR: South Korea
128
+ KW: Kuwait
129
+ KY: Cayman Islands
130
+ KZ: Kazakhstan
131
+ LA: Lao People's Democratic Republic
132
+ LB: Lebanon
133
+ LC: Saint Lucia
134
+ LI: Liechtenstein
135
+ LK: Sri Lanka
136
+ LR: ILiberia
137
+ LS: OSotho
138
+ LT: ILithuwaniya
139
+ LU: I-Luxembourg
140
+ LV: ILatviya
141
+ LY: ILibiya
142
+ MA: IMorokho
143
+ MC: Monaco
144
+ MD: Moldova
145
+ ME: IMontenegro
146
+ MF: Saint Martin (French part)
147
+ MG: IMadagasika
148
+ MH: Marshall Islands
149
+ MK: North Macedonia
150
+ ML: IMali
151
+ MM: Myanmar
152
+ MN: Mongolia
153
+ MO: Macao
154
+ MP: Northern Mariana Islands
155
+ MQ: Martinique
156
+ MR: IMoritaniya
157
+ MS: Montserrat
158
+ MT: IMalta
159
+ MU: IMorishisi
160
+ MV: Maldives
161
+ MW: IMalawi
162
+ MX: IMekisiko
163
+ MY: Malaysia
164
+ MZ: IMozambiki
165
+ NA: INamibhiya
166
+ NC: New Caledonia
167
+ NE: INayighe
168
+ NF: Norfolk Island
169
+ NG: INigeria
170
+ NI: Nicaragua
171
+ NL: I-Netherlands
172
+ 'NO': INoki
173
+ NP: Nepal
174
+ NR: Nauru
175
+ NU: Niue
176
+ NZ: INyuzilandi
177
+ OM: Oman
178
+ PA: Panama
179
+ PE: I-Peru
180
+ PF: French Polynesia
181
+ PG: Papua New Guinea
182
+ PH: Philippines
183
+ PK: IPakistani
184
+ PL: IPolandi
185
+ PM: Saint Pierre and Miquelon
186
+ PN: Pitcairn
187
+ PR: Puerto Rico
188
+ PS: Palestine, State of
189
+ PT: IPhothugali
190
+ PW: Palau
191
+ PY: I-Paraguwayi
192
+ QA: Qatar
193
+ RE: IRiyunion
194
+ RO: I-Romaniya
195
+ RS: ISerbiya
196
+ RU: Russian Federation
197
+ RW: IRuwanda
198
+ SA: Saudi Arabia
199
+ SB: Solomon Islands
200
+ SC: IsiSeyisheli
201
+ SD: ISudan
202
+ SE: ISwidi
203
+ SG: Singapore
204
+ SH: Saint Helena, Ascension and Tristan da Cunha
205
+ SI: ISloveniya
206
+ SJ: Svalbard and Jan Mayen
207
+ SK: ISlovaki
208
+ SL: ISiera Liyoni
209
+ SM: USanti Marino
210
+ SN: ISenegal
211
+ SO: ISomalia
212
+ SR: Suriname
213
+ SS: ISudan yaseNingizimu
214
+ ST: ISawu Tome noPhrinitshipeyi
215
+ SV: El Salvador
216
+ SX: Sint Maarten (Dutch part)
217
+ SY: Syrian Arab Republic
218
+ SZ: Eswatini
219
+ TC: Turks and Caicos Islands
220
+ TD: ITshedi
221
+ TF: French Southern Territories
222
+ TG: ITogo
223
+ TH: I-Thayilandi
224
+ TJ: Tajikistan
225
+ TK: Tokelau
226
+ TL: Timor-Leste
227
+ TM: Turkmenistan
228
+ TN: ITunisia
229
+ TO: Tonga
230
+ TR: ITheki
231
+ TT: I-Trinidad ne Tobago
232
+ TV: Tuvalu
233
+ TW: I-Tayiwani
234
+ TZ: ITanzania
235
+ UA: I-Yukreyini
236
+ UG: IYuganda
237
+ UM: United States Minor Outlying Islands
238
+ US: United States
239
+ UY: I-Uruguwayi
240
+ UZ: Uzbekistan
241
+ VA: Holy See (Vatican City State)
242
+ VC: Saint Vincent and the Grenadines
243
+ VE: I-Venezuwela
244
+ VG: Virgin Islands, British
245
+ VI: Virgin Islands, U.S.
246
+ VN: IViyetnami
247
+ VU: Vanuatu
248
+ WF: Wallis and Futuna
249
+ WS: Samoa
250
+ YE: IYemen
251
+ YT: IMayotte
252
+ ZA: IRiphabliki yaseNingizimu Afrika
253
+ ZM: IZambiya
254
+ ZW: IZimbabwe
@@ -1,10 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
- ##
3
4
  # Handles building the in memory store of countries data
4
5
  class Data
5
- @@cache_dir = [File.dirname(__FILE__), 'cache']
6
- @@cache = {}
7
- @@registered_data = {}
6
+ @cache_dir = [File.dirname(__FILE__), 'cache']
7
+ @cache = {}
8
+ @loaded_country_codes = []
9
+ @registered_data = {}
10
+ @mutex = Mutex.new
11
+ @subdivisions = {}
8
12
 
9
13
  def initialize(alpha2)
10
14
  @alpha2 = alpha2.to_s.upcase
@@ -15,56 +19,88 @@ module ISO3166
15
19
  end
16
20
 
17
21
  class << self
18
- def cache_dir
19
- @@cache_dir
20
- end
21
-
22
- def cache_dir=(value)
23
- @@cache_dir = value
24
- end
25
22
 
23
+ # Registers a new Country with custom data.
24
+ # If you are overriding an existing country, this does not perform a deep merge so you will need to __bring in all data you wish to be available__.
25
+ # Overriding an existing country will also remove it from the internal management of translations.
26
26
  def register(data)
27
27
  alpha2 = data[:alpha2].upcase
28
- @@registered_data[alpha2] = \
29
- data.each_with_object({}) { |(k, v), a| a[k.to_s] = v }
30
- @@registered_data[alpha2]['translations'] = \
31
- Translations.new.merge(data[:translations] || {})
32
- @@cache = cache.merge(@@registered_data)
28
+ @registered_data[alpha2] = deep_stringify_keys(data)
29
+ @registered_data[alpha2]['translations'] = \
30
+ Translations.new.merge(data['translations'] || {})
31
+ @cache = cache.merge(@registered_data)
33
32
  end
34
33
 
34
+ # Removes a country from the loaded data
35
35
  def unregister(alpha2)
36
36
  alpha2 = alpha2.to_s.upcase
37
- @@cache.delete(alpha2)
38
- @@registered_data.delete(alpha2)
37
+ @cache.delete(alpha2)
38
+ @registered_data.delete(alpha2)
39
39
  end
40
40
 
41
41
  def cache
42
42
  update_cache
43
43
  end
44
44
 
45
+ # Resets the loaded data and cache
45
46
  def reset
46
- @@cache = {}
47
- @@registered_data = {}
47
+ @cache = {}
48
+ @subdivisions = {}
49
+ @registered_data = {}
48
50
  ISO3166.configuration.loaded_locales = []
49
51
  end
50
52
 
51
53
  def codes
52
54
  load_data!
53
- loaded_codes
55
+ cached_codes
54
56
  end
55
57
 
56
58
  def update_cache
57
59
  load_data!
58
60
  sync_translations!
59
- @@cache
61
+ @cache
62
+ end
63
+
64
+ def loaded_codes
65
+ load_data!
66
+ @loaded_country_codes
67
+ end
68
+
69
+ def datafile_path(file_array)
70
+ File.join([@cache_dir] + file_array)
71
+ end
72
+
73
+ def subdivision_data(alpha2)
74
+ file = subdivision_file_path(alpha2)
75
+ data = File.exist?(file) ? YAML.load_file(file) : {}
76
+ locales = ISO3166.configuration.locales.map(&:to_s)
77
+ data.each_value{ |v| v['translations'] = v['translations'].slice(*locales)}
78
+
79
+ return data
60
80
  end
61
81
 
82
+ def subdivisions(alpha2)
83
+ @subdivisions ||= {}
84
+ @subdivisions[alpha2] ||= create_subdivisions(ISO3166::Data.subdivision_data(alpha2))
85
+ end
86
+
87
+ def create_subdivisions(subdivision_data)
88
+ subdivision_data.each_with_object({}) do |(k, v), hash|
89
+ hash[k] = Subdivision.new(v)
90
+ end
91
+ end
92
+
93
+ private
94
+
62
95
  def load_data!
63
- return @@cache unless load_required?
64
- @@cache = load_cache %w(countries.json)
65
- @@_country_codes = @@cache.keys
66
- @@cache = @@cache.merge(@@registered_data)
67
- @@cache
96
+ return @cache unless load_required?
97
+
98
+ synchronized do
99
+ @cache = load_cache %w[countries.json]
100
+ @loaded_country_codes = @cache.keys
101
+ @cache = @cache.merge(@registered_data)
102
+ @cache
103
+ end
68
104
  end
69
105
 
70
106
  def sync_translations!
@@ -79,19 +115,32 @@ module ISO3166
79
115
  end
80
116
  end
81
117
 
82
- private
118
+ def synchronized(&block)
119
+ if use_mutex?
120
+ @mutex.synchronize(&block)
121
+ else
122
+ block.call
123
+ end
124
+ end
125
+
126
+ def use_mutex?
127
+ # Stubbed in testing
128
+ true
129
+ end
83
130
 
84
131
  def load_required?
85
- @@cache.empty?
132
+ synchronized do
133
+ @cache.empty?
134
+ end
86
135
  end
87
136
 
88
- def loaded_codes
89
- @@cache.keys
137
+ def cached_codes
138
+ @cache.keys
90
139
  end
91
140
 
92
141
  # Codes that we have translations for in dataset
93
142
  def internal_codes
94
- @@_country_codes - @@registered_data.keys
143
+ @loaded_country_codes - @registered_data.keys
95
144
  end
96
145
 
97
146
  def cache_flush_required?
@@ -115,21 +164,25 @@ module ISO3166
115
164
  end
116
165
 
117
166
  def load_translations(locale)
118
- locale_names = load_cache(['locales', "#{locale}.json"])
119
- internal_codes.each do |alpha2|
120
- @@cache[alpha2]['translations'] ||= Translations.new
121
- @@cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
122
- @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
167
+ synchronized do
168
+ locale_names = load_cache(['locales', "#{locale}.json"])
169
+ internal_codes.each do |alpha2|
170
+ @cache[alpha2]['translations'] ||= Translations.new
171
+ @cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
172
+ @cache[alpha2]['translated_names'] = @cache[alpha2]['translations'].values.freeze
173
+ end
174
+ ISO3166.configuration.loaded_locales << locale
123
175
  end
124
- ISO3166.configuration.loaded_locales << locale
125
176
  end
126
177
 
127
178
  def unload_translations(locale)
128
- internal_codes.each do |alpha2|
129
- @@cache[alpha2]['translations'].delete(locale)
130
- @@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
179
+ synchronized do
180
+ internal_codes.each do |alpha2|
181
+ @cache[alpha2]['translations'].delete(locale)
182
+ @cache[alpha2]['translated_names'] = @cache[alpha2]['translations'].values.freeze
183
+ end
184
+ ISO3166.configuration.loaded_locales.delete(locale)
131
185
  end
132
- ISO3166.configuration.loaded_locales.delete(locale)
133
186
  end
134
187
 
135
188
  def load_cache(file_array)
@@ -137,8 +190,17 @@ module ISO3166
137
190
  File.exist?(file_path) ? JSON.parse(File.binread(file_path)) : {}
138
191
  end
139
192
 
140
- def datafile_path(file_array)
141
- File.join([@@cache_dir] + file_array)
193
+ def deep_stringify_keys(data)
194
+ data.transform_keys!(&:to_s)
195
+ data.transform_values! do |v|
196
+ v.is_a?(Hash) ? deep_stringify_keys(v) : v
197
+ end
198
+
199
+ data
200
+ end
201
+
202
+ def subdivision_file_path(alpha2)
203
+ File.join(File.dirname(__FILE__), 'data', 'subdivisions', "#{alpha2}.yaml")
142
204
  end
143
205
  end
144
206
  end
@@ -1,7 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'countries'
2
4
 
5
+ # Some apps might not want to constantly call +ISO3166::Country+. This gem has a helper that can provide a Country class
6
+ #
7
+ # With global Country Helper enabled
8
+ #
9
+ # c = Country['US']
10
+ #
11
+ # This will conflict with any existing Country constant
12
+ #
13
+ # To Use
14
+ #
15
+ # gem 'countries', require: 'countries/global'
16
+ #
3
17
  class Country < ISO3166::Country
4
- def to_s
5
- name
6
- end
18
+
7
19
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'json'
3
- require 'i18n_data'
4
5
 
5
6
  require 'countries/kwarg_struct'
6
7
  require 'countries/configuration'
@@ -8,6 +9,7 @@ require 'countries/data'
8
9
  require 'countries/structure'
9
10
  require 'countries/translations'
10
11
  require 'countries/country/class_methods'
12
+ require 'countries/country/finder_methods'
11
13
  require 'countries/country/emoji'
12
14
  require 'countries/country'
13
15
  require 'countries/subdivision'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class KwargStruct < Struct
3
5
  # Override the initialize to handle hashes of named parameters
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class Country
3
5
  def mongoize
@@ -5,6 +7,7 @@ module ISO3166
5
7
  end
6
8
 
7
9
  class << self
10
+ # Convert an +ISO3166::Country+ to the data that is stored by Mongoid.
8
11
  def mongoize(country)
9
12
  if country.is_a?(self) && !country.data.nil?
10
13
  country.alpha2
@@ -13,10 +16,12 @@ module ISO3166
13
16
  end
14
17
  end
15
18
 
19
+ # Get the object as it was stored with Mongoid, and instantiate an +ISO3166::Country+.
16
20
  def demongoize(alpha2)
17
21
  new(alpha2)
18
22
  end
19
23
 
24
+ # Convert an +ISO3166::Country+ to the data that is stored by Mongoid.
20
25
  def evolve(country)
21
26
  mongoize(country)
22
27
  end
@@ -1,9 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
  require 'net/http'
3
5
  require 'nokogiri'
4
6
  require 'fileutils'
7
+ require 'json'
8
+
9
+ # Support code to allow updating subdivision data from the Unicode CLDR repository
5
10
  module Sources
11
+ # Support code to allow updating subdivision data from the Unicode CLDR repository
6
12
  module CLDR
13
+ # Downloads data from the Unicode CLDR repository
7
14
  module Downloader
8
15
  module_function
9
16
 
@@ -14,21 +21,16 @@ module Sources
14
21
  def download_folder(type)
15
22
  folder = File.join(ISO3166_ROOT_PATH, 'tmp', 'cldr', 'trunk', 'common', type)
16
23
  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('/')))
21
- end
22
- end
24
+ url = URI.parse("https://api.github.com/repos/unicode-org/cldr/contents/common/#{type}")
25
+ path_listing = JSON.parse(Net::HTTP.get_response(url).body)
26
+ path_listing.each do |path|
27
+ next unless path['name'] =~ /\.xml$/
23
28
 
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
29
+ File.open(File.join(folder, path['name']), 'w') do |f|
30
+ raw_url = URI.parse(path['download_url'])
31
+ f.write(Net::HTTP.get_response(raw_url).body)
32
+ end
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sources
2
4
  module CLDR
5
+ # Auxiliary Subdivision class to support loading Unicode CLDR data to update local files
3
6
  class Subdivision
4
7
  attr_reader :xml, :language_code
8
+
5
9
  def initialize(language_code:, xml:)
6
10
  @language_code = language_code
7
11
  @xml = xml
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support'
2
4
  require 'active_support/core_ext/hash/deep_merge'
3
5
  require 'nokogiri'
@@ -5,28 +7,33 @@ require 'pry'
5
7
 
6
8
  module Sources
7
9
  module CLDR
10
+ # Updates local subdivision files with data from the Unicode CLDR repository
8
11
  class SubdivisionUpdater
9
12
  def call
10
13
  d = Dir['./tmp/cldr/trunk/common/subdivisions/*.xml']
11
- loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
12
- d.each do |file_path|
13
- language_data = Nokogiri::XML(File.read(file_path))
14
- language_code = File.basename(file_path, '.*')
15
- subdivisions = language_data.css('subdivision')
16
- next if subdivisions.empty?
17
- last_country_code_seen = nil
14
+ @loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
15
+ d.each { |file_path| update_locale(file_path) }
16
+ end
17
+
18
+ def update_locale(file_path)
19
+ language_data = Nokogiri::XML(File.read(file_path))
20
+ language_code = File.basename(file_path, '.*')
21
+ subdivisions = language_data.css('subdivision')
22
+ return if subdivisions.empty?
23
+
24
+ last_country_code_seen = nil
18
25
 
19
- subdivisions.each_with_index do |subdivision, index|
20
- subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
21
- data = loader.load(subdivision.country_code)
22
- data[subdivision.code] ||= {}
23
- data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
24
- if (last_country_code_seen && last_country_code_seen != subdivision.country_code) || index == subdivisions.size - 1
25
- puts "Updated #{subdivision.country_code} with language_code #{language_code}"
26
- loader.save(subdivision.country_code, data)
27
- end
28
- last_country_code_seen = subdivision.country_code
26
+ subdivisions.each_with_index do |subdivision, index|
27
+ subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
28
+ data = @loader.load(subdivision.country_code)
29
+ data[subdivision.code] ||= {}
30
+ data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
31
+ if (last_country_code_seen && last_country_code_seen != subdivision.country_code) ||
32
+ index == subdivisions.size - 1
33
+ puts "Updated #{subdivision.country_code} with language_code #{language_code}"
34
+ @loader.save(subdivision.country_code, data)
29
35
  end
36
+ last_country_code_seen = subdivision.country_code
30
37
  end
31
38
  end
32
39
  end
@@ -1,7 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sources
4
+ # Support code to allow updating subdivision data from the Unicode CLDR repository
2
5
  module Local
6
+ # Loader for locally-cached data, to allow merging Unicode CLDR data with existing local data
3
7
  class CachedLoader
4
8
  attr_reader :klass
9
+
5
10
  def initialize(klass)
6
11
  @klass = klass
7
12
  @loaded_countries = {}