countries 3.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -1 +1 @@
1
- {"AF":"Afghanistan","AX":"I-Irelandi","AL":"Albania","DZ":"I-Buligariya","AS":"Melika, Mntla","AD":"Andorra","AO":"Angola","AI":"Anguilla","AQ":"Antarctica","AG":"Antigua no Barbuda","AR":"I-Argentina","AM":"I-Argentina","AW":"Aruba","AU":"I-Australiya","AT":"I-Austriyiya","AZ":"I-Azerbayijani","BS":"I-Panama","BH":"I Brazili","BD":"Isi-Bhangladeshi","BB":"I-Barbados","BY":"I Bhelarusi","BE":"Isi-Bhelijiyamu","BZ":"Isi-Bhelijiyamu","BJ":"Benin","BM":"Bermuda","BT":"Bhutan","BO":"Bolivia, Plurinational State of","BQ":"Bonaire, Sint Eustatius and Saba","BA":"Bosnia and Herzegovina","BW":"Botswana","BV":"Bouvet Island","BR":"I Brazili","IO":"British Indian Ocean Territory","BN":"Brunei Darussalam","BG":"I-Buligariya","BF":"Burkina Faso","BI":"Burundi","KH":"I Kholombiya","CM":"Cameroon","CA":"I Khanada","CV":"Cape Verde","KY":"Cayman Islands","CF":"Ulawulo lokuziphatha kwe Dominikhani","TD":"Isi-Shayina","CL":"I-Chile","CN":"Isi-Shayina","CX":"Christmas Island","CC":"Cocos (Keeling) Islands","CO":"I Kholombiya","KM":"Comoros","CG":"Congo","CD":"Congo, The Democratic Republic of the","CK":"Cook Islands","CR":"Costa Rica","CI":"Côte d'Ivoire","HR":"I-Crowathiya","CU":"I Kholombiya","CW":"Curaçao","CY":"Cyprus","CZ":"Ulawulo lokuziphatha kwe Dominikhani","DK":"Isi-Denimaki","DJ":"Djibouti","DM":"I-Romaniya","DO":"Ulawulo lokuziphatha kwe Dominikhani","EC":"Equador","EG":"Amandla","SV":"I-El Salvador","GQ":"Equatorial Guinea","ER":"Eritrea","EE":"I-Estoniya","ET":"I-Estoniya","FK":"Falkland Islands (Malvinas)","FO":"I-Irelandi","FJ":"Fiji","FI":"I-Finilandi","FR":"Isi Frentshi","GF":"French Guiana","PF":"French Polynesia","TF":"French Southern Territories","GA":"Gabon","GM":"I Jamayikha","GE":"I-Serbiya","DE":"Isi-Jalimani","GH":"Isi-Shayina","GI":"Gibraltar","GR":"I-Grisi","GL":"I-Grenada","GD":"I-Grenada","GP":"Guadeloupe","GU":"I-Guwathemala","GT":"I-Guwathemala","GG":"Guernsey","GN":"Guinea","GW":"Guinea-Bissau","GY":"Guyana","HT":"Haiti","HM":"Heard Island and McDonald Islands","VA":"Holy See (Vatican City State)","HN":"I-Hondurasi","HK":"Hong Kong","HU":"I-Hungariya","IS":"I-Icelandi","IN":"I-Indoneshiya","ID":"I-Indoneshiya","IR":"Ulawulo lokuziphatha kwe Dominikhani","IQ":"I-Sirayeli","IE":"I-Irelandi","IM":"Isle of Man","IL":"I-Sirayeli","IT":"I-Ithali","JM":"I Jamayikha","JP":"I-Japhani","JE":"Jersey","JO":"Isi-Koreyani","KZ":"I-Tayiwani","KE":"Kenya","KI":"Kiribati","KP":"Korea, Democratic People's Republic of","KR":"Ulawulo lokuziphatha kwe Dominikhani","KW":"Kuwait","KG":"Kyrgyzstan","LA":"Lao People's Democratic Republic","LV":"I-Latviya","LB":"Lebanon","LS":"Lesotho","LR":"I-Serbiya","LY":"I-Serbiya","LI":"Liechtenstein","LT":"I-Lithuwaniya","LU":"I-Luxembourg","MO":"I-Malta","MK":"Ulawulo lokuziphatha kwe Dominikhani","MG":"Madagascar","MW":"I-Malta","MY":"I-Malta","MV":"I-Malta","ML":"I-Malta","MT":"I-Malta","MH":"Marshall Islands","MQ":"Martinique","MR":"I-Lithuwaniya","MU":"I-Lithuwaniya","YT":"Mayotte","MX":"I-Mexico","FM":"Micronesia, Federated States of","MD":"Ulawulo lokuziphatha kwe Dominikhani","MC":"Monaco","MN":"Mongolia","ME":"Montenegro","MS":"Montserrat","MA":"Morocco","MZ":"Mozambique","MM":"I-Panama","NA":"Namibia","NR":"Nauru","NP":"Nepal","NL":"I-Netherlands","NC":"I-Makhedoniya","NZ":"I-New Zealand","NI":"I-Paraguwayi","NE":"Niger","NG":"I-Serbiya","NU":"Niue","NF":"Norfolk Island","MP":"Northern Mariana Islands","NO":"I-Noweyi","OM":"Oman","PK":"Pakistan","PW":"I-Paraguwayi","PS":"Palestine, State of","PA":"I-Panama","PG":"Papua New Guinea","PY":"I-Paraguwayi","PE":"I-Peru","PH":"Philippines","PN":"Pitcairn","PL":"I-Polandi","PT":"I-Phothugali","PR":"Puerto Rico","QA":"I-Malta","RE":"Réunion","RO":"I-Romaniya","RU":"Russian Federation","RW":"I Khanada","BL":"Saint Barthélemy","SH":"Saint Helena, Ascension and Tristan da Cunha","KN":"St. Kitts no Nevis","LC":"St. Lucia","MF":"Saint Martin (French part)","PM":"Saint Pierre and Miquelon","VC":"I-St. Vincent ne Grenadines","WS":"Samoa","SM":"San Marino","ST":"Sao Tome and Principe","SA":"Saudi Arabia","SN":"Senegal","RS":"I-Serbiya","SC":"Seychelles","SL":"Sierra Leone","SG":"Singapore","SX":"Sint Maarten (Dutch part)","SK":"Isi-Slovaki","SI":"Isi-Sloveniya","SB":"Solomon Islands","SO":"I-Romaniya","ZA":"I-Mzantsi Afrika","GS":"South Georgia and the South Sandwich Islands","ES":"Isi-Spayini","LK":"Sri Lanka","SD":"Umsindo","SR":"Suriname","SS":"I-Mzantsi Afrika","SJ":"Svalbard and Jan Mayen","SZ":"I-Thayilandi","SE":"Isi-Swideni","CH":"I-Switzerland","SY":"Ulawulo lokuziphatha kwe Dominikhani","TW":"I-Tayiwani","TJ":"I-Tayiwani","TZ":"Ulawulo lokuziphatha kwe Dominikhani","TH":"I-Thayilandi","TL":"Timor-Leste","TG":"Togo","TK":"Tokelau","TO":"Tonga","TT":"I-Trinidad ne Tobago","TN":"Isi-Rashiya","TR":"I-Turkey","TM":"Turkmenistan","TC":"Turks and Caicos Islands","TV":"Tuvalu","UG":"I Khanada","UA":"I-Ukraine","AE":"United Arab Emirates","GB":"United Kingdom","US":"United States ye Melika","UM":"United States ye Melika","UY":"I-Uruguwayi","UZ":"Uzbekistan","VU":"Vanuatu","VE":"Ulawulo lokuziphatha kwe Dominikhani","VN":"I-Vietnami","VG":"Virgin Islands, British","VI":"I-Finilandi","WF":"Wallis and Futuna","EH":"Western Sahara","YE":"Yemen","ZM":"I Jamayikha","ZW":"Zimbabwe"}
1
+ {"AD":"I-Andora","AE":"United Arab Emirates","AF":"I-Afganistani","AG":"Antigua no Barbuda","AI":"Anguilla","AL":"I-Albaniya","AM":"Armenia","AO":"I-Angola","AQ":"Antarctica","AR":"I-Argentina","AS":"American Samoa","AT":"I-Ostriya","AU":"I-Ostreliya","AW":"Aruba","AX":"Åland Islands","AZ":"I-Azerbayijani","BA":"IBhosniya neHerzegovina","BB":"I-Barbados","BD":"Isi-Bhangladeshi","BE":"Isi-Bhelijiyamu","BF":"IBukhina Faso","BG":"IBulgariya","BH":"Bahrain","BI":"IBurundi","BJ":"IBenini","BL":"Saint Barthélemy","BM":"Bermuda","BN":"Brunei Darussalam","BO":"I Boliviya","BQ":"Bonaire, Sint Eustatius and Saba","BR":"IBrazili","BS":"Bahamas","BT":"Bhutan","BV":"Bouvet Island","BW":"IButswana","BY":"IBelarusi","BZ":"Belize","CA":"I Khanada","CC":"Cocos (Keeling) Islands","CD":"Congo, The Democratic Republic of the","CF":"Central African Republic","CG":"Congo","CH":"I-Switzerland","CI":"Côte d'Ivoire","CK":"Cook Islands","CL":"I-Chile","CM":"IKamerooni","CN":"Isi-Shayina","CO":"IKolombiya","CR":"Costa Rica","CU":"Cuba","CV":"Cabo Verde","CW":"Curaçao","CX":"Christmas Island","CY":"Cyprus","CZ":"Czechia","DE":"IJalimani","DJ":"IJibuthi","DK":"IDenimaki","DM":"Dominica","DO":"Ulawulo lokuziphatha kwe Dominikhani","DZ":"IAljiriya","EC":"Ecuador","EE":"I-Estoniya","EG":"IGibhithe","EH":"Western Sahara","ER":"I-Eritrea","ES":"ISpeyini","ET":"I-Ithiopia","FI":"IFinlandi","FJ":"IFiji","FK":"Falkland Islands (Malvinas)","FM":"Micronesia, Federated States of","FO":"Faroe Islands","FR":"IFulansi","GA":"IGaboni","GB":"Umbuso Ohlangeneyo","GD":"I-Grenada","GE":"Georgia","GF":"French Guiana","GG":"Guernsey","GH":"IGana","GI":"Gibraltar","GL":"Greenland","GM":"Gambia","GN":"IGini","GP":"Guadeloupe","GQ":"IGini Enkabazwe","GR":"IGreki","GS":"South Georgia and the South Sandwich Islands","GT":"I-Guwathemala","GU":"Guam","GW":"IGini Bisawu","GY":"Guyana","HK":"Hong Kong","HM":"Heard Island and McDonald Islands","HN":"I-Hondurasi","HR":"IKrowati","HT":"Haiti","HU":"I-Hungariya","ID":"I-Indonesia","IE":"I-Ayilendi","IL":"Isreyili","IM":"Isle of Man","IN":"India","IO":"British Indian Ocean Territory","IQ":"I-Iraki","IR":"Iran, Islamic Republic of","IS":"I-Ayisilandi","IT":"ITaliya","JE":"Jersey","JM":"Jamaica","JO":"Jordan","JP":"IJaphani","KE":"IKenya","KG":"Kyrgyzstan","KH":"Cambodia","KI":"Kiribati","KM":"IsiKhomorosi","KN":"Saint Kitts and Nevis","KP":"North Korea","KR":"South Korea","KW":"Kuwait","KY":"Cayman Islands","KZ":"Kazakhstan","LA":"Lao People's Democratic Republic","LB":"Lebanon","LC":"Saint Lucia","LI":"Liechtenstein","LK":"Sri Lanka","LR":"ILiberia","LS":"OSotho","LT":"ILithuwaniya","LU":"I-Luxembourg","LV":"ILatviya","LY":"ILibiya","MA":"IMorokho","MC":"Monaco","MD":"Moldova","ME":"IMontenegro","MF":"Saint Martin (French part)","MG":"IMadagasika","MH":"Marshall Islands","MK":"North Macedonia","ML":"IMali","MM":"Myanmar","MN":"Mongolia","MO":"Macao","MP":"Northern Mariana Islands","MQ":"Martinique","MR":"IMoritaniya","MS":"Montserrat","MT":"IMalta","MU":"IMorishisi","MV":"Maldives","MW":"IMalawi","MX":"IMekisiko","MY":"Malaysia","MZ":"IMozambiki","NA":"INamibhiya","NC":"New Caledonia","NE":"INayighe","NF":"Norfolk Island","NG":"INigeria","NI":"Nicaragua","NL":"I-Netherlands","NO":"INoki","NP":"Nepal","NR":"Nauru","NU":"Niue","NZ":"INyuzilandi","OM":"Oman","PA":"Panama","PE":"I-Peru","PF":"French Polynesia","PG":"Papua New Guinea","PH":"Philippines","PK":"IPakistani","PL":"IPolandi","PM":"Saint Pierre and Miquelon","PN":"Pitcairn","PR":"Puerto Rico","PS":"Palestine, State of","PT":"IPhothugali","PW":"Palau","PY":"I-Paraguwayi","QA":"Qatar","RE":"IRiyunion","RO":"I-Romaniya","RS":"ISerbiya","RU":"Russian Federation","RW":"IRuwanda","SA":"Saudi Arabia","SB":"Solomon Islands","SC":"IsiSeyisheli","SD":"ISudan","SE":"ISwidi","SG":"Singapore","SH":"Saint Helena, Ascension and Tristan da Cunha","SI":"ISloveniya","SJ":"Svalbard and Jan Mayen","SK":"ISlovaki","SL":"ISiera Liyoni","SM":"USanti Marino","SN":"ISenegal","SO":"ISomalia","SR":"Suriname","SS":"ISudan yaseNingizimu","ST":"ISawu Tome noPhrinitshipeyi","SV":"El Salvador","SX":"Sint Maarten (Dutch part)","SY":"Syrian Arab Republic","SZ":"Eswatini","TC":"Turks and Caicos Islands","TD":"ITshedi","TF":"French Southern Territories","TG":"ITogo","TH":"I-Thayilandi","TJ":"Tajikistan","TK":"Tokelau","TL":"Timor-Leste","TM":"Turkmenistan","TN":"ITunisia","TO":"Tonga","TR":"ITheki","TT":"I-Trinidad ne Tobago","TV":"Tuvalu","TW":"I-Tayiwani","TZ":"ITanzania","UA":"I-Yukreyini","UG":"IYuganda","UM":"United States Minor Outlying Islands","US":"United States","UY":"I-Uruguwayi","UZ":"Uzbekistan","VA":"Holy See (Vatican City State)","VC":"Saint Vincent and the Grenadines","VE":"I-Venezuwela","VG":"Virgin Islands, British","VI":"Virgin Islands, U.S.","VN":"IViyetnami","VU":"Vanuatu","WF":"Wallis and Futuna","WS":"Samoa","YE":"IYemen","YT":"IMayotte","ZA":"IRiphabliki yaseNingizimu Afrika","ZM":"IZambiya","ZW":"IZimbabwe"}
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class << self
3
5
  attr_writer :configuration
