countries 5.0.0 → 5.1.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 (486) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +3 -3
  3. data/CHANGELOG.md +29 -1
  4. data/README.markdown +51 -74
  5. data/Rakefile +15 -21
  6. data/UPGRADE.md +39 -0
  7. data/countries.gemspec +0 -1
  8. data/lib/countries/cache/locales/ab.json +1 -1
  9. data/lib/countries/cache/locales/af.json +1 -1
  10. data/lib/countries/cache/locales/ak.json +1 -1
  11. data/lib/countries/cache/locales/am.json +1 -1
  12. data/lib/countries/cache/locales/an.json +1 -1
  13. data/lib/countries/cache/locales/ar.json +1 -1
  14. data/lib/countries/cache/locales/as.json +1 -1
  15. data/lib/countries/cache/locales/ay.json +1 -1
  16. data/lib/countries/cache/locales/az.json +1 -1
  17. data/lib/countries/cache/locales/ba.json +1 -1
  18. data/lib/countries/cache/locales/be.json +1 -1
  19. data/lib/countries/cache/locales/bg.json +1 -1
  20. data/lib/countries/cache/locales/bi.json +1 -1
  21. data/lib/countries/cache/locales/bn-in.json +1 -1
  22. data/lib/countries/cache/locales/bn.json +1 -1
  23. data/lib/countries/cache/locales/br.json +1 -1
  24. data/lib/countries/cache/locales/bs.json +1 -1
  25. data/lib/countries/cache/locales/ca.json +1 -1
  26. data/lib/countries/cache/locales/ce.json +1 -1
  27. data/lib/countries/cache/locales/ch.json +1 -1
  28. data/lib/countries/cache/locales/cs.json +1 -1
  29. data/lib/countries/cache/locales/cv.json +1 -1
  30. data/lib/countries/cache/locales/cy.json +1 -1
  31. data/lib/countries/cache/locales/da.json +1 -1
  32. data/lib/countries/cache/locales/de.json +1 -1
  33. data/lib/countries/cache/locales/dv.json +1 -1
  34. data/lib/countries/cache/locales/dz.json +1 -1
  35. data/lib/countries/cache/locales/ee.json +1 -1
  36. data/lib/countries/cache/locales/el.json +1 -1
  37. data/lib/countries/cache/locales/en.json +1 -1
  38. data/lib/countries/cache/locales/eo.json +1 -1
  39. data/lib/countries/cache/locales/es.json +1 -1
  40. data/lib/countries/cache/locales/et.json +1 -1
  41. data/lib/countries/cache/locales/eu.json +1 -1
  42. data/lib/countries/cache/locales/fa.json +1 -1
  43. data/lib/countries/cache/locales/ff.json +1 -1
  44. data/lib/countries/cache/locales/fi.json +1 -1
  45. data/lib/countries/cache/locales/fo.json +1 -1
  46. data/lib/countries/cache/locales/fr.json +1 -1
  47. data/lib/countries/cache/locales/fy.json +1 -1
  48. data/lib/countries/cache/locales/ga.json +1 -1
  49. data/lib/countries/cache/locales/gl.json +1 -1
  50. data/lib/countries/cache/locales/gn.json +1 -1
  51. data/lib/countries/cache/locales/gu.json +1 -1
  52. data/lib/countries/cache/locales/gv.json +1 -1
  53. data/lib/countries/cache/locales/ha.json +1 -1
  54. data/lib/countries/cache/locales/he.json +1 -1
  55. data/lib/countries/cache/locales/hi.json +1 -1
  56. data/lib/countries/cache/locales/hr.json +1 -1
  57. data/lib/countries/cache/locales/ht.json +1 -1
  58. data/lib/countries/cache/locales/hu.json +1 -1
  59. data/lib/countries/cache/locales/hy.json +1 -1
  60. data/lib/countries/cache/locales/ia.json +1 -1
  61. data/lib/countries/cache/locales/id.json +1 -1
  62. data/lib/countries/cache/locales/io.json +1 -1
  63. data/lib/countries/cache/locales/is.json +1 -1
  64. data/lib/countries/cache/locales/it.json +1 -1
  65. data/lib/countries/cache/locales/iu.json +1 -1
  66. data/lib/countries/cache/locales/ja.json +1 -1
  67. data/lib/countries/cache/locales/ka.json +1 -1
  68. data/lib/countries/cache/locales/ki.json +1 -1
  69. data/lib/countries/cache/locales/kk.json +1 -1
  70. data/lib/countries/cache/locales/kl.json +1 -1
  71. data/lib/countries/cache/locales/km.json +1 -1
  72. data/lib/countries/cache/locales/kn.json +1 -1
  73. data/lib/countries/cache/locales/ko.json +1 -1
  74. data/lib/countries/cache/locales/kv.json +1 -1
  75. data/lib/countries/cache/locales/kw.json +1 -1
  76. data/lib/countries/cache/locales/ky.json +1 -1
  77. data/lib/countries/cache/locales/lo.json +1 -1
  78. data/lib/countries/cache/locales/lt.json +1 -1
  79. data/lib/countries/cache/locales/lv.json +1 -1
  80. data/lib/countries/cache/locales/mi.json +1 -1
  81. data/lib/countries/cache/locales/mk.json +1 -1
  82. data/lib/countries/cache/locales/ml.json +1 -1
  83. data/lib/countries/cache/locales/mn.json +1 -1
  84. data/lib/countries/cache/locales/mr.json +1 -1
  85. data/lib/countries/cache/locales/ms.json +1 -1
  86. data/lib/countries/cache/locales/mt.json +1 -1
  87. data/lib/countries/cache/locales/my.json +1 -1
  88. data/lib/countries/cache/locales/na.json +1 -1
  89. data/lib/countries/cache/locales/nb.json +1 -1
  90. data/lib/countries/cache/locales/ne.json +1 -1
  91. data/lib/countries/cache/locales/nl.json +1 -1
  92. data/lib/countries/cache/locales/nn.json +1 -1
  93. data/lib/countries/cache/locales/nv.json +1 -1
  94. data/lib/countries/cache/locales/oc.json +1 -1
  95. data/lib/countries/cache/locales/or.json +1 -1
  96. data/lib/countries/cache/locales/pa.json +1 -1
  97. data/lib/countries/cache/locales/pi.json +1 -1
  98. data/lib/countries/cache/locales/pl.json +1 -1
  99. data/lib/countries/cache/locales/ps.json +1 -1
  100. data/lib/countries/cache/locales/pt-br.json +1 -1
  101. data/lib/countries/cache/locales/pt.json +1 -1
  102. data/lib/countries/cache/locales/ro.json +1 -1
  103. data/lib/countries/cache/locales/ru.json +1 -1
  104. data/lib/countries/cache/locales/rw.json +1 -1
  105. data/lib/countries/cache/locales/sc.json +1 -1
  106. data/lib/countries/cache/locales/sd.json +1 -1
  107. data/lib/countries/cache/locales/si.json +1 -1
  108. data/lib/countries/cache/locales/sk.json +1 -1
  109. data/lib/countries/cache/locales/sl.json +1 -1
  110. data/lib/countries/cache/locales/so.json +1 -1
  111. data/lib/countries/cache/locales/sq.json +1 -1
  112. data/lib/countries/cache/locales/sr.json +1 -1
  113. data/lib/countries/cache/locales/sv.json +1 -1
  114. data/lib/countries/cache/locales/sw.json +1 -1
  115. data/lib/countries/cache/locales/ta.json +1 -1
  116. data/lib/countries/cache/locales/te.json +1 -1
  117. data/lib/countries/cache/locales/tg.json +1 -1
  118. data/lib/countries/cache/locales/th.json +1 -1
  119. data/lib/countries/cache/locales/ti.json +1 -1
  120. data/lib/countries/cache/locales/tk.json +1 -1
  121. data/lib/countries/cache/locales/tl.json +1 -1
  122. data/lib/countries/cache/locales/tr.json +1 -1
  123. data/lib/countries/cache/locales/tt.json +1 -1
  124. data/lib/countries/cache/locales/ug.json +1 -1
  125. data/lib/countries/cache/locales/uk.json +1 -1
  126. data/lib/countries/cache/locales/ur.json +1 -1
  127. data/lib/countries/cache/locales/uz.json +1 -1
  128. data/lib/countries/cache/locales/ve.json +1 -1
  129. data/lib/countries/cache/locales/vi.json +1 -1
  130. data/lib/countries/cache/locales/wa.json +1 -1
  131. data/lib/countries/cache/locales/wo.json +1 -1
  132. data/lib/countries/cache/locales/xh.json +1 -1
  133. data/lib/countries/cache/locales/yo.json +1 -1
  134. data/lib/countries/cache/locales/zh-cn.json +1 -1
  135. data/lib/countries/cache/locales/zh-hk.json +1 -1
  136. data/lib/countries/cache/locales/zh-tw.json +1 -1
  137. data/lib/countries/cache/locales/zu.json +1 -1
  138. data/lib/countries/country/class_methods.rb +9 -7
  139. data/lib/countries/country.rb +29 -3
  140. data/lib/countries/data/subdivisions/AD.yaml +14 -7
  141. data/lib/countries/data/subdivisions/AE.yaml +14 -7
  142. data/lib/countries/data/subdivisions/AF.yaml +196 -201
  143. data/lib/countries/data/subdivisions/AG.yaml +16 -22
  144. data/lib/countries/data/subdivisions/AL.yaml +24 -12
  145. data/lib/countries/data/subdivisions/AM.yaml +22 -11
  146. data/lib/countries/data/subdivisions/AO.yaml +36 -18
  147. data/lib/countries/data/subdivisions/AR.yaml +48 -24
  148. data/lib/countries/data/subdivisions/AT.yaml +18 -9
  149. data/lib/countries/data/subdivisions/AU.yaml +16 -8
  150. data/lib/countries/data/subdivisions/AZ.yaml +434 -412
  151. data/lib/countries/data/subdivisions/BA.yaml +75 -223
  152. data/lib/countries/data/subdivisions/BB.yaml +22 -11
  153. data/lib/countries/data/subdivisions/BD.yaml +188 -116
  154. data/lib/countries/data/subdivisions/BE.yaml +174 -161
  155. data/lib/countries/data/subdivisions/BF.yaml +2918 -2860
  156. data/lib/countries/data/subdivisions/BG.yaml +56 -28
  157. data/lib/countries/data/subdivisions/BH.yaml +8 -21
  158. data/lib/countries/data/subdivisions/BI.yaml +176 -157
  159. data/lib/countries/data/subdivisions/BJ.yaml +24 -12
  160. data/lib/countries/data/subdivisions/BN.yaml +8 -4
  161. data/lib/countries/data/subdivisions/BO.yaml +18 -9
  162. data/lib/countries/data/subdivisions/BQ.yaml +6 -3
  163. data/lib/countries/data/subdivisions/BR.yaml +54 -27
  164. data/lib/countries/data/subdivisions/BS.yaml +575 -697
  165. data/lib/countries/data/subdivisions/BT.yaml +40 -20
  166. data/lib/countries/data/subdivisions/BW.yaml +337 -321
  167. data/lib/countries/data/subdivisions/BY.yaml +106 -116
  168. data/lib/countries/data/subdivisions/BZ.yaml +12 -6
  169. data/lib/countries/data/subdivisions/CA.yaml +26 -13
  170. data/lib/countries/data/subdivisions/CD.yaml +488 -525
  171. data/lib/countries/data/subdivisions/CF.yaml +34 -17
  172. data/lib/countries/data/subdivisions/CG.yaml +40 -28
  173. data/lib/countries/data/subdivisions/CH.yaml +52 -26
  174. data/lib/countries/data/subdivisions/CI.yaml +244 -516
  175. data/lib/countries/data/subdivisions/CL.yaml +81 -65
  176. data/lib/countries/data/subdivisions/CM.yaml +20 -10
  177. data/lib/countries/data/subdivisions/CN.yaml +2152 -2084
  178. data/lib/countries/data/subdivisions/CO.yaml +66 -33
  179. data/lib/countries/data/subdivisions/CR.yaml +14 -7
  180. data/lib/countries/data/subdivisions/CU.yaml +32 -16
  181. data/lib/countries/data/subdivisions/CV.yaml +427 -401
  182. data/lib/countries/data/subdivisions/CY.yaml +12 -6
  183. data/lib/countries/data/subdivisions/CZ.yaml +1116 -85
  184. data/lib/countries/data/subdivisions/DE.yaml +32 -16
  185. data/lib/countries/data/subdivisions/DJ.yaml +12 -6
  186. data/lib/countries/data/subdivisions/DK.yaml +25 -17
  187. data/lib/countries/data/subdivisions/DM.yaml +20 -10
  188. data/lib/countries/data/subdivisions/DO.yaml +84 -42
  189. data/lib/countries/data/subdivisions/DZ.yaml +96 -48
  190. data/lib/countries/data/subdivisions/EC.yaml +158 -134
  191. data/lib/countries/data/subdivisions/EE.yaml +501 -334
  192. data/lib/countries/data/subdivisions/EG.yaml +54 -27
  193. data/lib/countries/data/subdivisions/ER.yaml +12 -6
  194. data/lib/countries/data/subdivisions/ES.yaml +1459 -1390
  195. data/lib/countries/data/subdivisions/ET.yaml +22 -11
  196. data/lib/countries/data/subdivisions/FI.yaml +185 -1
  197. data/lib/countries/data/subdivisions/FJ.yaml +443 -424
  198. data/lib/countries/data/subdivisions/FM.yaml +8 -4
  199. data/lib/countries/data/subdivisions/FR.yaml +438 -275
  200. data/lib/countries/data/subdivisions/GA.yaml +18 -9
  201. data/lib/countries/data/subdivisions/GB.yaml +1185 -1708
  202. data/lib/countries/data/subdivisions/GD.yaml +14 -7
  203. data/lib/countries/data/subdivisions/GE.yaml +24 -12
  204. data/lib/countries/data/subdivisions/GH.yaml +114 -155
  205. data/lib/countries/data/subdivisions/GL.yaml +24 -79
  206. data/lib/countries/data/subdivisions/GM.yaml +12 -6
  207. data/lib/countries/data/subdivisions/GN.yaml +444 -403
  208. data/lib/countries/data/subdivisions/GQ.yaml +24 -13
  209. data/lib/countries/data/subdivisions/GR.yaml +114 -73
  210. data/lib/countries/data/subdivisions/GT.yaml +44 -22
  211. data/lib/countries/data/subdivisions/GW.yaml +69 -57
  212. data/lib/countries/data/subdivisions/GY.yaml +20 -10
  213. data/lib/countries/data/subdivisions/HN.yaml +36 -18
  214. data/lib/countries/data/subdivisions/HR.yaml +42 -21
  215. data/lib/countries/data/subdivisions/HT.yaml +73 -63
  216. data/lib/countries/data/subdivisions/HU.yaml +106 -63
  217. data/lib/countries/data/subdivisions/ID.yaml +229 -188
  218. data/lib/countries/data/subdivisions/IE.yaml +128 -97
  219. data/lib/countries/data/subdivisions/IL.yaml +12 -6
  220. data/lib/countries/data/subdivisions/IN.yaml +245 -396
  221. data/lib/countries/data/subdivisions/IQ.yaml +111 -91
  222. data/lib/countries/data/subdivisions/IR.yaml +1463 -1451
  223. data/lib/countries/data/subdivisions/IS.yaml +160 -25
  224. data/lib/countries/data/subdivisions/IT.yaml +8740 -8292
  225. data/lib/countries/data/subdivisions/JM.yaml +28 -14
  226. data/lib/countries/data/subdivisions/JO.yaml +24 -12
  227. data/lib/countries/data/subdivisions/JP.yaml +94 -47
  228. data/lib/countries/data/subdivisions/KE.yaml +95 -48
  229. data/lib/countries/data/subdivisions/KG.yaml +95 -86
  230. data/lib/countries/data/subdivisions/KH.yaml +64 -39
  231. data/lib/countries/data/subdivisions/KI.yaml +6 -3
  232. data/lib/countries/data/subdivisions/KM.yaml +6 -3
  233. data/lib/countries/data/subdivisions/KN.yaml +32 -16
  234. data/lib/countries/data/subdivisions/KP.yaml +24 -227
  235. data/lib/countries/data/subdivisions/KR.yaml +34 -17
  236. data/lib/countries/data/subdivisions/KW.yaml +12 -6
  237. data/lib/countries/data/subdivisions/KZ.yaml +47 -102
  238. data/lib/countries/data/subdivisions/LA.yaml +36 -34
  239. data/lib/countries/data/subdivisions/LB.yaml +71 -63
  240. data/lib/countries/data/subdivisions/LC.yaml +116 -106
  241. data/lib/countries/data/subdivisions/LI.yaml +22 -11
  242. data/lib/countries/data/subdivisions/LK.yaml +445 -411
  243. data/lib/countries/data/subdivisions/LR.yaml +146 -129
  244. data/lib/countries/data/subdivisions/LS.yaml +20 -10
  245. data/lib/countries/data/subdivisions/LT.yaml +1706 -1636
  246. data/lib/countries/data/subdivisions/LU.yaml +24 -12
  247. data/lib/countries/data/subdivisions/LV.yaml +1623 -1577
  248. data/lib/countries/data/subdivisions/LY.yaml +44 -22
  249. data/lib/countries/data/subdivisions/MA.yaml +810 -1589
  250. data/lib/countries/data/subdivisions/MC.yaml +261 -244
  251. data/lib/countries/data/subdivisions/MD.yaml +74 -79
  252. data/lib/countries/data/subdivisions/ME.yaml +217 -195
  253. data/lib/countries/data/subdivisions/MG.yaml +12 -6
  254. data/lib/countries/data/subdivisions/MH.yaml +167 -140
  255. data/lib/countries/data/subdivisions/MK.yaml +160 -80
  256. data/lib/countries/data/subdivisions/ML.yaml +48 -37
  257. data/lib/countries/data/subdivisions/MM.yaml +30 -15
  258. data/lib/countries/data/subdivisions/MN.yaml +44 -22
  259. data/lib/countries/data/subdivisions/MR.yaml +30 -34
  260. data/lib/countries/data/subdivisions/MT.yaml +136 -68
  261. data/lib/countries/data/subdivisions/MU.yaml +24 -262
  262. data/lib/countries/data/subdivisions/MV.yaml +161 -254
  263. data/lib/countries/data/subdivisions/MW.yaml +250 -219
  264. data/lib/countries/data/subdivisions/MX.yaml +67 -47
  265. data/lib/countries/data/subdivisions/MY.yaml +32 -16
  266. data/lib/countries/data/subdivisions/MZ.yaml +22 -11
  267. data/lib/countries/data/subdivisions/NA.yaml +58 -44
  268. data/lib/countries/data/subdivisions/NE.yaml +16 -8
  269. data/lib/countries/data/subdivisions/NG.yaml +74 -37
  270. data/lib/countries/data/subdivisions/NI.yaml +34 -17
  271. data/lib/countries/data/subdivisions/NL.yaml +303 -285
  272. data/lib/countries/data/subdivisions/NO.yaml +39 -17
  273. data/lib/countries/data/subdivisions/NP.yaml +302 -276
  274. data/lib/countries/data/subdivisions/NR.yaml +28 -14
  275. data/lib/countries/data/subdivisions/NZ.yaml +34 -17
  276. data/lib/countries/data/subdivisions/OM.yaml +260 -311
  277. data/lib/countries/data/subdivisions/PA.yaml +57 -44
  278. data/lib/countries/data/subdivisions/PE.yaml +107 -81
  279. data/lib/countries/data/subdivisions/PG.yaml +163 -158
  280. data/lib/countries/data/subdivisions/PH.yaml +5062 -4992
  281. data/lib/countries/data/subdivisions/PK.yaml +145 -235
  282. data/lib/countries/data/subdivisions/PL.yaml +51 -3
  283. data/lib/countries/data/subdivisions/PS.yaml +32 -16
  284. data/lib/countries/data/subdivisions/PT.yaml +53 -33
  285. data/lib/countries/data/subdivisions/PW.yaml +32 -16
  286. data/lib/countries/data/subdivisions/PY.yaml +36 -18
  287. data/lib/countries/data/subdivisions/QA.yaml +27 -78
  288. data/lib/countries/data/subdivisions/RO.yaml +84 -42
  289. data/lib/countries/data/subdivisions/RS.yaml +104 -72
  290. data/lib/countries/data/subdivisions/RU.yaml +166 -83
  291. data/lib/countries/data/subdivisions/RW.yaml +10 -5
  292. data/lib/countries/data/subdivisions/SA.yaml +26 -13
  293. data/lib/countries/data/subdivisions/SB.yaml +20 -10
  294. data/lib/countries/data/subdivisions/SC.yaml +54 -25
  295. data/lib/countries/data/subdivisions/SD.yaml +798 -780
  296. data/lib/countries/data/subdivisions/SE.yaml +42 -21
  297. data/lib/countries/data/subdivisions/SG.yaml +15 -10
  298. data/lib/countries/data/subdivisions/SH.yaml +21 -32
  299. data/lib/countries/data/subdivisions/SI.yaml +475 -263
  300. data/lib/countries/data/subdivisions/SK.yaml +16 -8
  301. data/lib/countries/data/subdivisions/SL.yaml +23 -18
  302. data/lib/countries/data/subdivisions/SM.yaml +18 -9
  303. data/lib/countries/data/subdivisions/SN.yaml +188 -174
  304. data/lib/countries/data/subdivisions/SO.yaml +36 -18
  305. data/lib/countries/data/subdivisions/SR.yaml +20 -10
  306. data/lib/countries/data/subdivisions/SS.yaml +20 -10
  307. data/lib/countries/data/subdivisions/ST.yaml +38 -52
  308. data/lib/countries/data/subdivisions/SV.yaml +28 -14
  309. data/lib/countries/data/subdivisions/SY.yaml +28 -14
  310. data/lib/countries/data/subdivisions/SZ.yaml +8 -4
  311. data/lib/countries/data/subdivisions/TD.yaml +312 -303
  312. data/lib/countries/data/subdivisions/TG.yaml +10 -5
  313. data/lib/countries/data/subdivisions/TH.yaml +211 -133
  314. data/lib/countries/data/subdivisions/TJ.yaml +161 -156
  315. data/lib/countries/data/subdivisions/TL.yaml +26 -13
  316. data/lib/countries/data/subdivisions/TM.yaml +12 -6
  317. data/lib/countries/data/subdivisions/TN.yaml +48 -24
  318. data/lib/countries/data/subdivisions/TO.yaml +10 -5
  319. data/lib/countries/data/subdivisions/TR.yaml +162 -81
  320. data/lib/countries/data/subdivisions/TT.yaml +128 -160
  321. data/lib/countries/data/subdivisions/TV.yaml +57 -63
  322. data/lib/countries/data/subdivisions/TW.yaml +143 -183
  323. data/lib/countries/data/subdivisions/TZ.yaml +62 -31
  324. data/lib/countries/data/subdivisions/UA.yaml +55 -28
  325. data/lib/countries/data/subdivisions/UG.yaml +4806 -4660
  326. data/lib/countries/data/subdivisions/UM.yaml +18 -9
  327. data/lib/countries/data/subdivisions/US.yaml +114 -57
  328. data/lib/countries/data/subdivisions/UY.yaml +99 -80
  329. data/lib/countries/data/subdivisions/UZ.yaml +28 -14
  330. data/lib/countries/data/subdivisions/VC.yaml +12 -6
  331. data/lib/countries/data/subdivisions/VE.yaml +50 -25
  332. data/lib/countries/data/subdivisions/VN.yaml +3576 -3513
  333. data/lib/countries/data/subdivisions/VU.yaml +12 -6
  334. data/lib/countries/data/subdivisions/WF.yaml +6 -3
  335. data/lib/countries/data/subdivisions/WS.yaml +22 -11
  336. data/lib/countries/data/subdivisions/YE.yaml +222 -200
  337. data/lib/countries/data/subdivisions/ZA.yaml +86 -100
  338. data/lib/countries/data/subdivisions/ZM.yaml +20 -10
  339. data/lib/countries/data/subdivisions/ZW.yaml +20 -10
  340. data/lib/countries/data/translations/countries-ab.yaml +254 -0
  341. data/lib/countries/data/translations/countries-af.yaml +254 -0
  342. data/lib/countries/data/translations/countries-ak.yaml +254 -0
  343. data/lib/countries/data/translations/countries-am.yaml +254 -0
  344. data/lib/countries/data/translations/countries-an.yaml +254 -0
  345. data/lib/countries/data/translations/countries-ar.yaml +254 -0
  346. data/lib/countries/data/translations/countries-as.yaml +254 -0
  347. data/lib/countries/data/translations/countries-ay.yaml +254 -0
  348. data/lib/countries/data/translations/countries-az.yaml +254 -0
  349. data/lib/countries/data/translations/countries-ba.yaml +254 -0
  350. data/lib/countries/data/translations/countries-be.yaml +254 -0
  351. data/lib/countries/data/translations/countries-bg.yaml +254 -0
  352. data/lib/countries/data/translations/countries-bi.yaml +254 -0
  353. data/lib/countries/data/translations/countries-bn.yaml +254 -0
  354. data/lib/countries/data/translations/countries-bn_IN.yaml +254 -0
  355. data/lib/countries/data/translations/countries-br.yaml +254 -0
  356. data/lib/countries/data/translations/countries-bs.yaml +254 -0
  357. data/lib/countries/data/translations/countries-ca.yaml +254 -0
  358. data/lib/countries/data/translations/countries-ce.yaml +254 -0
  359. data/lib/countries/data/translations/countries-ch.yaml +254 -0
  360. data/lib/countries/data/translations/countries-cs.yaml +254 -0
  361. data/lib/countries/data/translations/countries-cv.yaml +254 -0
  362. data/lib/countries/data/translations/countries-cy.yaml +254 -0
  363. data/lib/countries/data/translations/countries-da.yaml +254 -0
  364. data/lib/countries/data/translations/countries-de.yaml +254 -0
  365. data/lib/countries/data/translations/countries-dv.yaml +254 -0
  366. data/lib/countries/data/translations/countries-dz.yaml +254 -0
  367. data/lib/countries/data/translations/countries-ee.yaml +254 -0
  368. data/lib/countries/data/translations/countries-el.yaml +254 -0
  369. data/lib/countries/data/translations/countries-en.yaml +254 -0
  370. data/lib/countries/data/translations/countries-eo.yaml +254 -0
  371. data/lib/countries/data/translations/countries-es.yaml +254 -0
  372. data/lib/countries/data/translations/countries-et.yaml +254 -0
  373. data/lib/countries/data/translations/countries-eu.yaml +254 -0
  374. data/lib/countries/data/translations/countries-fa.yaml +254 -0
  375. data/lib/countries/data/translations/countries-ff.yaml +254 -0
  376. data/lib/countries/data/translations/countries-fi.yaml +254 -0
  377. data/lib/countries/data/translations/countries-fo.yaml +254 -0
  378. data/lib/countries/data/translations/countries-fr.yaml +254 -0
  379. data/lib/countries/data/translations/countries-fy.yaml +254 -0
  380. data/lib/countries/data/translations/countries-ga.yaml +254 -0
  381. data/lib/countries/data/translations/countries-gl.yaml +254 -0
  382. data/lib/countries/data/translations/countries-gn.yaml +254 -0
  383. data/lib/countries/data/translations/countries-gu.yaml +254 -0
  384. data/lib/countries/data/translations/countries-gv.yaml +254 -0
  385. data/lib/countries/data/translations/countries-ha.yaml +254 -0
  386. data/lib/countries/data/translations/countries-he.yaml +254 -0
  387. data/lib/countries/data/translations/countries-hi.yaml +254 -0
  388. data/lib/countries/data/translations/countries-hr.yaml +254 -0
  389. data/lib/countries/data/translations/countries-ht.yaml +254 -0
  390. data/lib/countries/data/translations/countries-hu.yaml +254 -0
  391. data/lib/countries/data/translations/countries-hy.yaml +254 -0
  392. data/lib/countries/data/translations/countries-ia.yaml +254 -0
  393. data/lib/countries/data/translations/countries-id.yaml +254 -0
  394. data/lib/countries/data/translations/countries-io.yaml +254 -0
  395. data/lib/countries/data/translations/countries-is.yaml +254 -0
  396. data/lib/countries/data/translations/countries-it.yaml +254 -0
  397. data/lib/countries/data/translations/countries-iu.yaml +254 -0
  398. data/lib/countries/data/translations/countries-ja.yaml +254 -0
  399. data/lib/countries/data/translations/countries-ka.yaml +254 -0
  400. data/lib/countries/data/translations/countries-ki.yaml +254 -0
  401. data/lib/countries/data/translations/countries-kk.yaml +254 -0
  402. data/lib/countries/data/translations/countries-kl.yaml +254 -0
  403. data/lib/countries/data/translations/countries-km.yaml +254 -0
  404. data/lib/countries/data/translations/countries-kn.yaml +254 -0
  405. data/lib/countries/data/translations/countries-ko.yaml +254 -0
  406. data/lib/countries/data/translations/countries-ku.yaml +254 -0
  407. data/lib/countries/data/translations/countries-kv.yaml +254 -0
  408. data/lib/countries/data/translations/countries-kw.yaml +254 -0
  409. data/lib/countries/data/translations/countries-ky.yaml +254 -0
  410. data/lib/countries/data/translations/countries-lo.yaml +254 -0
  411. data/lib/countries/data/translations/countries-lt.yaml +254 -0
  412. data/lib/countries/data/translations/countries-lv.yaml +254 -0
  413. data/lib/countries/data/translations/countries-mi.yaml +254 -0
  414. data/lib/countries/data/translations/countries-mk.yaml +254 -0
  415. data/lib/countries/data/translations/countries-ml.yaml +254 -0
  416. data/lib/countries/data/translations/countries-mn.yaml +254 -0
  417. data/lib/countries/data/translations/countries-mr.yaml +254 -0
  418. data/lib/countries/data/translations/countries-ms.yaml +254 -0
  419. data/lib/countries/data/translations/countries-mt.yaml +254 -0
  420. data/lib/countries/data/translations/countries-my.yaml +254 -0
  421. data/lib/countries/data/translations/countries-na.yaml +254 -0
  422. data/lib/countries/data/translations/countries-nb.yaml +254 -0
  423. data/lib/countries/data/translations/countries-ne.yaml +254 -0
  424. data/lib/countries/data/translations/countries-nl.yaml +254 -0
  425. data/lib/countries/data/translations/countries-nn.yaml +254 -0
  426. data/lib/countries/data/translations/countries-nv.yaml +254 -0
  427. data/lib/countries/data/translations/countries-oc.yaml +254 -0
  428. data/lib/countries/data/translations/countries-or.yaml +254 -0
  429. data/lib/countries/data/translations/countries-pa.yaml +254 -0
  430. data/lib/countries/data/translations/countries-pi.yaml +254 -0
  431. data/lib/countries/data/translations/countries-pl.yaml +254 -0
  432. data/lib/countries/data/translations/countries-ps.yaml +254 -0
  433. data/lib/countries/data/translations/countries-pt.yaml +254 -0
  434. data/lib/countries/data/translations/countries-pt_BR.yaml +254 -0
  435. data/lib/countries/data/translations/countries-ro.yaml +254 -0
  436. data/lib/countries/data/translations/countries-ru.yaml +254 -0
  437. data/lib/countries/data/translations/countries-rw.yaml +254 -0
  438. data/lib/countries/data/translations/countries-sc.yaml +254 -0
  439. data/lib/countries/data/translations/countries-sd.yaml +254 -0
  440. data/lib/countries/data/translations/countries-si.yaml +254 -0
  441. data/lib/countries/data/translations/countries-sk.yaml +254 -0
  442. data/lib/countries/data/translations/countries-sl.yaml +254 -0
  443. data/lib/countries/data/translations/countries-so.yaml +254 -0
  444. data/lib/countries/data/translations/countries-sq.yaml +254 -0
  445. data/lib/countries/data/translations/countries-sr.yaml +254 -0
  446. data/lib/countries/data/translations/countries-sv.yaml +254 -0
  447. data/lib/countries/data/translations/countries-sw.yaml +254 -0
  448. data/lib/countries/data/translations/countries-ta.yaml +254 -0
  449. data/lib/countries/data/translations/countries-te.yaml +254 -0
  450. data/lib/countries/data/translations/countries-tg.yaml +254 -0
  451. data/lib/countries/data/translations/countries-th.yaml +254 -0
  452. data/lib/countries/data/translations/countries-ti.yaml +254 -0
  453. data/lib/countries/data/translations/countries-tk.yaml +254 -0
  454. data/lib/countries/data/translations/countries-tl.yaml +254 -0
  455. data/lib/countries/data/translations/countries-tr.yaml +254 -0
  456. data/lib/countries/data/translations/countries-tt.yaml +254 -0
  457. data/lib/countries/data/translations/countries-ug.yaml +254 -0
  458. data/lib/countries/data/translations/countries-uk.yaml +254 -0
  459. data/lib/countries/data/translations/countries-ur.yaml +254 -0
  460. data/lib/countries/data/translations/countries-uz.yaml +254 -0
  461. data/lib/countries/data/translations/countries-ve.yaml +254 -0
  462. data/lib/countries/data/translations/countries-vi.yaml +254 -0
  463. data/lib/countries/data/translations/countries-wa.yaml +254 -0
  464. data/lib/countries/data/translations/countries-wo.yaml +254 -0
  465. data/lib/countries/data/translations/countries-xh.yaml +254 -0
  466. data/lib/countries/data/translations/countries-yo.yaml +254 -0
  467. data/lib/countries/data/translations/countries-zh_CN.yaml +254 -0
  468. data/lib/countries/data/translations/countries-zh_HK.yaml +254 -0
  469. data/lib/countries/data/translations/countries-zh_TW.yaml +254 -0
  470. data/lib/countries/data/translations/countries-zu.yaml +254 -0
  471. data/lib/countries/data.rb +14 -8
  472. data/lib/countries/iso3166.rb +0 -1
  473. data/lib/countries/sources/cldr/subdivision_updater.rb +1 -1
  474. data/lib/countries/subdivision.rb +19 -8
  475. data/lib/countries/version.rb +1 -1
  476. data/spec/country_spec.rb +63 -19
  477. data/spec/data_spec.rb +63 -5
  478. metadata +134 -24
  479. data/lib/countries/cache/locales/zh.json +0 -1
  480. data/lib/countries/data/subdivisions/AI.yaml +0 -197
  481. data/lib/countries/data/subdivisions/BM.yaml +0 -155
  482. data/lib/countries/data/subdivisions/CK.yaml +0 -155
  483. data/lib/countries/data/subdivisions/EH.yaml +0 -80
  484. data/lib/countries/data/subdivisions/SJ.yaml +0 -29
  485. data/lib/countries/data/subdivisions/TK.yaml +0 -43
  486. data/lib/countries/data/translation_corrections.yaml +0 -51
