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
data/spec/country_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'spec_helper'
4
4
  NUM_OF_COUNTRIES = 249
@@ -43,12 +43,16 @@ describe ISO3166::Country do
43
43
  expect(country.alpha3).to eq('USA')
44
44
  end
45
45
 
46
- it 'should return 3166 name' do
47
- expect(country.name).to eq('United States of America')
46
+ it 'should return 3166 iso_short_name' do
47
+ expect(country.iso_short_name).to eq('United States of America')
48
48
  end
49
49
 
50
50
  it 'should return alternate names' do
51
- expect(country.names).to eq(['United States', 'Vereinigte Staaten von Amerika', 'États-Unis', 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
51
+ expect(country.unofficial_names).to eq(["United States", "USA",
52
+ "Vereinigte Staaten von Amerika",
53
+ "États-Unis", "Estados Unidos",
54
+ "アメリカ合衆国", "Verenigde Staten",
55
+ "Соединенные Штаты Америки"])
52
56
  end
53
57
 
54
58
  it 'should return translations' do
@@ -65,15 +69,7 @@ describe ISO3166::Country do
65
69
  end
66
70
 
67
71
  it 'should return bounds' do
68
- expect(country.bounds['northeast']['lat']).to eq(71.5388001)
69
- end
70
-
71
- it 'should return the decimal Latitude' do
72
- expect(country.latitude_dec).to eq('39.44325637817383')
73
- end
74
-
75
- it 'should return the decimal Longitude' do
76
- expect(country.longitude_dec).to eq('-98.95733642578125')
72
+ expect(country.bounds['northeast']['lat']).to eq(71.3577635769)
77
73
  end
78
74
 
79
75
  it 'should return continent' do
@@ -85,8 +81,18 @@ describe ISO3166::Country do
85
81
  end
86
82
 
87
83
  it 'knows when a country does not require postal codes' do
88
- ireland = ISO3166::Country.search('IE')
89
- expect(ireland.postal_code).to eq(false)
84
+ antarctica = ISO3166::Country.search('AQ')
85
+ expect(antarctica.postal_code).to eq(false)
86
+ end
87
+
88
+ it 'knows about the country postal code format' do
89
+ expect(country.postal_code_format).to_not be_nil
90
+
91
+ regex = Regexp.new(country.postal_code_format)
92
+ expect(regex).to match('12345-6789')
93
+
94
+ antarctica = ISO3166::Country.search('AQ')
95
+ expect(antarctica.postal_code_format).to be_nil
90
96
  end
91
97
 
92
98
  it 'should return region' do
@@ -101,12 +107,20 @@ describe ISO3166::Country do
101
107
  expect(country.world_region).to eq('AMER')
102
108
  end
103
109
 
104
- context 'with Turkey' do
110
+ context 'with Türkiye' do
105
111
  let(:country) { ISO3166::Country.search('TR') }
106
112
 
107
113
  it 'should indicate EMEA as the world region' do
108
114
  expect(country.world_region).to eq('EMEA')
109
115
  end
116
+
117
+ it 'has iso_short_name Türkiye' do
118
+ expect(country.iso_short_name).to eq('Türkiye')
119
+ end
120
+
121
+ it 'has iso_long_name Republic of Türkiye' do
122
+ expect(country.iso_long_name).to eq('The Republic of Türkiye')
123
+ end
110
124
  end
111
125
 
112
126
  context 'with Japan' do
@@ -121,7 +135,7 @@ describe ISO3166::Country do
121
135
  let(:country) { ISO3166::Country.search('BE') }
122
136
 
123
137
  it 'should return its local names based on its languages' do
124
- expect(country.local_names).to match_array(%w(België Belgique Belgien))
138
+ expect(country.local_names).to match_array(%w[België Belgique Belgien])
125
139
  end
126
140
 
127
141
  it 'should return its first local name' do
@@ -134,7 +148,7 @@ describe ISO3166::Country do
134
148
  before do
135
149
  ISO3166::Data.register(
136
150
  alpha2: 'BR2',
137
- name: 'Brazil',
151
+ iso_short_name: 'Brazil',
138
152
  languages_official: %w(pt-BR),
139
153
  translations: {
140
154
  'pt-BR' => 'Translation for pt-BR',
@@ -158,7 +172,7 @@ describe ISO3166::Country do
158
172
  before do
159
173
  ISO3166::Data.register(
160
174
  alpha2: 'BR2',
161
- name: 'Brazil',
175
+ iso_short_name: 'Brazil',
162
176
  languages_official: %w(pt-BR),
163
177
  translations: {
164
178
  'pt' => 'Translation for pt'
@@ -217,17 +231,17 @@ describe ISO3166::Country do
217
231
  end
218
232
 
219
233
  describe 'subdivisions' do
220
- let(:virginia) { country.states['VA'] }
234
+ let(:virginia) { country.subdivisions['VA'] }
221
235
  it 'should return an empty hash for a country with no ISO3166-2' do
222
236
  expect(ISO3166::Country.search('VA').subdivisions.size).to eq(0)
223
237
  end
224
238
 
225
239
  it 'should return a hash with all sub divisions' do
226
- expect(country.subdivisions.size).to eq(60)
240
+ expect(country.subdivisions.size).to eq(57)
227
241
  end
228
242
 
229
- it 'should be available through states' do
230
- expect(country.states.size).to eq(60)
243
+ it '#states should be deprecated' do
244
+ expect {country.states}.to output.to_stderr
231
245
  end
232
246
 
233
247
  it 'should be a subdivision object' do
@@ -238,11 +252,69 @@ describe ISO3166::Country do
238
252
  expect(virginia.name).to eq('Virginia')
239
253
  end
240
254
 
255
+ it 'should have a code' do
256
+ expect(virginia.code).to eq('VA')
257
+ end
258
+
241
259
  it 'should behave like a hash' do
242
260
  expect(virginia['name']).to eq('Virginia')
243
261
  end
244
262
  end
245
263
 
264
+ describe 'subdivision_types' do
265
+ it "should return an array of subdivision types" do
266
+ expect(country.subdivision_types).to contain_exactly('district', 'state', 'outlying_area')
267
+ end
268
+
269
+ it "should return an array of subdivision types even if there is only a single type" do
270
+ expect(ISO3166::Country['LI'].subdivision_types).to contain_exactly('commune')
271
+ end
272
+
273
+ it "should return an empty array if country has no subdivisions" do
274
+ expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
275
+ expect(ISO3166::Country['AS'].subdivision_types).to eq([])
276
+ end
277
+ end
278
+
279
+ describe 'subdivisions_of_types' do
280
+ it "given a single type, should return an array of subdivisions that match the type" do
281
+ us_states = country.subdivisions_of_types(%w[state])
282
+ expect(us_states.size).to eq(50)
283
+ dc = country.subdivisions_of_types(%w[district])
284
+ expect(dc.size).to eq(1)
285
+ end
286
+
287
+ it "given multiple types, should return an array of subdivisions matching the types" do
288
+ us_states_plus_dc = country.subdivisions_of_types(%w[state district])
289
+ expect(us_states_plus_dc.size).to eq(51)
290
+ end
291
+
292
+ it "given multiple types where at least one does not exist for that country, should work without issue" do
293
+ us_states_plus_dc = country.subdivisions_of_types(%w[state district governorate])
294
+ expect(us_states_plus_dc.size).to eq(51)
295
+ end
296
+
297
+ it "given only types that do not exist for that country, should return an empty collection" do
298
+ should_be_empty = ISO3166::Country['PT'].subdivisions_of_types(%w[state county])
299
+ expect(should_be_empty).to be_empty
300
+ end
301
+ end
302
+
303
+ describe 'humanized_subdivision_types' do
304
+ it "should return an array of humanized subdivision types" do
305
+ expect(country.humanized_subdivision_types).to contain_exactly('District', 'State', 'Outlying area')
306
+ end
307
+
308
+ it "should return an array of subdivision types even if there is only a single type" do
309
+ expect(ISO3166::Country['LI'].humanized_subdivision_types).to contain_exactly('Commune')
310
+ end
311
+
312
+ it "should return an empty array if country has no subdivisions" do
313
+ expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
314
+ expect(ISO3166::Country['AS'].humanized_subdivision_types).to eq([])
315
+ end
316
+ end
317
+
246
318
  describe 'subdivision_names_with_codes' do
247
319
  it 'should return an alphabetized list of all subdivisions names with codes' do
248
320
  subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
@@ -253,7 +325,7 @@ describe ISO3166::Country do
253
325
  end
254
326
 
255
327
  it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
256
- ISO3166.configuration.locales = [:es, :de, :en]
328
+ ISO3166.configuration.locales = %i[es de en]
257
329
 
258
330
  subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes(:es)
259
331
  expect(subdivisions).to be_an(Array)
@@ -309,7 +381,7 @@ describe ISO3166::Country do
309
381
  end
310
382
 
311
383
  it 'should allow to customize each country representation passing a block to the method' do
312
- countries = ISO3166::Country.all { |country, data| [data['name'], country, data['country_code']] }
384
+ countries = ISO3166::Country.all { |country, data| [data['iso_short_name'], country, data['country_code']] }
313
385
  expect(countries).to be_an(Array)
314
386
  expect(countries.first).to be_an(Array)
315
387
  expect(countries.first.size).to eq(3)
@@ -322,7 +394,7 @@ describe ISO3166::Country do
322
394
  countries = ISO3166::Country.all_translated('fr')
323
395
  expect(countries).to be_an(Array)
324
396
  expect(countries.first).to be_a(String)
325
- expect(countries.first).to eq('Afghanistan')
397
+ expect(countries.first).to eq('Andorre')
326
398
  # countries missing the desired locale will not be added to the list
327
399
  # so all 250 countries may not be returned, 'fr' returns 249, for example
328
400
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -332,9 +404,29 @@ describe ISO3166::Country do
332
404
  countries = ISO3166::Country.all_translated
333
405
  expect(countries).to be_an(Array)
334
406
  expect(countries.first).to be_a(String)
335
- expect(countries.first).to eq('Afghanistan')
407
+ expect(countries.first).to eq('Andorra')
336
408
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
337
409
  end
410
+
411
+ context 'with custom countries' do
412
+ before do
413
+ ISO3166::Data.register(
414
+ alpha2: 'XX',
415
+ iso_short_name: 'Custom Country',
416
+ translations: { 'en' => 'Custom Country' }
417
+ )
418
+ end
419
+
420
+ it 'should include custom registered countries' do
421
+ custom_country = ISO3166::Country.find_by_alpha2('XX')[1]
422
+ countries = ISO3166::Country.all_translated
423
+ expect(countries).to include(custom_country['iso_short_name'])
424
+ end
425
+
426
+ after do
427
+ ISO3166::Data.unregister('XX')
428
+ end
429
+ end
338
430
  end
339
431
 
340
432
  describe 'all_names_with_codes' do
@@ -345,11 +437,11 @@ describe ISO3166::Country do
345
437
  expect(countries.first[0]).to be_a(String)
346
438
  expect(countries.first[0]).to eq('Afghanistan')
347
439
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
348
- expect(countries.any?{|pair| !pair[0].html_safe?}).to eq(false)
440
+ expect(countries.any? { |pair| !pair[0].html_safe? }).to eq(false)
349
441
  end
350
442
 
351
443
  it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
352
- ISO3166.configuration.locales = [:es, :de, :en]
444
+ ISO3166.configuration.locales = %i[es de en]
353
445
 
354
446
  countries = ISO3166::Country.all_names_with_codes(:es)
355
447
  expect(countries).to be_an(Array)
@@ -369,7 +461,7 @@ describe ISO3166::Country do
369
461
  end
370
462
 
371
463
  it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
372
- ISO3166.configuration.locales = [:es, :de, :en]
464
+ ISO3166.configuration.locales = %i[es de en]
373
465
 
374
466
  countries = ISO3166::Country.all_names_with_codes(:es)
375
467
  expect(countries).to be_an(Array)
@@ -381,7 +473,7 @@ describe ISO3166::Country do
381
473
 
382
474
  describe 'translation' do
383
475
  it 'should return the localized name for a country to the selected locale' do
384
- ISO3166.configuration.locales = [:es, :de, :en]
476
+ ISO3166.configuration.locales = %i[es de en]
385
477
  countries = ISO3166::Country.new(:de).translation('de')
386
478
  expect(countries).to be_an(String)
387
479
  expect(countries).to eq('Deutschland')
@@ -397,14 +489,31 @@ describe ISO3166::Country do
397
489
  countries = ISO3166::Country.new(:de).translation('xxx')
398
490
  expect(countries).to be_nil
399
491
  end
492
+
493
+ context 'should return variant locales' do
494
+ it 'should return different value for Chinese variants' do
495
+ ISO3166.configuration.locales = %i[zh-cn zh-hk zh-tw]
496
+ name_cn = ISO3166::Country['TW'].translation('zh-cn')
497
+ name_hk = ISO3166::Country['TW'].translation('zh-hk')
498
+ name_tw = ISO3166::Country['TW'].translation('zh-tw')
499
+ expect([name_cn, name_hk, name_tw].uniq.size).to eql 3
500
+ end
501
+
502
+ it 'should return different value for Portuguese variants' do
503
+ ISO3166.configuration.locales = %i[pt pt-br]
504
+ name_pt = ISO3166::Country['SG'].translation('pt')
505
+ name_br = ISO3166::Country['SG'].translation('pt-br')
506
+ expect([name_pt, name_br].uniq.size).to eql 2
507
+ end
508
+ end
400
509
  end
401
510
 
402
511
  describe 'translations' do
403
512
  it 'should return an hash of all country names translated to the selected locale' do
404
513
  countries = ISO3166::Country.translations('fr')
405
514
  expect(countries).to be_an(Hash)
406
- expect(countries.first[0]).to eq('AF')
407
- expect(countries.first).to eq(%w(AF Afghanistan))
515
+ expect(countries.first[0]).to eq('AD')
516
+ expect(countries.first).to eq(%w[AD Andorre])
408
517
  # countries missing the desired locale will not be added to the list
409
518
  # so all 250 countries may not be returned, 'fr' returns 249, for example
410
519
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -413,8 +522,8 @@ describe ISO3166::Country do
413
522
  it 'should return an hash of all country names in English if no locale is passed' do
414
523
  countries = ISO3166::Country.translations
415
524
  expect(countries).to be_an(Hash)
416
- expect(countries.first[0]).to eq('AF')
417
- expect(countries.first).to eq(%w(AF Afghanistan))
525
+ expect(countries.first[0]).to eq('AD')
526
+ expect(countries.first).to eq(%w[AD Andorra])
418
527
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
419
528
  end
420
529
  end
@@ -498,29 +607,42 @@ describe ISO3166::Country do
498
607
  end
499
608
 
500
609
  it 'also performs searches with regexps and forces it to ignore case' do
501
- spain_data = ISO3166::Country.find_all_by(:names, /Españ/)
610
+ spain_data = ISO3166::Country.find_all_by(:unofficial_names, /Españ/)
502
611
  expect(spain_data).to be_a Hash
503
612
  expect(spain_data.keys).to eq(['ES'])
504
613
  end
614
+
615
+ it 'performs reasonably' do
616
+ start = Time.now
617
+ 250.times do
618
+ lookup = ['ZM', 'ZMB', 'Zambia', 'US', 'USA', 'United States'].sample
619
+ case lookup.length
620
+ when 2 then ISO3166::Country.find_all_by(:alpha2, lookup)
621
+ when 3 then ISO3166::Country.find_all_by(:alpha3, lookup)
622
+ else ISO3166::Country.find_all_by(:iso_short_name, lookup)
623
+ end
624
+ end
625
+ expect(Time.now - start).to be < 1
626
+ end
505
627
  end
506
628
 
507
629
  describe 'hash finder methods' do
508
- context "when search name in 'name'" do
509
- subject { ISO3166::Country.find_by_name('Poland') }
630
+ context "when search name in 'iso_short_name'" do
631
+ subject { ISO3166::Country.find_by_iso_short_name('Poland') }
510
632
  it 'should return' do
511
633
  expect(subject.first).to eq('PL')
512
634
  end
513
635
  end
514
636
 
515
- context "when search lowercase name in 'name'" do
516
- subject { ISO3166::Country.find_by_name('poland') }
637
+ context "when search lowercase name in 'iso_short_name'" do
638
+ subject { ISO3166::Country.find_by_iso_short_name('poland') }
517
639
  it 'should return' do
518
640
  expect(subject.first).to eq('PL')
519
641
  end
520
642
  end
521
643
 
522
- context "when search name with comma in 'name'" do
523
- subject { ISO3166::Country.find_by_name(country_name) }
644
+ context "when search name with comma in 'iso_short_name'" do
645
+ subject { ISO3166::Country.find_by_iso_short_name(country_name) }
524
646
 
525
647
  context 'with Republic of Korea' do
526
648
  let(:country_name) { 'Korea, Republic of' }
@@ -545,7 +667,7 @@ describe ISO3166::Country do
545
667
  end
546
668
 
547
669
  context 'when search lowercase multibyte name found' do
548
- subject { ISO3166::Country.find_country_by_name('россия') }
670
+ subject { ISO3166::Country.find_country_by_unofficial_names('россия') }
549
671
 
550
672
  it 'should be a country instance' do
551
673
  expect(subject).to be_a(ISO3166::Country)
@@ -554,7 +676,7 @@ describe ISO3166::Country do
554
676
  end
555
677
 
556
678
  context 'when search lowercase multibyte name found' do
557
- subject { ISO3166::Country.find_country_by_name(/россия/) }
679
+ subject { ISO3166::Country.find_country_by_unofficial_names(/россия/) }
558
680
 
559
681
  it 'should be a country instance' do
560
682
  expect(subject).to be_a(ISO3166::Country)
@@ -563,7 +685,7 @@ describe ISO3166::Country do
563
685
  end
564
686
 
565
687
  context 'when accents are not used' do
566
- subject { ISO3166::Country.find_country_by_name('emirats Arabes Unis') }
688
+ subject { ISO3166::Country.find_country_by_unofficial_names('emirats Arabes Unis') }
567
689
 
568
690
  it 'should be a country instance' do
569
691
  expect(subject).to be_a(ISO3166::Country)
@@ -571,8 +693,20 @@ describe ISO3166::Country do
571
693
  end
572
694
  end
573
695
 
574
- context "when search name in 'names'" do
575
- subject { ISO3166::Country.find_by_name('Polonia') }
696
+ context "when search name in 'unofficial_names'" do
697
+ subject { ISO3166::Country.find_by_unofficial_names('Polonia') }
698
+ it 'should return' do
699
+ expect(subject.first).to eq('PL')
700
+ end
701
+ end
702
+
703
+ context "when search name in 'translated_names'" do
704
+ before do
705
+ ISO3166.configure do |config|
706
+ config.locales = [:bs]
707
+ end
708
+ end
709
+ subject { ISO3166::Country.find_by_translated_names('Poljska') }
576
710
  it 'should return' do
577
711
  expect(subject.first).to eq('PL')
578
712
  end
@@ -580,7 +714,9 @@ describe ISO3166::Country do
580
714
 
581
715
  context 'when finding by invalid attribute' do
582
716
  it 'should raise an error' do
583
- expect { ISO3166::Country.find_by_invalid('invalid') }.to raise_error(RuntimeError, "Invalid attribute name 'invalid'")
717
+ expect { ISO3166::Country.find_by_invalid('invalid') }.to(
718
+ raise_error(RuntimeError, "Invalid attribute name 'invalid'")
719
+ )
584
720
  end
585
721
  end
586
722
 
@@ -605,7 +741,7 @@ describe ISO3166::Country do
605
741
 
606
742
  describe 'country finder methods' do
607
743
  context 'when search name found' do
608
- let(:uk) { ISO3166::Country.find_country_by_name('United Kingdom') }
744
+ let(:uk) { ISO3166::Country.find_country_by_unofficial_names('United Kingdom') }
609
745
 
610
746
  it 'should be a country instance' do
611
747
  expect(uk).to be_a(ISO3166::Country)
@@ -614,7 +750,7 @@ describe ISO3166::Country do
614
750
  end
615
751
 
616
752
  context 'when search lowercase name found' do
617
- let(:uk) { ISO3166::Country.find_country_by_name('united kingdom') }
753
+ let(:uk) { ISO3166::Country.find_country_by_unofficial_names('united kingdom') }
618
754
 
619
755
  it 'should be a country instance' do
620
756
  expect(uk).to be_a(ISO3166::Country)
@@ -623,7 +759,7 @@ describe ISO3166::Country do
623
759
  end
624
760
 
625
761
  context 'when the search term contains comma' do
626
- let(:korea) { ISO3166::Country.find_country_by_name('Korea, Republic of') }
762
+ let(:korea) { ISO3166::Country.find_country_by_unofficial_names('Korea, Republic of') }
627
763
 
628
764
  it 'should be a country instance' do
629
765
  expect(korea).to be_a(ISO3166::Country)
@@ -645,15 +781,88 @@ describe ISO3166::Country do
645
781
  end
646
782
  end
647
783
 
648
- context 'regression test for #388' do
649
- let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
784
+ describe '#find_country_by_any_name' do
785
+ context 'when search name found' do
786
+ let(:uk) { ISO3166::Country.find_country_by_any_name('United Kingdom') }
787
+
788
+ it 'should be a country instance' do
789
+ expect(uk).to be_a(ISO3166::Country)
790
+ expect(uk.alpha2).to eq('GB')
791
+ end
792
+ end
793
+
794
+ context 'when search lowercase name found' do
795
+ let(:uk) { ISO3166::Country.find_country_by_any_name('united kingdom') }
796
+
797
+ it 'should be a country instance' do
798
+ expect(uk).to be_a(ISO3166::Country)
799
+ expect(uk.alpha2).to eq('GB')
800
+ end
801
+ end
802
+
803
+ context 'when the search term contains comma' do
804
+ let(:korea) { ISO3166::Country.find_country_by_any_name('Korea, Republic of') }
805
+
806
+ it 'should be a country instance' do
807
+ expect(korea).to be_a(ISO3166::Country)
808
+ expect(korea.alpha2).to eq('KR')
809
+ end
810
+ end
811
+
812
+ context 'when search translation found' do
813
+ before do
814
+ ISO3166.configure do |config|
815
+ config.locales = [:bs]
816
+ end
817
+ end
818
+ let(:uk) { ISO3166::Country.find_country_by_any_name('Velika Britanija') }
819
+
820
+ it 'should be a country instance' do
821
+ expect(uk).to be_a(ISO3166::Country)
822
+ expect(uk.alpha2).to eq('GB')
823
+ end
824
+ end
825
+ end
826
+
827
+ context 'sanity check for #771' do
828
+ let(:turkey) { ISO3166::Country.find_country_by_any_name('Turkey') }
650
829
 
651
830
  it 'should be a country instance' do
831
+ expect(turkey).to be_a(ISO3166::Country)
832
+ expect(turkey.alpha2).to eq('TR')
833
+ end
834
+ end
835
+
836
+ context 'regression test for #746' do
837
+ let(:no_country) { ISO3166::Country.find_country_by_any_name(nil) }
838
+
839
+ it 'should not be a country instance' do
652
840
  expect(no_country).to_not be_a(ISO3166::Country)
653
841
  expect(no_country).to eq nil
654
842
  end
655
843
  end
656
844
 
845
+ context 'regression test for #388/#746/#776' do
846
+ before do
847
+ ISO3166.configure do |config|
848
+ config.locales = [:af, :am, :ar, :as, :az, :be, :bg, :bn, :br, :bs, :ca, :cs, :cy, :da, :de, :dz, :el, :en, :eo, :es, :et, :eu, :fa, :fi, :fo, :fr, :ga, :gl, :gu, :he, :hi, :hr, :hu, :hy, :ia, :id, :is, :it, :ja, :ka, :kk, :km, :kn, :ko, :ku, :lt, :lv, :mi, :mk, :ml, :mn, :mr, :ms, :mt, :nb, :ne, :nl, :nn, :oc, :or, :pa, :pl, :ps, :pt, :ro, :ru, :rw, :si, :sk, :sl, :so, :sq, :sr, :sv, :sw, :ta, :te, :th, :ti, :tk, :tl, :tr, :tt, :ug, :uk, :ve, :vi, :wa, :wo, :xh, :zh, :zu]
849
+ end
850
+ end
851
+
852
+ let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
853
+ let(:zimbabwe) { ISO3166::Country['ZW'] }
854
+
855
+ it 'should not be a country instance' do
856
+ expect(no_country).to_not be_a(ISO3166::Country)
857
+ expect(no_country).to eq nil
858
+ end
859
+
860
+ it 'translated_names should not include nil values' do
861
+ expect(zimbabwe.translation('no')).to be_nil
862
+ expect(zimbabwe.translated_names).not_to include(nil)
863
+ end
864
+ end
865
+
657
866
  context 'when attempting to search by translations hash' do
658
867
  let(:uk) { ISO3166::Country.find_country_by_translations({}) }
659
868
 
@@ -661,8 +870,9 @@ describe ISO3166::Country do
661
870
  expect { uk }.to raise_error(RuntimeError)
662
871
  end
663
872
  end
873
+
664
874
  context 'when search name not found' do
665
- let(:bogus) { ISO3166::Country.find_country_by_name('Does not exist') }
875
+ let(:bogus) { ISO3166::Country.find_country_by_unofficial_names('Does not exist') }
666
876
 
667
877
  it 'should be a country instance' do
668
878
  expect(bogus).to eq(nil)
@@ -671,7 +881,7 @@ describe ISO3166::Country do
671
881
 
672
882
  # Spot checks #243
673
883
  context 'when search name not found' do
674
- let(:belgium) { ISO3166::Country.find_country_by_name('Belgium') }
884
+ let(:belgium) { ISO3166::Country.find_country_by_unofficial_names('Belgium') }
675
885
 
676
886
  it 'should be a country instance' do
677
887
  expect(belgium.alpha2).to eq('BE')
@@ -680,7 +890,7 @@ describe ISO3166::Country do
680
890
 
681
891
  # Spot checks #240
682
892
  context 'when search name not found' do
683
- let(:canada) { ISO3166::Country.find_country_by_name('Canada') }
893
+ let(:canada) { ISO3166::Country.find_country_by_unofficial_names('Canada') }
684
894
 
685
895
  it 'should be a country instance' do
686
896
  expect(canada.alpha2).to eq('CA')
@@ -689,7 +899,7 @@ describe ISO3166::Country do
689
899
 
690
900
  # Spot checks #241
691
901
  context 'when search name not found' do
692
- let(:israel) { ISO3166::Country.find_country_by_name('Israel') }
902
+ let(:israel) { ISO3166::Country.find_country_by_unofficial_names('Israel') }
693
903
 
694
904
  it 'should be a country instance' do
695
905
  expect(israel.alpha2).to eq('IL')
@@ -698,7 +908,7 @@ describe ISO3166::Country do
698
908
 
699
909
  # Spot checks #241
700
910
  context 'when search name not found' do
701
- let(:israel) { ISO3166::Country.find_by_name('Israel') }
911
+ let(:israel) { ISO3166::Country.find_by_iso_short_name('Israel') }
702
912
 
703
913
  it 'should be a country instance' do
704
914
  expect(israel[0]).to eq('IL')
@@ -707,7 +917,7 @@ describe ISO3166::Country do
707
917
 
708
918
  # Spot checks #241
709
919
  context 'when search name not found' do
710
- let(:israel) { ISO3166::Country.find_all_by(:name, 'Israel') }
920
+ let(:israel) { ISO3166::Country.find_all_by(:iso_short_name, 'Israel') }
711
921
 
712
922
  it 'should be a country instance' do
713
923
  expect(israel.size).to eq(1)
@@ -717,8 +927,9 @@ describe ISO3166::Country do
717
927
 
718
928
  context 'when finding by invalid attribute' do
719
929
  it 'should raise an error' do
720
- expect { ISO3166::Country.find_country_by_invalid('invalid') }.to raise_error(RuntimeError,
721
- "Invalid attribute name 'invalid'")
930
+ expect { ISO3166::Country.find_country_by_invalid('invalid') }.to(
931
+ raise_error(RuntimeError, "Invalid attribute name 'invalid'")
932
+ )
722
933
  end
723
934
  end
724
935
 
@@ -740,13 +951,42 @@ describe ISO3166::Country do
740
951
  end
741
952
  end
742
953
 
743
- describe 'names in Data' do
744
- it 'should be unique (to allow .find_by_name work properly)' do
745
- names = ISO3166::Data.cache.map do |_k, v|
746
- [v['name'], v['unofficial_names']].flatten.uniq
747
- end.flatten
954
+ describe 'finder methods respond_to_missing?' do
955
+ subject { ISO3166::Country.respond_to?(method_name) }
956
+ describe 'find_all_by' do
957
+ context 'find by a valid Country attribute' do
958
+ let(:method_name) { :find_all_by_currency }
959
+ it { is_expected.to be true }
960
+ end
748
961
 
749
- expect(names.size).to eq(names.uniq.size)
962
+ context 'find by an invalid attribute' do
963
+ let(:method_name) { :find_all_by_invalid }
964
+ it { is_expected.to be false }
965
+ end
966
+ end
967
+
968
+ describe 'hash finder methods' do
969
+ context 'find by a valid Country attribute' do
970
+ let(:method_name) { :find_by_iso_short_name }
971
+ it { is_expected.to be true }
972
+ end
973
+
974
+ context 'find by an invalid attribute' do
975
+ let(:method_name) { :find_by_invalid }
976
+ it { is_expected.to be false }
977
+ end
978
+ end
979
+
980
+ describe 'country finder methods' do
981
+ context 'find country by a valid Country attribute' do
982
+ let(:method_name) { :find_country_by_alpha3 }
983
+ it { is_expected.to be true }
984
+ end
985
+
986
+ context 'find by an invalid attribute' do
987
+ let(:method_name) { :find_country_by_invalid }
988
+ it { is_expected.to be false }
989
+ end
750
990
  end
751
991
  end
752
992
 
@@ -798,6 +1038,23 @@ describe ISO3166::Country do
798
1038
  end
799
1039
  end
800
1040
 
1041
+ describe 'in_esm?' do
1042
+ let(:netherlands) { ISO3166::Country.search('NL') }
1043
+ let(:switzerland) { ISO3166::Country.search('CH') }
1044
+
1045
+ it 'should return false for countries without esm_member or eea_member flag' do
1046
+ expect(country.in_esm?).to be_falsey
1047
+ end
1048
+
1049
+ it 'should return true for countries with eea_member flag set to true' do
1050
+ expect(netherlands.in_esm?).to be_truthy
1051
+ end
1052
+
1053
+ it 'should return true for countries with esm_member flag set to true' do
1054
+ expect(switzerland.in_esm?).to be_truthy
1055
+ end
1056
+ end
1057
+
801
1058
  describe 'gec' do
802
1059
  it 'should return the country\'s GEC code' do
803
1060
  expect(ISO3166::Country.new('NA').gec).to eql 'WA'
@@ -809,7 +1066,7 @@ describe ISO3166::Country do
809
1066
  end
810
1067
 
811
1068
  describe 'to_s' do
812
- it 'should return the country name' do
1069
+ it 'should return the country iso_short_name' do
813
1070
  expect(ISO3166::Country.new('GB').to_s).to eq('United Kingdom of Great Britain and Northern Ireland')
814
1071
  end
815
1072
  end
@@ -823,7 +1080,7 @@ describe ISO3166::Country do
823
1080
 
824
1081
  it 'should contain all keys for vat_rates' do
825
1082
  expect(belgium.vat_rates).to be_a(Hash)
826
- expect(belgium.vat_rates.keys).to eq(%w(standard reduced super_reduced parking))
1083
+ expect(belgium.vat_rates.keys).to eq(%w[standard reduced super_reduced parking])
827
1084
  end
828
1085
 
829
1086
  it 'should return an array of reduced vat rates' do
@@ -850,30 +1107,30 @@ describe ISO3166::Country do
850
1107
 
851
1108
  describe 'Added country names to search by' do
852
1109
  it 'should return country code for Democratic Republic of the Congo' do
853
- expect(ISO3166::Country.find_country_by_name('Democratic Republic of the Congo').alpha2).to eq 'CD'
1110
+ expect(ISO3166::Country.find_country_by_unofficial_names('Democratic Republic of the Congo').alpha2).to eq 'CD'
854
1111
  end
855
1112
  it 'should return country code for Ivory Coast' do
856
- expect(ISO3166::Country.find_country_by_name('Ivory Coast').alpha2).to eq 'CI'
1113
+ expect(ISO3166::Country.find_country_by_unofficial_names('Ivory Coast').alpha2).to eq 'CI'
857
1114
  end
858
1115
  it 'should return Pakistan code for Guinea Bissau' do
859
- expect(ISO3166::Country.find_country_by_name('Guinea Bissau').alpha2).to eq 'GW'
1116
+ expect(ISO3166::Country.find_country_by_unofficial_names('Guinea Bissau').alpha2).to eq 'GW'
860
1117
  end
861
1118
  it 'should return Pakistan code for St Kitts and Nevis' do
862
- expect(ISO3166::Country.find_country_by_name('St Kitts and Nevis').alpha2).to eq 'KN'
1119
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Kitts and Nevis').alpha2).to eq 'KN'
863
1120
  end
864
1121
  it 'should return Pakistan code for St Lucia' do
865
- expect(ISO3166::Country.find_country_by_name('St Lucia').alpha2).to eq 'LC'
866
- expect(ISO3166::Country.find_country_by_name('St. Lucia').alpha2).to eq 'LC'
1122
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Lucia').alpha2).to eq 'LC'
1123
+ expect(ISO3166::Country.find_country_by_unofficial_names('St. Lucia').alpha2).to eq 'LC'
867
1124
  end
868
1125
  it 'should return Pakistan code for Turks and Caicos' do
869
- expect(ISO3166::Country.find_country_by_name('Turks and Caicos').alpha2).to eq 'TC'
1126
+ expect(ISO3166::Country.find_country_by_unofficial_names('Turks and Caicos').alpha2).to eq 'TC'
870
1127
  end
871
1128
  it 'should return Pakistan code for St Vincent Grenadines' do
872
- expect(ISO3166::Country.find_country_by_name('St Vincent Grenadines').alpha2).to eq 'VC'
873
- expect(ISO3166::Country.find_country_by_name('St. Vincent Grenadines').alpha2).to eq 'VC'
1129
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Vincent Grenadines').alpha2).to eq 'VC'
1130
+ expect(ISO3166::Country.find_country_by_unofficial_names('St. Vincent Grenadines').alpha2).to eq 'VC'
874
1131
  end
875
1132
  it 'should return country code for Palestinian Authority' do
876
- expect(ISO3166::Country.find_country_by_name('Palestinian Authority').alpha2).to eq 'PS'
1133
+ expect(ISO3166::Country.find_country_by_unofficial_names('Palestinian Authority').alpha2).to eq 'PS'
877
1134
  end
878
1135
  end
879
1136
 
@@ -891,4 +1148,24 @@ describe ISO3166::Country do
891
1148
  expect(countries.all? { |country| country.un_locode.length == 2 }).to be
892
1149
  end
893
1150
  end
1151
+
1152
+ describe '.pluck' do
1153
+ let(:args) { [] }
1154
+
1155
+ subject { ISO3166::Country.pluck(*args) }
1156
+
1157
+ it 'returns empty arrays' do
1158
+ expect(subject.first).to be_empty
1159
+ expect(subject.last).to be_empty
1160
+ end
1161
+
1162
+ context "when asking for alpha2, alpha3 and iso_short_name" do
1163
+ let(:args) { [:alpha2, :alpha3, :iso_short_name] }
1164
+
1165
+ it 'returns the correct values' do
1166
+ expect(subject.first).to eq(%w[AD AND Andorra])
1167
+ expect(subject.last).to eq(%w[ZW ZWE Zimbabwe])
1168
+ end
1169
+ end
1170
+ end
894
1171
  end