@@ -24,6 +26,19 @@ module ISO3166
24
26
  @loaded_locales = []
25
27
  end
26
28
 
29
+ # Enables the integration with the {Money}[https://github.com/RubyMoney/money] gem
30
+ #
31
+ # Please note that it requires you to add "money" gem to your gemfile.
32
+ #
33
+ # gem "money", "~> 6.9"
34
+ #
35
+ # *WARNING* if you have a top level class named +Money+ you will conflict with this gem.
36
+ #
37
+ # @example
38
+ # c = ISO3166::Country['us']
39
+ # c.currency.iso_code # => 'USD'
40
+ # c.currency.name # => 'United States Dollar'
41
+ # c.currency.symbol # => '$'
27
42
  def enable_currency_extension!
28
43
  require 'countries/country/currency_methods'
29
44
  ISO3166::Country.prepend(ISO3166::CountryCurrencyMethods)
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'unaccent'
4
+
1
5
  module ISO3166
2
6
  UNSEARCHABLE_METHODS = [:translations].freeze
3
7
 
4
- def self::Country(country_data_or_country)
8
+ def self.Country(country_data_or_country)
5
9
  case country_data_or_country
6
10
  when ISO3166::Country
7
11
  country_data_or_country
@@ -13,9 +17,6 @@ module ISO3166
13
17
  end