@@ -0,0 +1,254 @@
1
+ # Country name translations for locale zu
2
+ #
3
+ # alpha2: localized_name
4
+ #
5
+ ---
6
+ AD: I-Andora
7
+ AE: United Arab Emirates
8
+ AF: I-Afganistani
9
+ AG: Antigua no Barbuda
10
+ AI: Anguilla
11
+ AL: I-Albaniya
12
+ AM: Armenia
13
+ AO: I-Angola
14
+ AQ: Antarctica
15
+ AR: I-Argentina
16
+ AS: American Samoa
17
+ AT: I-Ostriya
18
+ AU: I-Ostreliya
19
+ AW: Aruba
20
+ AX: Åland Islands
21
+ AZ: I-Azerbayijani
22
+ BA: IBhosniya neHerzegovina
23
+ BB: I-Barbados
24
+ BD: Isi-Bhangladeshi
25
+ BE: Isi-Bhelijiyamu
26
+ BF: IBukhina Faso
27
+ BG: IBulgariya
28
+ BH: Bahrain
29
+ BI: IBurundi
30
+ BJ: IBenini
31
+ BL: Saint Barthélemy
32
+ BM: Bermuda
33
+ BN: Brunei Darussalam
34
+ BO: I Boliviya
35
+ BQ: Bonaire, Sint Eustatius and Saba
36
+ BR: IBrazili
37
+ BS: Bahamas
38
+ BT: Bhutan
39
+ BV: Bouvet Island
40
+ BW: IButswana
41
+ BY: IBelarusi
42
+ BZ: Belize
43
+ CA: I Khanada
44
+ CC: Cocos (Keeling) Islands
45
+ CD: Congo, The Democratic Republic of the
46
+ CF: Central African Republic
47
+ CG: Congo
48
+ CH: I-Switzerland
49
+ CI: Côte d'Ivoire
50
+ CK: Cook Islands
51
+ CL: I-Chile
52
+ CM: IKamerooni
53
+ CN: Isi-Shayina
54
+ CO: IKolombiya
55
+ CR: Costa Rica
56
+ CU: Cuba
57
+ CV: Cabo Verde
58
+ CW: Curaçao
59
+ CX: Christmas Island
60
+ CY: Cyprus
61
+ CZ: Czechia
62
+ DE: IJalimani
63
+ DJ: IJibuthi
64
+ DK: IDenimaki
65
+ DM: Dominica
66
+ DO: Ulawulo lokuziphatha kwe Dominikhani
67
+ DZ: IAljiriya
68
+ EC: Ecuador
69
+ EE: I-Estoniya
70
+ EG: IGibhithe
71
+ EH: Western Sahara
72
+ ER: I-Eritrea
73
+ ES: ISpeyini
74
+ ET: I-Ithiopia
75
+ FI: IFinlandi
76
+ FJ: IFiji
77
+ FK: Falkland Islands (Malvinas)
78
+ FM: Micronesia, Federated States of
79
+ FO: Faroe Islands
80
+ FR: IFulansi
81
+ GA: IGaboni
82
+ GB: Umbuso Ohlangeneyo
83
+ GD: I-Grenada
84
+ GE: Georgia
85
+ GF: French Guiana
86
+ GG: Guernsey
87
+ GH: IGana
88
+ GI: Gibraltar
89
+ GL: Greenland
90
+ GM: Gambia
91
+ GN: IGini
92
+ GP: Guadeloupe
93
+ GQ: IGini Enkabazwe
94
+ GR: IGreki
95
+ GS: South Georgia and the South Sandwich Islands
96
+ GT: I-Guwathemala
97
+ GU: Guam
98
+ GW: IGini Bisawu
99
+ GY: Guyana
100
+ HK: Hong Kong
101
+ HM: Heard Island and McDonald Islands
102
+ HN: I-Hondurasi
103
+ HR: IKrowati
104
+ HT: Haiti
105
+ HU: I-Hungariya
106
+ ID: I-Indonesia
107
+ IE: I-Ayilendi
108
+ IL: Isreyili
109
+ IM: Isle of Man
110
+ IN: India
111
+ IO: British Indian Ocean Territory
112
+ IQ: I-Iraki
113
+ IR: Iran, Islamic Republic of
114
+ IS: I-Ayisilandi
115
+ IT: ITaliya
116
+ JE: Jersey
117
+ JM: Jamaica
118
+ JO: Jordan
119
+ JP: IJaphani
120
+ KE: IKenya
121
+ KG: Kyrgyzstan
122
+ KH: Cambodia
123
+ KI: Kiribati
124
+ KM: IsiKhomorosi
125
+ KN: Saint Kitts and Nevis
126
+ KP: North Korea
127
+ KR: South Korea
128
+ KW: Kuwait
129
+ KY: Cayman Islands
130
+ KZ: Kazakhstan
131
+ LA: Lao People's Democratic Republic
132
+ LB: Lebanon
133
+ LC: Saint Lucia
134
+ LI: Liechtenstein
135
+ LK: Sri Lanka
136
+ LR: ILiberia
137
+ LS: OSotho
138
+ LT: ILithuwaniya
139
+ LU: I-Luxembourg
140
+ LV: ILatviya
141
+ LY: ILibiya
142
+ MA: IMorokho
143
+ MC: Monaco
144
+ MD: Moldova
145
+ ME: IMontenegro
146
+ MF: Saint Martin (French part)
147
+ MG: IMadagasika
148
+ MH: Marshall Islands
149
+ MK: North Macedonia
150
+ ML: IMali
151
+ MM: Myanmar
152
+ MN: Mongolia
153
+ MO: Macao
154
+ MP: Northern Mariana Islands
155
+ MQ: Martinique
156
+ MR: IMoritaniya
157
+ MS: Montserrat
158
+ MT: IMalta
159
+ MU: IMorishisi
160
+ MV: Maldives
161
+ MW: IMalawi
162
+ MX: IMekisiko
163
+ MY: Malaysia
164
+ MZ: IMozambiki
165
+ NA: INamibhiya
166
+ NC: New Caledonia
167
+ NE: INayighe
168
+ NF: Norfolk Island
169
+ NG: INigeria
170
+ NI: Nicaragua
171
+ NL: I-Netherlands
172
+ 'NO': INoki
173
+ NP: Nepal
174
+ NR: Nauru
175
+ NU: Niue
176
+ NZ: INyuzilandi
177
+ OM: Oman
178
+ PA: Panama
179
+ PE: I-Peru
180
+ PF: French Polynesia
181
+ PG: Papua New Guinea
182
+ PH: Philippines
183
+ PK: IPakistani
184
+ PL: IPolandi
185
+ PM: Saint Pierre and Miquelon
186
+ PN: Pitcairn
187
+ PR: Puerto Rico
188
+ PS: Palestine, State of
189
+ PT: IPhothugali
190
+ PW: Palau
191
+ PY: I-Paraguwayi
192
+ QA: Qatar
193
+ RE: IRiyunion
194
+ RO: I-Romaniya
195
+ RS: ISerbiya
196
+ RU: Russian Federation
197
+ RW: IRuwanda
198
+ SA: Saudi Arabia
199
+ SB: Solomon Islands
200
+ SC: IsiSeyisheli
201
+ SD: ISudan
202
+ SE: ISwidi
203
+ SG: Singapore
204
+ SH: Saint Helena, Ascension and Tristan da Cunha
205
+ SI: ISloveniya
206
+ SJ: Svalbard and Jan Mayen
207
+ SK: ISlovaki
208
+ SL: ISiera Liyoni
209
+ SM: USanti Marino
210
+ SN: ISenegal
211
+ SO: ISomalia
212
+ SR: Suriname
213
+ SS: ISudan yaseNingizimu
214
+ ST: ISawu Tome noPhrinitshipeyi
215
+ SV: El Salvador
216
+ SX: Sint Maarten (Dutch part)
217
+ SY: Syrian Arab Republic
218
+ SZ: Eswatini
219
+ TC: Turks and Caicos Islands
220
+ TD: ITshedi
221
+ TF: French Southern Territories
222
+ TG: ITogo
223
+ TH: I-Thayilandi
224
+ TJ: Tajikistan
225
+ TK: Tokelau
226
+ TL: Timor-Leste
227
+ TM: Turkmenistan
228
+ TN: ITunisia
229
+ TO: Tonga
230
+ TR: ITheki
231
+ TT: I-Trinidad ne Tobago
232
+ TV: Tuvalu
233
+ TW: I-Tayiwani
234
+ TZ: ITanzania
235
+ UA: I-Yukreyini
236
+ UG: IYuganda
237
+ UM: United States Minor Outlying Islands
238
+ US: United States
239
+ UY: I-Uruguwayi
240
+ UZ: Uzbekistan
241
+ VA: Holy See (Vatican City State)
242
+ VC: Saint Vincent and the Grenadines
243
+ VE: I-Venezuwela
244
+ VG: Virgin Islands, British
245
+ VI: Virgin Islands, U.S.
246
+ VN: IViyetnami
247
+ VU: Vanuatu
248
+ WF: Wallis and Futuna
249
+ WS: Samoa
250
+ YE: IYemen
251
+ YT: IMayotte
252
+ ZA: IRiphabliki yaseNingizimu Afrika
253
+ ZM: IZambiya
254
+ ZW: IZimbabwe
@@ -5,6 +5,7 @@ module ISO3166
5
5
  class Data