14
18
 
15
19
  module CountryClassMethods
16
- FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/
17
- SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/
18
-
19
20
  def new(country_data)
20
21
  super if country_data.is_a?(Hash) || codes.include?(country_data.to_s.upcase)
21
22
  end
@@ -31,119 +32,62 @@ module ISO3166
31
32
 
32
33
  alias countries all
33
34
 
34
- def all_translated(locale = 'en')
35
- translations(locale).values
36
- end
37
-
38
35
  def all_names_with_codes(locale = 'en')
39
36
  Country.all.map do |c|
40
- lc = (c.translation(locale) || c.name)
37
+ lc = (c.translation(locale) || c.iso_short_name)
41
38
  [lc.respond_to?('html_safe') ? lc.html_safe : lc, c.alpha2]
42
39
  end.sort
43
40
  end
44
41
 
45
- def translations(locale = 'en')
46
- I18nData.countries(locale.upcase)
47
- end
48
-
49
- def search(query)
50
- country = new(query.to_s.upcase)
51
- country && country.valid? ? country : nil
52
- end
53
-
54
- def [](query)
55
- search(query)
56
- end
57
-
58
- def method_missing(method_name, *arguments)
59
- matches = method_name.to_s.match(FIND_BY_REGEX)
60
- return_all = matches[1]
61
- super unless matches
62
-
63
- countries = find_by(matches[3], arguments[0], matches[2])
64
- return_all ? countries : countries.last
65
- end
66
-
67
- def respond_to_missing?(method_name, include_private = false)
68
- matches = method_name.to_s.match(FIND_BY_REGEX)
69
- if matches && matches[3]
70
- matches[3].all? { |a| instance_methods.include?(a.to_sym) }
71
- else
72
- super
73
- end
74
- end
75
-
76
- def find_all_by(attribute, val)
77
- attributes, lookup_value = parse_attributes(attribute, val)
78
-
79
- ISO3166::Data.cache.select do |_, v|
80
- country = Country.new(v)
81
- attributes.any? do |attr|
82
- Array(country.send(attr)).any? { |n| lookup_value === parse_value(n) }
83
- end
42
+ def pluck(*attributes)
43
+ all.map do |country|
44
+ attributes.map { |attribute| country.data.fetch(attribute.to_s) }
84
45
  end