6
6
  @cache_dir = [File.dirname(__FILE__), 'cache']
7
7
  @cache = {}
8
+ @loaded_country_codes = []
8
9
  @registered_data = {}
9
10
  @mutex = Mutex.new
10
11
 
@@ -49,7 +50,7 @@ module ISO3166
49
50
 
50
51
  def codes
51
52
  load_data!
52
- loaded_codes
53
+ cached_codes
53
54
  end
54
55
 
55
56
  def update_cache
@@ -58,6 +59,15 @@ module ISO3166
58
59
  @cache
59
60
  end
60
61
 
62
+ def loaded_codes
63
+ load_data!
64
+ @loaded_country_codes
65
+ end
66
+
67
+ def datafile_path(file_array)
68
+ File.join([@cache_dir] + file_array)
69
+ end
70
+
61
71
  private
62
72
 
63
73
  def load_data!
@@ -65,7 +75,7 @@ module ISO3166
65
75
 
66
76
  synchronized do
67
77
  @cache = load_cache %w[countries.json]
68
- @_country_codes = @cache.keys
78
+ @loaded_country_codes = @cache.keys
69
79
  @cache = @cache.merge(@registered_data)
70
80
  @cache
71
81
  end
@@ -102,13 +112,13 @@ module ISO3166
102
112
  end
103
113
  end
104
114
 
105
- def loaded_codes
115
+ def cached_codes
106
116
  @cache.keys
107
117
  end
108
118
 
109
119
  # Codes that we have translations for in dataset
110
120
  def internal_codes
111
- @_country_codes - @registered_data.keys
121
+ @loaded_country_codes - @registered_data.keys
112
122
  end
113
123
 
114
124
  def cache_flush_required?
@@ -158,10 +168,6 @@ module ISO3166
158
168
  File.exist?(file_path) ? JSON.parse(File.binread(file_path)) : {}
159
169
  end
160
170
 
161
- def datafile_path(file_array)
162
- File.join([@cache_dir] + file_array)
163
- end
164
-
165
171
  def deep_stringify_keys(data)
166
172
  data.transform_keys!(&:to_s)
167
173
  data.transform_values! do |v|
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'yaml'
4
4
  require 'json'
5
- require 'i18n_data'
6
5
 
7
6
  require 'countries/kwarg_struct'
8
7
  require 'countries/configuration'
@@ -19,7 +19,7 @@ module Sources
19
19
  language_data = Nokogiri::XML(File.read(file_path))
20
20
  language_code = File.basename(file_path, '.*')
21
21
  subdivisions = language_data.css('subdivision')
22
- next if subdivisions.empty?
22
+ return if subdivisions.empty?
23
23
 