85
46
  end
86
47
 
87
- def subdivisions(alpha2)
88
- @subdivisions ||= {}
89
- @subdivisions[alpha2] ||= create_subdivisions(subdivision_data(alpha2))
48
+ def all_translated(locale = 'en')
49
+ translations(locale).values
90
50
  end
91
51
 
92
- def create_subdivisions(subdivision_data)
93
- subdivision_data.each_with_object({}) do |(k, v), hash|
94
- hash[k] = Subdivision.new(v)
52
+ def translations(locale = 'en')
53
+ locale = locale.downcase
54
+ file_path = ISO3166::Data.datafile_path(%W[locales #{locale}.json])
55
+ translations = JSON.parse(File.read(file_path))
56
+
57
+ custom_countries = {}
58
+ (ISO3166::Data.codes - ISO3166::Data.loaded_codes).each do |code|
59
+ country = ISO3166::Country[code]
60
+ translation = country.translations[locale] || country.iso_short_name
61
+ custom_countries[code] = translation
95
62
  end
63
+
64
+ translations.merge(custom_countries)
96
65
  end
97
66
 
98
67
  protected
99
68
 
100
- def strip_accents(v)
101
- if v.is_a?(Regexp)
102
- Regexp.new(v.source.unaccent, 'i')
69
+ def strip_accents(string)
70
+ if string.is_a?(Regexp)
71
+ Regexp.new(Unaccent.unaccent(string.source), 'i')
103
72
  else
104
- UnicodeUtils.downcase(v.to_s.unaccent)
73
+ Unaccent.unaccent(string.to_s).downcase
105
74
  end
106
75
  end
107
76
 
108
- def parse_attributes(attribute, val)
109
- raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
110
-
111
- attributes = Array(attribute.to_s)
112
- if attributes == ['name']
113
- attributes << 'unofficial_names'
114
- # TODO: Revisit when better data from i18n_data
115
- # attributes << 'translated_names'
116
- end
117
-
118
- [attributes, parse_value(val)]
119
- end
120
-
121
- def searchable_attribute?(attribute)
122
- searchable_attributes.include?(attribute.to_sym)
123
- end
124
-
125
- def searchable_attributes
126
- instance_methods - UNSEARCHABLE_METHODS
127
- end
128
-
129
- def find_by(attribute, value, obj = nil)
130
- find_all_by(attribute.downcase, value).map do |country|
131
- obj.nil? ? country : new(country.last)
132
- end
133
- end
134
-
135
- def parse_value(value)
136
- value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
137
- strip_accents(value)
138
- end
139
-
140
- def subdivision_data(alpha2)
141
- file = subdivision_file_path(alpha2)
142
- File.exist?(file) ? YAML.load_file(file) : {}
143
- end
144
-
145
- def subdivision_file_path(alpha2)
146
- File.join(File.dirname(__FILE__), '..', 'data', 'subdivisions', "#{alpha2}.yaml")
77
+ # Some methods like parse_value are expensive in that they
78
+ # create a large number of objects internally. In order to reduce the
79
+ # object creations and save the GC, we can cache them in an class instance
80
+ # variable. This will make subsequent parses O(1) and will stop the
81
+ # creation of new String object instances.
82
+ #
83
+ # NB: We only want to use this cache for values coming from the JSON
84
+ # file or our own code, caching user-generated data could be dangerous
85
+ # since the cache would continually grow.
86
+ def cached(value)
87
+ @_parsed_values_cache ||= {}
88
+ return @_parsed_values_cache[value] if @_parsed_values_cache[value]
89
+
90
+ @_parsed_values_cache[value] = yield
147
91
  end
148
92
  end
149
93
  end
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'money'
2
4
 
3
5
  module ISO3166
4
- # Optional extension which allows you to get back a Money::Currency object with all the currency info
6
+ # Optional extension which allows you to get back a +Money::Currency+ object with all the currency info.
7
+ # This requires enabling the integration with the {Money}[https://github.com/RubyMoney/money] gem (See {ISO3166::Configuration#enable_currency_extension!})
5
8
  module CountryCurrencyMethods
9
+
10
+ # @return [Money::Currency] The currency data for this Country's +currency_code+
6
11
  def currency
7
12
  Money::Currency.find(data['currency_code'])
8
13
  end
@@ -1,5 +1,4 @@
1
- #!/bin/env ruby
2
- # encoding: utf-8
1
+ # frozen_string_literal: true
3
2
 
4
3
  module ISO3166
5
4
  module Emoji
@@ -32,8 +31,11 @@ module ISO3166
32
31
  'z' => '🇿'
33
32
  }.freeze
34
33
 
34
+ # @return [String] the emoji flag for this country
35
+ #
36
+ # The emoji flag for this country, using Unicode Regional Indicator characters. e.g: "U+1F1FA U+1F1F8" for 🇺🇸
35
37
  def emoji_flag
36
- alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join('')
38
+ alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join
37
39
  end
38
40
  end
39
41
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ISO3166
4
+ module CountryFinderMethods
5
+ FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/.freeze
6
+ SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/.freeze
7
+
8
+ def search(query)
9
+ country = new(query.to_s.upcase)
10
+ country&.valid? ? country : nil
11
+ end
12
+
13
+ def [](query)
14
+ search(query)
15
+ end
16
+
17
+ def find_all_by(attribute, val)
18
+ attributes, lookup_value = parse_attributes(attribute, val)
19
+
20
+ ISO3166::Data.cache.select do |_, v|
21
+ country = Country.new(v)
22
+ attributes.any? do |attr|
23
+ Array(country.send(attr)).any? do |n|
24
+ lookup_value === cached(n) { parse_value(n) }
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ def method_missing(method_name, *arguments)
31
+ matches = method_name.to_s.match(FIND_BY_REGEX)
32
+ return_all = matches[1]
33
+ super unless matches
34
+
35
+ countries = find_by(matches[3], arguments[0], matches[2])
36
+ return_all ? countries : countries.last
37
+ end
38
+
39
+ def respond_to_missing?(method_name, include_private = false)
40
+ matches = method_name.to_s.match(FIND_BY_REGEX)
41
+ if matches && matches[3]
42
+ instance_methods.include?(matches[3].to_sym)
43
+ else
44
+ super
45
+ end
46
+ end
47
+
48
+ protected
49
+
50
+ def find_by(attribute, value, obj = nil)
51
+ find_all_by(attribute.downcase, value).map do |country|
52
+ obj.nil? ? country : new(country.last)
53
+ end
54
+ end
55
+
56
+ def parse_attributes(attribute, val)
57
+ raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
58
+
59
+ attributes = Array(attribute.to_s)
60
+ if attribute.to_s == 'any_name'
61
+ attributes = %w[iso_long_name iso_short_name unofficial_names translated_names]
62
+ end
63
+
64
+ [attributes, parse_value(val)]
65
+ end
66
+
67
+ def parse_value(value)
68
+ value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
69
+ strip_accents(value)
70
+ end
71
+
72
+ def searchable_attribute?(attribute)
73
+ searchable_attributes.include?(attribute.to_sym)
74
+ end
75
+
76
+ def searchable_attributes
77
+ # Add name and names until we complete the deprecation of the finders
78
+ instance_methods - UNSEARCHABLE_METHODS + [:name, :names, :any_name]
79
+ end
80
+ end
81
+ end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class Country
3
5
  extend CountryClassMethods
6
+ extend CountryFinderMethods
4
7
  include Emoji
5
8
  attr_reader :data
6
9
 
@@ -28,8 +31,8 @@ module ISO3166
28
31
  alias zip postal_code
29
32
  alias zip? postal_code
30
33
  alias postal_code? postal_code
34
+ alias zip_format postal_code_format
31
35
  alias languages languages_official
32
- alias names unofficial_names
33
36
 
34
37
  def ==(other)
35
38
  other.respond_to?(:alpha2) && other.alpha2 == alpha2
@@ -47,49 +50,93 @@ module ISO3166
47
50
  to_s <=> other.to_s
48
51
  end
49
52
 
50
- def start_of_week
51
- data['start_of_week']
52
- end
53
-
53
+ # +true+ if this Country has any Subdivisions.
54
54
  def subdivisions?
55
55
  !subdivisions.empty?
56
56
  end
57
57
 
58
+ # @return [Array<ISO3166::Subdivision>] the list of subdivisions for this Country.
58
59
  def subdivisions
59
60
  @subdivisions ||= if data['subdivisions']
60
- self.class.create_subdivisions(data['subdivisions'])
61
+ ISO3166::Data.create_subdivisions(data['subdivisions'])
61
62
  else
62
- self.class.subdivisions(alpha2)
63
+ ISO3166::Data.subdivisions(alpha2)
63
64
  end
64
65
  end
65
66
 
67
+ # @param types [Array<String>] The locale to use for translations.
68
+ # @return [Array<ISO3166::Subdivision>] the list of subdivisions of the given type(s) for this Country.
69
+ def subdivisions_of_types(types)
70
+ subdivisions.select{|k,v| types.include?(v.type)}
71
+ end
72
+
73
+ # @return [Array<String>] the list of subdivision types for this country
74
+ def subdivision_types
75
+ subdivisions.map{|k,v| v['type']}.uniq
76
+ end
77
+
78
+ # @return [Array<String>] the list of humanized subdivision types for this country. Uses ActiveSupport's `#humanize` if available
79
+ def humanized_subdivision_types
80
+ if String.instance_methods.include?(:humanize)
81
+ subdivisions.map{|k,v| v['type'].humanize}.uniq
82
+ else
83
+ subdivisions.map{|k,v| v['type'][0].upcase + v['type'].tr('_', ' ')[1..-1]}.uniq
84
+ end
85
+ end
86
+
87
+ # @param locale [String] The locale to use for translations.
88
+ # @return [Array<Array>] This Country's subdivision pairs of names and codes.
66
89
  def subdivision_names_with_codes(locale = 'en')
67
90
  subdivisions.map { |k, v| [v.translations[locale] || v.name, k] }
68
91
  end
69
92
 
70
- alias states subdivisions
93
+ def states
94
+ if RUBY_VERSION =~ /^3\.\d\.\d/
95
+ warn "DEPRECATION WARNING: The Country#states method has been deprecated and will be removed in 6.0. Please use Country#subdivisions instead.", uplevel: 1, category: :deprecated
96
+ else
97
+ warn "DEPRECATION WARNING: The Country#states method has been deprecated and will be removed in 6.0. Please use Country#subdivisions instead.", uplevel: 1
98
+ end
71
99
 
100
+ subdivisions
101
+ end
102
+
103
+ # +true+ if this country is a member of the European Union.
72
104
  def in_eu?
73
105
  data['eu_member'].nil? ? false : data['eu_member']
74
106
  end
75
107
 
108
+ # +true+ if this country is a member of the European Economic Area.
76
109
  def in_eea?
77
110
  data['eea_member'].nil? ? false : data['eea_member']
78
111
  end
79
112
 
113
+ # +true+ if this country is a member of the European Single Market.
114
+ def in_esm?
115
+ data['esm_member'].nil? ? in_eea? : data['esm_member']
116
+ end
117
+
80
118
  def to_s
81
- data['name']
119
+ data['iso_short_name']
82
120
  end
83
121
 
122
+ # @return [Array<String>] the list of names for this Country in all loaded locales.
84
123
  def translated_names
85
- data['translations'].values
124
+ data['translations'].values.compact
86
125
  end
87
126
 
127
+ # @param locale [String] The locale to use for translations.
128
+ # @return [String] the name of this Country in the selected locale.
88
129
  def translation(locale = 'en')
89
130
  data['translations'][locale.to_s.downcase]
90
131
  end
91
132
 
92
- # TODO: Looping through locale langs could be be very slow across multiple countries
133
+ # @return [String] the “common name” of this Country in English.
134
+ def common_name
135
+ ISO3166.configuration.locales = ISO3166.configuration.locales.append(:en).uniq
136
+ translation('en')
137
+ end
138
+
139
+ # @return [Array<String>] TThe list of names for this Country, in this Country's locales.
93
140
  def local_names
94
141
  ISO3166.configuration.locales = (ISO3166.configuration.locales + languages.map(&:to_sym)).uniq
95
142
  reload
@@ -97,10 +144,97 @@ module ISO3166
97
144
  @local_names ||= languages.map { |language| translations[language] }
98
145
  end
99
146
 
147
+ # @return [String] The name for this Country, in this Country's locale.
100
148
  def local_name
101
149
  @local_name ||= local_names.first
102
150
  end
103
151
 
152
+ # @!attribute alpha2
153
+ # @return [String] the ISO3166 alpha-2 code for this Country
154
+ #
155
+ # @!attribute alpha3
156
+ # @return [String] the ISO3166 alpha-3 code for this Country
157
+ #
158
+ # @!attribute address_format
159
+ # @return [String] a template for formatting addresses in this Country.
160
+ #
161
+ # @!attribute continent
162
+ # @return [String] the continent for this Country
163
+ #
164
+ # @!attribute country_code
165
+ # @return [String] the country calling code for this Country
166
+ #
167
+ # @!attribute currency_code
168
+ # @return [String] the ISO 4217 currency code for this Country
169
+ #
170
+ # @!attribute gec
171
+ # @return [String] the "Geopolitical Entities and Codes", formerly FIPS 10-4 code for this Country
172
+ #
173
+ # @!attribute geo
174
+ # @return [Hash] the hash of coordinates for this Country.
175
+ #
176
+ # @!attribute international_prefix
177
+ # @return [String] the phone prefix used in this Country for dialing international numbers
178
+ #
179
+ # @!attribute ioc
180
+ # @return [String] The International Olympic Committee code for for this Country
181
+ #
182
+ # @!attribute national_destination_code_lengths
183
+ # @return [Array<Integer>] Lengths of phone number destination codes
184
+ #
185
+ # @!attribute national_number_lengths
186
+ # @return [Array<Integer>] Lengths of phone numbers
187
+ #
188
+ # @!attribute national_prefix
189
+ # @return [String] the phone prefix used in this Country for dialing national numbers
190
+ #
191
+ # @!attribute nanp_prefix
192
+ # @return [String] the NANP prefix code
193
+ #
194
+ # @!attribute nationality
195
+ # @return [String] the nationality for this Country, in English
196
+ #
197
+ # @!attribute number
198
+ # @return [String] The ISO 3166-1 numeric code for this Country
199
+ #
200
+ # @!attribute languages_official
201
+ # @return [Array<String>] the list of official languages (locale codes) for this Country
202
+ #
203
+ # @!attribute languages_spoken
204
+ # @return [Array<String>] the list of spoken languages (locale codes) for this Country
205
+ #
206
+ # @!attribute translations
207
+ # @return [Hash] The hash of country name translations for this Country.
208
+ #
209
+ # @!attribute postal_code
210
+ # @return [Boolean] Does this Country uses postal codes in addresses
211
+ #
212
+ # @!attribute postal_code_format
213
+ # @return [String] The regex for valid postal codes in this Country
214
+ #
215
+ # @!attribute region
216
+ # @return [String] The Region this country is in. Approximately matches the United Nations geoscheme
217
+ #
218
+ # @!attribute unofficial_names
219
+ # @return [Array<String>] Array of unofficial, slang names or aliases for this Country
220
+ #
221
+ # @!attribute start_of_week
222
+ # @return [String] The starting day of the week ( +'monday'+ or +'sunday'+ )
223
+ #
224
+ # @!attribute subregion
225
+ # @return [String] The Subegion this country is in. Approximately matches the United Nations geoscheme's Subregions
226
+ #
227
+ # @!attribute un_locode
228
+ # @return [String] The UN/LOCODE prefix for this Country
229
+ #
230
+ # @!attribute vat_rates
231
+ # @return [Hash] the hash of VAT Rates for this Country
232
+ #
233
+ # @!attribute world_region
234
+ # @return [String] The "World Region" this country is in: +"AMER"+ , +"APAC"+ or +"EMEA"+
235
+
236
+ private
237
+
104
238
  def reload
105
239
  @data = if @country_data_or_code.is_a?(Hash)
106
240
  @country_data_or_code