24
24
  last_country_code_seen = nil
25
25
 
@@ -1,12 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ISO3166
4
- Subdivision = KwargStruct.new(
5
- :name,
6
- :code,
7
- :unofficial_names,
8
- :geo,
9
- :translations,
10
- :comments
11
- )
4
+ class Subdivision
5
+ attr_accessor :name,
6
+ :code,
7
+ :unofficial_names,
8
+ :geo,
9
+ :translations,
10
+ :comments,
11
+ :type
12
+
13
+ def initialize(attrs)
14
+ attrs.each_pair do |k, v|
15
+ send "#{k}=", v
16
+ end
17
+ end
18
+
19
+ def [](attr_name)
20
+ send attr_name
21
+ end
22
+ end
12
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Countries
4
- VERSION = '5.0.0'.freeze
4
+ VERSION = '5.1.0'.freeze
5
5
  end
data/spec/country_spec.rb CHANGED
@@ -221,7 +221,7 @@ describe ISO3166::Country do
221
221
  end
222
222
 
223
223
  describe 'subdivisions' do
224
- let(:virginia) { country.states['VA'] }
224
+ let(:virginia) { country.subdivisions['VA'] }
225
225
  it 'should return an empty hash for a country with no ISO3166-2' do
226
226
  expect(ISO3166::Country.search('VA').subdivisions.size).to eq(0)
227
227
  end
@@ -230,8 +230,8 @@ describe ISO3166::Country do
230
230
  expect(country.subdivisions.size).to eq(57)
231
231
  end
232
232
 
233
- it 'should be available through states' do
234
- expect(country.states.size).to eq(57)
233
+ it '#states should be deprecated' do
234
+ expect {country.states}.to output.to_stderr
235
235
  end
236
236
 
237
237
  it 'should be a subdivision object' do
@@ -251,6 +251,60 @@ describe ISO3166::Country do
251
251
  end
252
252
  end
253
253
 
254
+ describe 'subdivision_types' do
255
+ it "should return an array of subdivision types" do
256
+ expect(country.subdivision_types).to contain_exactly('district', 'state', 'outlying_area')
257
+ end
258
+
259
+ it "should return an array of subdivision types even if there is only a single type" do
260
+ expect(ISO3166::Country['LI'].subdivision_types).to contain_exactly('commune')
261
+ end
262
+
263
+ it "should return an empty array if country has no subdivisions" do
264
+ expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
265
+ expect(ISO3166::Country['AS'].subdivision_types).to eq([])
266
+ end
267
+ end
268
+
269
+ describe 'subdivisions_of_types' do
270
+ it "given a single type, should return an array of subdivisions that match the type" do
271
+ us_states = country.subdivisions_of_types(%w[state])
272
+ expect(us_states.size).to eq(50)
273
+ dc = country.subdivisions_of_types(%w[district])
274
+ expect(dc.size).to eq(1)
275
+ end
276
+
277
+ it "given multiple types, should return an array of subdivisions matching the types" do
278
+ us_states_plus_dc = country.subdivisions_of_types(%w[state district])
279
+ expect(us_states_plus_dc.size).to eq(51)
280
+ end
281
+
282
+ it "given multiple types where at least one does not exist for that country, should work without issue" do
283
+ us_states_plus_dc = country.subdivisions_of_types(%w[state district governorate])
284
+ expect(us_states_plus_dc.size).to eq(51)
285
+ end
286
+
287
+ it "given only types that do not exist for that country, should return an empty collection" do
288
+ should_be_empty = ISO3166::Country['PT'].subdivisions_of_types(%w[state county])
289
+ expect(should_be_empty).to be_empty
290
+ end
291
+ end
292
+
293
+ describe 'humanized_subdivision_types' do
294
+ it "should return an array of humanized subdivision types" do
295
+ expect(country.humanized_subdivision_types).to contain_exactly('District', 'State', 'Outlying area')
296
+ end
297
+
298
+ it "should return an array of subdivision types even if there is only a single type" do
299
+ expect(ISO3166::Country['LI'].humanized_subdivision_types).to contain_exactly('Commune')
300
+ end
301
+
302
+ it "should return an empty array if country has no subdivisions" do
303
+ expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
304
+ expect(ISO3166::Country['AS'].humanized_subdivision_types).to eq([])
305
+ end
306
+ end
307
+
254
308
  describe 'subdivision_names_with_codes' do
255
309
  it 'should return an alphabetized list of all subdivisions names with codes' do
256
310
  subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
@@ -330,7 +384,7 @@ describe ISO3166::Country do
330
384
  countries = ISO3166::Country.all_translated('fr')
331
385
  expect(countries).to be_an(Array)
332
386
  expect(countries.first).to be_a(String)
333
- expect(countries.first).to eq('Aruba')
387
+ expect(countries.first).to eq('Andorre')
334
388
  # countries missing the desired locale will not be added to the list
335
389
  # so all 250 countries may not be returned, 'fr' returns 249, for example
336
390
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -340,7 +394,7 @@ describe ISO3166::Country do
340
394
  countries = ISO3166::Country.all_translated
341
395
  expect(countries).to be_an(Array)
342
396
  expect(countries.first).to be_a(String)
343
- expect(countries.first).to eq('Aruba')
397
+ expect(countries.first).to eq('Andorra')
344
398
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
345
399
  end
346
400
 
@@ -448,8 +502,8 @@ describe ISO3166::Country do
448
502
  it 'should return an hash of all country names translated to the selected locale' do
449
503
  countries = ISO3166::Country.translations('fr')
450
504
  expect(countries).to be_an(Hash)
451
- expect(countries.first[0]).to eq('AW')
452
- expect(countries.first).to eq(%w[AW Aruba])
505
+ expect(countries.first[0]).to eq('AD')
506
+ expect(countries.first).to eq(%w[AD Andorre])
453
507
  # countries missing the desired locale will not be added to the list
454
508
  # so all 250 countries may not be returned, 'fr' returns 249, for example
455
509
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -458,8 +512,8 @@ describe ISO3166::Country do
458
512
  it 'should return an hash of all country names in English if no locale is passed' do
459
513
  countries = ISO3166::Country.translations
460
514
  expect(countries).to be_an(Hash)
461
- expect(countries.first[0]).to eq('AW')
462
- expect(countries.first).to eq(%w[AW Aruba])
515
+ expect(countries.first[0]).to eq('AD')
516
+ expect(countries.first).to eq(%w[AD Andorra])
463
517
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
464
518
  end
465
519
  end
@@ -896,16 +950,6 @@ describe ISO3166::Country do
896
950
  end
897
951
  end
898
952
 
899
- describe 'names in Data' do
900
- it 'should be unique (to allow .find_by_any_name work properly)' do
901
- names = ISO3166::Data.cache.map do |_k, v|
902
- [v['iso_short_name'], v['unofficial_names']].flatten.uniq
903
- end.flatten
904
-
905
- expect(names.size).to eq(names.uniq.size)
906
- end
907
- end
908
-
909
953
  describe 'Norway' do
910
954
  let(:norway) { ISO3166::Country.search('NO') }
911
955
 
data/spec/data_spec.rb CHANGED
@@ -122,8 +122,12 @@ describe ISO3166::Data do
122
122
  expect(subject.iso_short_name).to eq 'NEW Taiwan'
123
123
  expect(subject.translations).to eq('en' => 'NEW Taiwan',
124
124
  'de' => 'NEW Taiwan')
125
- expect(subject.subdivisions).to eq('CHA' => ISO3166::Subdivision.new({ name: 'New Changhua', code: 'CHA' }),
126
- 'CYI' => ISO3166::Subdivision.new({ name: 'New Municipality', code: 'CYI' }))
125
+ expect(subject.subdivisions.keys).to eq(%w[CHA CYI])
126
+ expect(subject.subdivisions.values.map(&:name)).to eq(['New Changhua', 'New Municipality'])
127
+ end
128
+
129
+ after do
130
+ ISO3166.reset
127
131
  end
128
132
  end
129
133
 
@@ -149,8 +153,8 @@ describe ISO3166::Data do
149
153
  data = ISO3166::Data.new('LOL').call
150
154
  expect(data['iso_short_name']).to eq 'Happy Country'
151
155
  expect(subject.iso_short_name).to eq 'Happy Country'
152
- expect(subject.subdivisions).to eq('LOL1' => ISO3166::Subdivision.new({name: 'Happy sub1', code: 'LOL1'}),
153
- 'LOL2' => ISO3166::Subdivision.new({name: 'Happy sub2', code: 'LOL2'}))
156
+ expect(subject.subdivisions.keys).to eq(%w[LOL1 LOL2])
157
+ expect(subject.subdivisions.values.map(&:name)).to eq(['Happy sub1', 'Happy sub2'])
154
158
  end
155
159
 
156
160
  it 'detect a stale cache' do
@@ -181,7 +185,61 @@ describe ISO3166::Data do
181
185
  end
182
186
 
183
187
  after do
184
- ISO3166::Data.unregister('lol')
188
+ ISO3166.reset
189
+ end
190
+ end
191
+
192
+ describe 'data checks' do
193
+ context 'subdivision YAML files' do
194
+ it 'has a non-blank code for all subdivisions' do
195
+ Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
196
+ data = YAML.load_file(file)
197
+ expect(data.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{file}"
198
+ end
199
+ end
200
+
201
+ it 'has a non-blank, lowercase and snake_case type for all subdivisions' do
202
+ Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
203
+ data = YAML.load_file(file)
204
+ no_type = data.select{|k,v| v['type'].nil? }
205
+ expect(no_type).to be_empty, "empty subdivision type in #{file} - #{no_type.keys}"
206
+ uppercase = data.select{|k,v| v['type'] =~ /[A-Z]/ }
207
+ expect(uppercase).to be_empty, "uppercase characters in subdivision type in #{file} - #{uppercase.keys}"
208
+ spaces = data.select{|k,v| v['type'] =~ /\s/ }
209
+ expect(spaces).to be_empty, "whitespace characters in subdivision type in #{file} - #{spaces.keys}"
210
+ end
211
+ end
212
+
213
+ it 'has a non-blank name for all subdivisions' do
214
+ Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
215
+ data = YAML.load_file(file)
216
+ expect(data.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{file}"
217
+ end
218
+ end
219
+ end
220
+
221
+ context 'cached country subdivision data' do
222
+ it 'has a non-blank code for all subdivisions' do
223
+ ISO3166::Country.all.each do |country|
224
+ expect(country.subdivisions.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{country}"
225
+ end
226
+ end
227
+
228
+ it 'has a non-blank name for all subdivisions' do
229
+ ISO3166::Country.all.each do |country|
230
+ expect(country.subdivisions.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{country}"
231
+ end
232
+ end
233
+ end
234
+
235
+ context 'names in Data' do
236
+ it 'should be unique (to allow .find_by_any_name work properly)' do
237
+ names = ISO3166::Data.cache.map do |_k, v|
238
+ [v['iso_short_name'], v['unofficial_names']].flatten.uniq
239
+ end.flatten
240
+
241
+ expect(names.size).to eq(names.uniq.size)
242
+ end
185
243
  end
186
244
  end
187
245
  end