countries 4.2.3 → 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 (520) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +70 -0
  3. data/.github/workflows/tests.yml +3 -7
  4. data/.rubocop.yml +40 -1
  5. data/.rubocop_todo.yml +8 -41
  6. data/CHANGELOG.md +35 -2
  7. data/Gemfile +5 -3
  8. data/README.markdown +56 -62
  9. data/Rakefile +21 -45
  10. data/UPGRADE.md +39 -0
  11. data/bin/console +1 -0
  12. data/countries.gemspec +7 -6
  13. data/lib/countries/cache/countries.json +1 -1
  14. data/lib/countries/cache/locales/ab.json +1 -1
  15. data/lib/countries/cache/locales/af.json +1 -1
  16. data/lib/countries/cache/locales/ak.json +1 -1
  17. data/lib/countries/cache/locales/am.json +1 -1
  18. data/lib/countries/cache/locales/an.json +1 -1
  19. data/lib/countries/cache/locales/ar.json +1 -1
  20. data/lib/countries/cache/locales/as.json +1 -1
  21. data/lib/countries/cache/locales/ay.json +1 -1
  22. data/lib/countries/cache/locales/az.json +1 -1
  23. data/lib/countries/cache/locales/ba.json +1 -1
  24. data/lib/countries/cache/locales/be.json +1 -1
  25. data/lib/countries/cache/locales/bg.json +1 -1
  26. data/lib/countries/cache/locales/bi.json +1 -1
  27. data/lib/countries/cache/locales/bn-in.json +1 -1
  28. data/lib/countries/cache/locales/bn.json +1 -1
  29. data/lib/countries/cache/locales/br.json +1 -1
  30. data/lib/countries/cache/locales/bs.json +1 -1
  31. data/lib/countries/cache/locales/ca.json +1 -1
  32. data/lib/countries/cache/locales/ce.json +1 -1
  33. data/lib/countries/cache/locales/ch.json +1 -1
  34. data/lib/countries/cache/locales/cs.json +1 -1
  35. data/lib/countries/cache/locales/cv.json +1 -1
  36. data/lib/countries/cache/locales/cy.json +1 -1
  37. data/lib/countries/cache/locales/da.json +1 -1
  38. data/lib/countries/cache/locales/de.json +1 -1
  39. data/lib/countries/cache/locales/dv.json +1 -1
  40. data/lib/countries/cache/locales/dz.json +1 -1
  41. data/lib/countries/cache/locales/ee.json +1 -1
  42. data/lib/countries/cache/locales/el.json +1 -1
  43. data/lib/countries/cache/locales/en.json +1 -1
  44. data/lib/countries/cache/locales/eo.json +1 -1
  45. data/lib/countries/cache/locales/es.json +1 -1
  46. data/lib/countries/cache/locales/et.json +1 -1
  47. data/lib/countries/cache/locales/eu.json +1 -1
  48. data/lib/countries/cache/locales/fa.json +1 -1
  49. data/lib/countries/cache/locales/ff.json +1 -1
  50. data/lib/countries/cache/locales/fi.json +1 -1
  51. data/lib/countries/cache/locales/fo.json +1 -1
  52. data/lib/countries/cache/locales/fr.json +1 -1
  53. data/lib/countries/cache/locales/fy.json +1 -1
  54. data/lib/countries/cache/locales/ga.json +1 -1
  55. data/lib/countries/cache/locales/gl.json +1 -1
  56. data/lib/countries/cache/locales/gn.json +1 -1
  57. data/lib/countries/cache/locales/gu.json +1 -1
  58. data/lib/countries/cache/locales/gv.json +1 -1
  59. data/lib/countries/cache/locales/ha.json +1 -1
  60. data/lib/countries/cache/locales/he.json +1 -1
  61. data/lib/countries/cache/locales/hi.json +1 -1
  62. data/lib/countries/cache/locales/hr.json +1 -1
  63. data/lib/countries/cache/locales/ht.json +1 -1
  64. data/lib/countries/cache/locales/hu.json +1 -1
  65. data/lib/countries/cache/locales/hy.json +1 -1
  66. data/lib/countries/cache/locales/ia.json +1 -1
  67. data/lib/countries/cache/locales/id.json +1 -1
  68. data/lib/countries/cache/locales/io.json +1 -1
  69. data/lib/countries/cache/locales/is.json +1 -1
  70. data/lib/countries/cache/locales/it.json +1 -1
  71. data/lib/countries/cache/locales/iu.json +1 -1
  72. data/lib/countries/cache/locales/ja.json +1 -1
  73. data/lib/countries/cache/locales/ka.json +1 -1
  74. data/lib/countries/cache/locales/ki.json +1 -1
  75. data/lib/countries/cache/locales/kk.json +1 -1
  76. data/lib/countries/cache/locales/kl.json +1 -1
  77. data/lib/countries/cache/locales/km.json +1 -1
  78. data/lib/countries/cache/locales/kn.json +1 -1
  79. data/lib/countries/cache/locales/ko.json +1 -1
  80. data/lib/countries/cache/locales/kv.json +1 -1
  81. data/lib/countries/cache/locales/kw.json +1 -1
  82. data/lib/countries/cache/locales/ky.json +1 -1
  83. data/lib/countries/cache/locales/lo.json +1 -1
  84. data/lib/countries/cache/locales/lt.json +1 -1
  85. data/lib/countries/cache/locales/lv.json +1 -1
  86. data/lib/countries/cache/locales/mi.json +1 -1
  87. data/lib/countries/cache/locales/mk.json +1 -1
  88. data/lib/countries/cache/locales/ml.json +1 -1
  89. data/lib/countries/cache/locales/mn.json +1 -1
  90. data/lib/countries/cache/locales/mr.json +1 -1
  91. data/lib/countries/cache/locales/ms.json +1 -1
  92. data/lib/countries/cache/locales/mt.json +1 -1
  93. data/lib/countries/cache/locales/my.json +1 -1
  94. data/lib/countries/cache/locales/na.json +1 -1
  95. data/lib/countries/cache/locales/nb.json +1 -1
  96. data/lib/countries/cache/locales/ne.json +1 -1
  97. data/lib/countries/cache/locales/nl.json +1 -1
  98. data/lib/countries/cache/locales/nn.json +1 -1
  99. data/lib/countries/cache/locales/nv.json +1 -1
  100. data/lib/countries/cache/locales/oc.json +1 -1
  101. data/lib/countries/cache/locales/or.json +1 -1
  102. data/lib/countries/cache/locales/pa.json +1 -1
  103. data/lib/countries/cache/locales/pi.json +1 -1
  104. data/lib/countries/cache/locales/pl.json +1 -1
  105. data/lib/countries/cache/locales/ps.json +1 -1
  106. data/lib/countries/cache/locales/pt-br.json +1 -1
  107. data/lib/countries/cache/locales/pt.json +1 -1
  108. data/lib/countries/cache/locales/ro.json +1 -1
  109. data/lib/countries/cache/locales/ru.json +1 -1
  110. data/lib/countries/cache/locales/rw.json +1 -1
  111. data/lib/countries/cache/locales/sc.json +1 -1
  112. data/lib/countries/cache/locales/sd.json +1 -1
  113. data/lib/countries/cache/locales/si.json +1 -1
  114. data/lib/countries/cache/locales/sk.json +1 -1
  115. data/lib/countries/cache/locales/sl.json +1 -1
  116. data/lib/countries/cache/locales/so.json +1 -1
  117. data/lib/countries/cache/locales/sq.json +1 -1
  118. data/lib/countries/cache/locales/sr.json +1 -1
  119. data/lib/countries/cache/locales/sv.json +1 -1
  120. data/lib/countries/cache/locales/sw.json +1 -1
  121. data/lib/countries/cache/locales/ta.json +1 -1
  122. data/lib/countries/cache/locales/te.json +1 -1
  123. data/lib/countries/cache/locales/tg.json +1 -1
  124. data/lib/countries/cache/locales/th.json +1 -1
  125. data/lib/countries/cache/locales/ti.json +1 -1
  126. data/lib/countries/cache/locales/tk.json +1 -1
  127. data/lib/countries/cache/locales/tl.json +1 -1
  128. data/lib/countries/cache/locales/tr.json +1 -1
  129. data/lib/countries/cache/locales/tt.json +1 -1
  130. data/lib/countries/cache/locales/ug.json +1 -1
  131. data/lib/countries/cache/locales/uk.json +1 -1
  132. data/lib/countries/cache/locales/ur.json +1 -1
  133. data/lib/countries/cache/locales/uz.json +1 -1
  134. data/lib/countries/cache/locales/ve.json +1 -1
  135. data/lib/countries/cache/locales/vi.json +1 -1
  136. data/lib/countries/cache/locales/wa.json +1 -1
  137. data/lib/countries/cache/locales/wo.json +1 -1
  138. data/lib/countries/cache/locales/xh.json +1 -1
  139. data/lib/countries/cache/locales/yo.json +1 -1
  140. data/lib/countries/cache/locales/zh-cn.json +1 -1
  141. data/lib/countries/cache/locales/zh-hk.json +1 -1
  142. data/lib/countries/cache/locales/zh-tw.json +1 -1
  143. data/lib/countries/cache/locales/zu.json +1 -1
  144. data/lib/countries/configuration.rb +2 -0
  145. data/lib/countries/country/class_methods.rb +20 -103
  146. data/lib/countries/country/currency_methods.rb +2 -0
  147. data/lib/countries/country/emoji.rb +2 -3
  148. data/lib/countries/country/finder_methods.rb +81 -0
  149. data/lib/countries/country.rb +32 -43
  150. data/lib/countries/data/countries/KN.yaml +0 -1
  151. data/lib/countries/data/subdivisions/AD.yaml +14 -7
  152. data/lib/countries/data/subdivisions/AE.yaml +14 -7
  153. data/lib/countries/data/subdivisions/AF.yaml +196 -201
  154. data/lib/countries/data/subdivisions/AG.yaml +16 -22
  155. data/lib/countries/data/subdivisions/AL.yaml +24 -12
  156. data/lib/countries/data/subdivisions/AM.yaml +22 -11
  157. data/lib/countries/data/subdivisions/AO.yaml +36 -18
  158. data/lib/countries/data/subdivisions/AR.yaml +48 -24
  159. data/lib/countries/data/subdivisions/AT.yaml +18 -9
  160. data/lib/countries/data/subdivisions/AU.yaml +16 -8
  161. data/lib/countries/data/subdivisions/AZ.yaml +434 -412
  162. data/lib/countries/data/subdivisions/BA.yaml +75 -223
  163. data/lib/countries/data/subdivisions/BB.yaml +22 -11
  164. data/lib/countries/data/subdivisions/BD.yaml +188 -116
  165. data/lib/countries/data/subdivisions/BE.yaml +174 -161
  166. data/lib/countries/data/subdivisions/BF.yaml +2918 -2860
  167. data/lib/countries/data/subdivisions/BG.yaml +56 -28
  168. data/lib/countries/data/subdivisions/BH.yaml +8 -21
  169. data/lib/countries/data/subdivisions/BI.yaml +176 -157
  170. data/lib/countries/data/subdivisions/BJ.yaml +24 -12
  171. data/lib/countries/data/subdivisions/BN.yaml +8 -4
  172. data/lib/countries/data/subdivisions/BO.yaml +18 -9
  173. data/lib/countries/data/subdivisions/BQ.yaml +6 -3
  174. data/lib/countries/data/subdivisions/BR.yaml +54 -27
  175. data/lib/countries/data/subdivisions/BS.yaml +575 -697
  176. data/lib/countries/data/subdivisions/BT.yaml +40 -20
  177. data/lib/countries/data/subdivisions/BW.yaml +337 -321
  178. data/lib/countries/data/subdivisions/BY.yaml +106 -116
  179. data/lib/countries/data/subdivisions/BZ.yaml +12 -6
  180. data/lib/countries/data/subdivisions/CA.yaml +26 -13
  181. data/lib/countries/data/subdivisions/CD.yaml +488 -525
  182. data/lib/countries/data/subdivisions/CF.yaml +34 -17
  183. data/lib/countries/data/subdivisions/CG.yaml +40 -28
  184. data/lib/countries/data/subdivisions/CH.yaml +52 -26
  185. data/lib/countries/data/subdivisions/CI.yaml +244 -516
  186. data/lib/countries/data/subdivisions/CL.yaml +81 -65
  187. data/lib/countries/data/subdivisions/CM.yaml +20 -10
  188. data/lib/countries/data/subdivisions/CN.yaml +2152 -2084
  189. data/lib/countries/data/subdivisions/CO.yaml +66 -33
  190. data/lib/countries/data/subdivisions/CR.yaml +14 -7
  191. data/lib/countries/data/subdivisions/CU.yaml +32 -16
  192. data/lib/countries/data/subdivisions/CV.yaml +427 -401
  193. data/lib/countries/data/subdivisions/CY.yaml +12 -6
  194. data/lib/countries/data/subdivisions/CZ.yaml +1116 -85
  195. data/lib/countries/data/subdivisions/DE.yaml +32 -16
  196. data/lib/countries/data/subdivisions/DJ.yaml +12 -6
  197. data/lib/countries/data/subdivisions/DK.yaml +25 -17
  198. data/lib/countries/data/subdivisions/DM.yaml +20 -10
  199. data/lib/countries/data/subdivisions/DO.yaml +84 -42
  200. data/lib/countries/data/subdivisions/DZ.yaml +96 -48
  201. data/lib/countries/data/subdivisions/EC.yaml +158 -134
  202. data/lib/countries/data/subdivisions/EE.yaml +501 -334
  203. data/lib/countries/data/subdivisions/EG.yaml +54 -27
  204. data/lib/countries/data/subdivisions/ER.yaml +12 -6
  205. data/lib/countries/data/subdivisions/ES.yaml +1459 -1390
  206. data/lib/countries/data/subdivisions/ET.yaml +22 -11
  207. data/lib/countries/data/subdivisions/FI.yaml +185 -1
  208. data/lib/countries/data/subdivisions/FJ.yaml +443 -424
  209. data/lib/countries/data/subdivisions/FM.yaml +8 -4
  210. data/lib/countries/data/subdivisions/FR.yaml +438 -275
  211. data/lib/countries/data/subdivisions/GA.yaml +18 -9
  212. data/lib/countries/data/subdivisions/GB.yaml +1185 -1708
  213. data/lib/countries/data/subdivisions/GD.yaml +14 -7
  214. data/lib/countries/data/subdivisions/GE.yaml +24 -12
  215. data/lib/countries/data/subdivisions/GH.yaml +114 -155
  216. data/lib/countries/data/subdivisions/GL.yaml +24 -79
  217. data/lib/countries/data/subdivisions/GM.yaml +12 -6
  218. data/lib/countries/data/subdivisions/GN.yaml +444 -403
  219. data/lib/countries/data/subdivisions/GQ.yaml +24 -13
  220. data/lib/countries/data/subdivisions/GR.yaml +114 -73
  221. data/lib/countries/data/subdivisions/GT.yaml +44 -22
  222. data/lib/countries/data/subdivisions/GW.yaml +69 -57
  223. data/lib/countries/data/subdivisions/GY.yaml +20 -10
  224. data/lib/countries/data/subdivisions/HN.yaml +36 -18
  225. data/lib/countries/data/subdivisions/HR.yaml +42 -21
  226. data/lib/countries/data/subdivisions/HT.yaml +73 -63
  227. data/lib/countries/data/subdivisions/HU.yaml +106 -63
  228. data/lib/countries/data/subdivisions/ID.yaml +229 -188
  229. data/lib/countries/data/subdivisions/IE.yaml +128 -97
  230. data/lib/countries/data/subdivisions/IL.yaml +12 -6
  231. data/lib/countries/data/subdivisions/IN.yaml +245 -396
  232. data/lib/countries/data/subdivisions/IQ.yaml +111 -91
  233. data/lib/countries/data/subdivisions/IR.yaml +1463 -1451
  234. data/lib/countries/data/subdivisions/IS.yaml +160 -25
  235. data/lib/countries/data/subdivisions/IT.yaml +8740 -8292
  236. data/lib/countries/data/subdivisions/JM.yaml +28 -14
  237. data/lib/countries/data/subdivisions/JO.yaml +24 -12
  238. data/lib/countries/data/subdivisions/JP.yaml +94 -47
  239. data/lib/countries/data/subdivisions/KE.yaml +95 -48
  240. data/lib/countries/data/subdivisions/KG.yaml +95 -86
  241. data/lib/countries/data/subdivisions/KH.yaml +64 -39
  242. data/lib/countries/data/subdivisions/KI.yaml +6 -3
  243. data/lib/countries/data/subdivisions/KM.yaml +6 -3
  244. data/lib/countries/data/subdivisions/KN.yaml +32 -16
  245. data/lib/countries/data/subdivisions/KP.yaml +24 -227
  246. data/lib/countries/data/subdivisions/KR.yaml +34 -17
  247. data/lib/countries/data/subdivisions/KW.yaml +12 -6
  248. data/lib/countries/data/subdivisions/KZ.yaml +47 -102
  249. data/lib/countries/data/subdivisions/LA.yaml +36 -34
  250. data/lib/countries/data/subdivisions/LB.yaml +71 -63
  251. data/lib/countries/data/subdivisions/LC.yaml +116 -106
  252. data/lib/countries/data/subdivisions/LI.yaml +22 -11
  253. data/lib/countries/data/subdivisions/LK.yaml +445 -411
  254. data/lib/countries/data/subdivisions/LR.yaml +146 -129
  255. data/lib/countries/data/subdivisions/LS.yaml +20 -10
  256. data/lib/countries/data/subdivisions/LT.yaml +1706 -1636
  257. data/lib/countries/data/subdivisions/LU.yaml +24 -12
  258. data/lib/countries/data/subdivisions/LV.yaml +1623 -1577
  259. data/lib/countries/data/subdivisions/LY.yaml +44 -22
  260. data/lib/countries/data/subdivisions/MA.yaml +810 -1589
  261. data/lib/countries/data/subdivisions/MC.yaml +261 -244
  262. data/lib/countries/data/subdivisions/MD.yaml +74 -79
  263. data/lib/countries/data/subdivisions/ME.yaml +217 -195
  264. data/lib/countries/data/subdivisions/MG.yaml +12 -6
  265. data/lib/countries/data/subdivisions/MH.yaml +167 -140
  266. data/lib/countries/data/subdivisions/MK.yaml +160 -80
  267. data/lib/countries/data/subdivisions/ML.yaml +48 -37
  268. data/lib/countries/data/subdivisions/MM.yaml +30 -15
  269. data/lib/countries/data/subdivisions/MN.yaml +44 -22
  270. data/lib/countries/data/subdivisions/MR.yaml +30 -34
  271. data/lib/countries/data/subdivisions/MT.yaml +136 -68
  272. data/lib/countries/data/subdivisions/MU.yaml +24 -262
  273. data/lib/countries/data/subdivisions/MV.yaml +161 -254
  274. data/lib/countries/data/subdivisions/MW.yaml +250 -219
  275. data/lib/countries/data/subdivisions/MX.yaml +67 -47
  276. data/lib/countries/data/subdivisions/MY.yaml +32 -16
  277. data/lib/countries/data/subdivisions/MZ.yaml +22 -11
  278. data/lib/countries/data/subdivisions/NA.yaml +58 -44
  279. data/lib/countries/data/subdivisions/NE.yaml +16 -8
  280. data/lib/countries/data/subdivisions/NG.yaml +74 -37
  281. data/lib/countries/data/subdivisions/NI.yaml +34 -17
  282. data/lib/countries/data/subdivisions/NL.yaml +303 -285
  283. data/lib/countries/data/subdivisions/NO.yaml +39 -17
  284. data/lib/countries/data/subdivisions/NP.yaml +302 -276
  285. data/lib/countries/data/subdivisions/NR.yaml +28 -14
  286. data/lib/countries/data/subdivisions/NZ.yaml +34 -17
  287. data/lib/countries/data/subdivisions/OM.yaml +260 -311
  288. data/lib/countries/data/subdivisions/PA.yaml +57 -44
  289. data/lib/countries/data/subdivisions/PE.yaml +107 -81
  290. data/lib/countries/data/subdivisions/PG.yaml +163 -158
  291. data/lib/countries/data/subdivisions/PH.yaml +5062 -4992
  292. data/lib/countries/data/subdivisions/PK.yaml +145 -235
  293. data/lib/countries/data/subdivisions/PL.yaml +51 -3
  294. data/lib/countries/data/subdivisions/PS.yaml +32 -16
  295. data/lib/countries/data/subdivisions/PT.yaml +53 -33
  296. data/lib/countries/data/subdivisions/PW.yaml +32 -16
  297. data/lib/countries/data/subdivisions/PY.yaml +36 -18
  298. data/lib/countries/data/subdivisions/QA.yaml +27 -78
  299. data/lib/countries/data/subdivisions/RO.yaml +84 -42
  300. data/lib/countries/data/subdivisions/RS.yaml +104 -72
  301. data/lib/countries/data/subdivisions/RU.yaml +166 -83
  302. data/lib/countries/data/subdivisions/RW.yaml +10 -5
  303. data/lib/countries/data/subdivisions/SA.yaml +26 -13
  304. data/lib/countries/data/subdivisions/SB.yaml +20 -10
  305. data/lib/countries/data/subdivisions/SC.yaml +54 -25
  306. data/lib/countries/data/subdivisions/SD.yaml +798 -780
  307. data/lib/countries/data/subdivisions/SE.yaml +42 -21
  308. data/lib/countries/data/subdivisions/SG.yaml +15 -10
  309. data/lib/countries/data/subdivisions/SH.yaml +21 -32
  310. data/lib/countries/data/subdivisions/SI.yaml +475 -263
  311. data/lib/countries/data/subdivisions/SK.yaml +16 -8
  312. data/lib/countries/data/subdivisions/SL.yaml +23 -18
  313. data/lib/countries/data/subdivisions/SM.yaml +18 -9
  314. data/lib/countries/data/subdivisions/SN.yaml +188 -174
  315. data/lib/countries/data/subdivisions/SO.yaml +36 -18
  316. data/lib/countries/data/subdivisions/SR.yaml +20 -10
  317. data/lib/countries/data/subdivisions/SS.yaml +20 -10
  318. data/lib/countries/data/subdivisions/ST.yaml +38 -52
  319. data/lib/countries/data/subdivisions/SV.yaml +28 -14
  320. data/lib/countries/data/subdivisions/SY.yaml +28 -14
  321. data/lib/countries/data/subdivisions/SZ.yaml +8 -4
  322. data/lib/countries/data/subdivisions/TD.yaml +312 -303
  323. data/lib/countries/data/subdivisions/TG.yaml +10 -5
  324. data/lib/countries/data/subdivisions/TH.yaml +211 -133
  325. data/lib/countries/data/subdivisions/TJ.yaml +161 -156
  326. data/lib/countries/data/subdivisions/TL.yaml +26 -13
  327. data/lib/countries/data/subdivisions/TM.yaml +12 -6
  328. data/lib/countries/data/subdivisions/TN.yaml +48 -24
  329. data/lib/countries/data/subdivisions/TO.yaml +10 -5
  330. data/lib/countries/data/subdivisions/TR.yaml +162 -81
  331. data/lib/countries/data/subdivisions/TT.yaml +128 -160
  332. data/lib/countries/data/subdivisions/TV.yaml +57 -63
  333. data/lib/countries/data/subdivisions/TW.yaml +143 -183
  334. data/lib/countries/data/subdivisions/TZ.yaml +62 -31
  335. data/lib/countries/data/subdivisions/UA.yaml +55 -28
  336. data/lib/countries/data/subdivisions/UG.yaml +4806 -4660
  337. data/lib/countries/data/subdivisions/UM.yaml +18 -9
  338. data/lib/countries/data/subdivisions/US.yaml +114 -57
  339. data/lib/countries/data/subdivisions/UY.yaml +99 -80
  340. data/lib/countries/data/subdivisions/UZ.yaml +28 -14
  341. data/lib/countries/data/subdivisions/VC.yaml +12 -6
  342. data/lib/countries/data/subdivisions/VE.yaml +50 -25
  343. data/lib/countries/data/subdivisions/VN.yaml +3576 -3513
  344. data/lib/countries/data/subdivisions/VU.yaml +12 -6
  345. data/lib/countries/data/subdivisions/WF.yaml +6 -3
  346. data/lib/countries/data/subdivisions/WS.yaml +22 -11
  347. data/lib/countries/data/subdivisions/YE.yaml +222 -200
  348. data/lib/countries/data/subdivisions/ZA.yaml +86 -100
  349. data/lib/countries/data/subdivisions/ZM.yaml +20 -10
  350. data/lib/countries/data/subdivisions/ZW.yaml +20 -10
  351. data/lib/countries/data/translations/countries-ab.yaml +254 -0
  352. data/lib/countries/data/translations/countries-af.yaml +254 -0
  353. data/lib/countries/data/translations/countries-ak.yaml +254 -0
  354. data/lib/countries/data/translations/countries-am.yaml +254 -0
  355. data/lib/countries/data/translations/countries-an.yaml +254 -0
  356. data/lib/countries/data/translations/countries-ar.yaml +254 -0
  357. data/lib/countries/data/translations/countries-as.yaml +254 -0
  358. data/lib/countries/data/translations/countries-ay.yaml +254 -0
  359. data/lib/countries/data/translations/countries-az.yaml +254 -0
  360. data/lib/countries/data/translations/countries-ba.yaml +254 -0
  361. data/lib/countries/data/translations/countries-be.yaml +254 -0
  362. data/lib/countries/data/translations/countries-bg.yaml +254 -0
  363. data/lib/countries/data/translations/countries-bi.yaml +254 -0
  364. data/lib/countries/data/translations/countries-bn.yaml +254 -0
  365. data/lib/countries/data/translations/countries-bn_IN.yaml +254 -0
  366. data/lib/countries/data/translations/countries-br.yaml +254 -0
  367. data/lib/countries/data/translations/countries-bs.yaml +254 -0
  368. data/lib/countries/data/translations/countries-ca.yaml +254 -0
  369. data/lib/countries/data/translations/countries-ce.yaml +254 -0
  370. data/lib/countries/data/translations/countries-ch.yaml +254 -0
  371. data/lib/countries/data/translations/countries-cs.yaml +254 -0
  372. data/lib/countries/data/translations/countries-cv.yaml +254 -0
  373. data/lib/countries/data/translations/countries-cy.yaml +254 -0
  374. data/lib/countries/data/translations/countries-da.yaml +254 -0
  375. data/lib/countries/data/translations/countries-de.yaml +254 -0
  376. data/lib/countries/data/translations/countries-dv.yaml +254 -0
  377. data/lib/countries/data/translations/countries-dz.yaml +254 -0
  378. data/lib/countries/data/translations/countries-ee.yaml +254 -0
  379. data/lib/countries/data/translations/countries-el.yaml +254 -0
  380. data/lib/countries/data/translations/countries-en.yaml +254 -0
  381. data/lib/countries/data/translations/countries-eo.yaml +254 -0
  382. data/lib/countries/data/translations/countries-es.yaml +254 -0
  383. data/lib/countries/data/translations/countries-et.yaml +254 -0
  384. data/lib/countries/data/translations/countries-eu.yaml +254 -0
  385. data/lib/countries/data/translations/countries-fa.yaml +254 -0
  386. data/lib/countries/data/translations/countries-ff.yaml +254 -0
  387. data/lib/countries/data/translations/countries-fi.yaml +254 -0
  388. data/lib/countries/data/translations/countries-fo.yaml +254 -0
  389. data/lib/countries/data/translations/countries-fr.yaml +254 -0
  390. data/lib/countries/data/translations/countries-fy.yaml +254 -0
  391. data/lib/countries/data/translations/countries-ga.yaml +254 -0
  392. data/lib/countries/data/translations/countries-gl.yaml +254 -0
  393. data/lib/countries/data/translations/countries-gn.yaml +254 -0
  394. data/lib/countries/data/translations/countries-gu.yaml +254 -0
  395. data/lib/countries/data/translations/countries-gv.yaml +254 -0
  396. data/lib/countries/data/translations/countries-ha.yaml +254 -0
  397. data/lib/countries/data/translations/countries-he.yaml +254 -0
  398. data/lib/countries/data/translations/countries-hi.yaml +254 -0
  399. data/lib/countries/data/translations/countries-hr.yaml +254 -0
  400. data/lib/countries/data/translations/countries-ht.yaml +254 -0
  401. data/lib/countries/data/translations/countries-hu.yaml +254 -0
  402. data/lib/countries/data/translations/countries-hy.yaml +254 -0
  403. data/lib/countries/data/translations/countries-ia.yaml +254 -0
  404. data/lib/countries/data/translations/countries-id.yaml +254 -0
  405. data/lib/countries/data/translations/countries-io.yaml +254 -0
  406. data/lib/countries/data/translations/countries-is.yaml +254 -0
  407. data/lib/countries/data/translations/countries-it.yaml +254 -0
  408. data/lib/countries/data/translations/countries-iu.yaml +254 -0
  409. data/lib/countries/data/translations/countries-ja.yaml +254 -0
  410. data/lib/countries/data/translations/countries-ka.yaml +254 -0
  411. data/lib/countries/data/translations/countries-ki.yaml +254 -0
  412. data/lib/countries/data/translations/countries-kk.yaml +254 -0
  413. data/lib/countries/data/translations/countries-kl.yaml +254 -0
  414. data/lib/countries/data/translations/countries-km.yaml +254 -0
  415. data/lib/countries/data/translations/countries-kn.yaml +254 -0
  416. data/lib/countries/data/translations/countries-ko.yaml +254 -0
  417. data/lib/countries/data/translations/countries-ku.yaml +254 -0
  418. data/lib/countries/data/translations/countries-kv.yaml +254 -0
  419. data/lib/countries/data/translations/countries-kw.yaml +254 -0
  420. data/lib/countries/data/translations/countries-ky.yaml +254 -0
  421. data/lib/countries/data/translations/countries-lo.yaml +254 -0
  422. data/lib/countries/data/translations/countries-lt.yaml +254 -0
  423. data/lib/countries/data/translations/countries-lv.yaml +254 -0
  424. data/lib/countries/data/translations/countries-mi.yaml +254 -0
  425. data/lib/countries/data/translations/countries-mk.yaml +254 -0
  426. data/lib/countries/data/translations/countries-ml.yaml +254 -0
  427. data/lib/countries/data/translations/countries-mn.yaml +254 -0
  428. data/lib/countries/data/translations/countries-mr.yaml +254 -0
  429. data/lib/countries/data/translations/countries-ms.yaml +254 -0
  430. data/lib/countries/data/translations/countries-mt.yaml +254 -0
  431. data/lib/countries/data/translations/countries-my.yaml +254 -0
  432. data/lib/countries/data/translations/countries-na.yaml +254 -0
  433. data/lib/countries/data/translations/countries-nb.yaml +254 -0
  434. data/lib/countries/data/translations/countries-ne.yaml +254 -0
  435. data/lib/countries/data/translations/countries-nl.yaml +254 -0
  436. data/lib/countries/data/translations/countries-nn.yaml +254 -0
  437. data/lib/countries/data/translations/countries-nv.yaml +254 -0
  438. data/lib/countries/data/translations/countries-oc.yaml +254 -0
  439. data/lib/countries/data/translations/countries-or.yaml +254 -0
  440. data/lib/countries/data/translations/countries-pa.yaml +254 -0
  441. data/lib/countries/data/translations/countries-pi.yaml +254 -0
  442. data/lib/countries/data/translations/countries-pl.yaml +254 -0
  443. data/lib/countries/data/translations/countries-ps.yaml +254 -0
  444. data/lib/countries/data/translations/countries-pt.yaml +254 -0
  445. data/lib/countries/data/translations/countries-pt_BR.yaml +254 -0
  446. data/lib/countries/data/translations/countries-ro.yaml +254 -0
  447. data/lib/countries/data/translations/countries-ru.yaml +254 -0
  448. data/lib/countries/data/translations/countries-rw.yaml +254 -0
  449. data/lib/countries/data/translations/countries-sc.yaml +254 -0
  450. data/lib/countries/data/translations/countries-sd.yaml +254 -0
  451. data/lib/countries/data/translations/countries-si.yaml +254 -0
  452. data/lib/countries/data/translations/countries-sk.yaml +254 -0
  453. data/lib/countries/data/translations/countries-sl.yaml +254 -0
  454. data/lib/countries/data/translations/countries-so.yaml +254 -0
  455. data/lib/countries/data/translations/countries-sq.yaml +254 -0
  456. data/lib/countries/data/translations/countries-sr.yaml +254 -0
  457. data/lib/countries/data/translations/countries-sv.yaml +254 -0
  458. data/lib/countries/data/translations/countries-sw.yaml +254 -0
  459. data/lib/countries/data/translations/countries-ta.yaml +254 -0
  460. data/lib/countries/data/translations/countries-te.yaml +254 -0
  461. data/lib/countries/data/translations/countries-tg.yaml +254 -0
  462. data/lib/countries/data/translations/countries-th.yaml +254 -0
  463. data/lib/countries/data/translations/countries-ti.yaml +254 -0
  464. data/lib/countries/data/translations/countries-tk.yaml +254 -0
  465. data/lib/countries/data/translations/countries-tl.yaml +254 -0
  466. data/lib/countries/data/translations/countries-tr.yaml +254 -0
  467. data/lib/countries/data/translations/countries-tt.yaml +254 -0
  468. data/lib/countries/data/translations/countries-ug.yaml +254 -0
  469. data/lib/countries/data/translations/countries-uk.yaml +254 -0
  470. data/lib/countries/data/translations/countries-ur.yaml +254 -0
  471. data/lib/countries/data/translations/countries-uz.yaml +254 -0
  472. data/lib/countries/data/translations/countries-ve.yaml +254 -0
  473. data/lib/countries/data/translations/countries-vi.yaml +254 -0
  474. data/lib/countries/data/translations/countries-wa.yaml +254 -0
  475. data/lib/countries/data/translations/countries-wo.yaml +254 -0
  476. data/lib/countries/data/translations/countries-xh.yaml +254 -0
  477. data/lib/countries/data/translations/countries-yo.yaml +254 -0
  478. data/lib/countries/data/translations/countries-zh_CN.yaml +254 -0
  479. data/lib/countries/data/translations/countries-zh_HK.yaml +254 -0
  480. data/lib/countries/data/translations/countries-zh_TW.yaml +254 -0
  481. data/lib/countries/data/translations/countries-zu.yaml +254 -0
  482. data/lib/countries/data.rb +45 -42
  483. data/lib/countries/global.rb +2 -0
  484. data/lib/countries/iso3166.rb +3 -1
  485. data/lib/countries/kwarg_struct.rb +2 -0
  486. data/lib/countries/mongoid.rb +2 -0
  487. data/lib/countries/sources/cldr/downloader.rb +8 -8
  488. data/lib/countries/sources/cldr/subdivision.rb +3 -0
  489. data/lib/countries/sources/cldr/subdivision_updater.rb +23 -17
  490. data/lib/countries/sources/local/cached_loader.rb +3 -0
  491. data/lib/countries/sources/local/subdivision.rb +5 -2
  492. data/lib/countries/sources.rb +2 -0
  493. data/lib/countries/structure.rb +1 -1
  494. data/lib/countries/subdivision.rb +21 -8
  495. data/lib/countries/tasks/geocoding.rake +15 -6
  496. data/lib/countries/tasks/postal_codes.rake +5 -3
  497. data/lib/countries/timezones.rb +5 -2
  498. data/lib/countries/translations.rb +2 -0
  499. data/lib/countries/version.rb +3 -1
  500. data/lib/countries.rb +2 -0
  501. data/spec/00_global_spec.rb +2 -0
  502. data/spec/configuration_spec.rb +11 -5
  503. data/spec/country_spec.rb +131 -38
  504. data/spec/data_spec.rb +85 -21
  505. data/spec/mongoid_spec.rb +2 -2
  506. data/spec/perf_spec.rb +16 -16
  507. data/spec/spec_helper.rb +2 -0
  508. data/spec/subdivision_spec.rb +6 -4
  509. data/spec/thread_safety_spec.rb +4 -3
  510. data/spec/timezone_spec.rb +2 -0
  511. metadata +146 -34
  512. data/lib/countries/cache/locales/zh.json +0 -1
  513. data/lib/countries/data/subdivisions/AI.yaml +0 -197
  514. data/lib/countries/data/subdivisions/BM.yaml +0 -155
  515. data/lib/countries/data/subdivisions/CK.yaml +0 -155
  516. data/lib/countries/data/subdivisions/EH.yaml +0 -80
  517. data/lib/countries/data/subdivisions/SJ.yaml +0 -29
  518. data/lib/countries/data/subdivisions/TK.yaml +0 -43
  519. data/lib/countries/data/translation_corrections.yaml +0 -51
  520. data/lib/countries/setup.rb +0 -18
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sixarm_ruby_unaccent'
2
4
 
3
5
  module ISO3166
4
6
  UNSEARCHABLE_METHODS = [:translations].freeze
5
7
 
6
- def self::Country(country_data_or_country)
8
+ def self.Country(country_data_or_country)
7
9
  case country_data_or_country
8
10
  when ISO3166::Country
9
11
  country_data_or_country
@@ -15,9 +17,6 @@ module ISO3166
15
17
  end
16
18
 
17
19
  module CountryClassMethods
18
- FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/
19
- SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/
20
-
21
20
  def new(country_data)
22
21
  super if country_data.is_a?(Hash) || codes.include?(country_data.to_s.upcase)
23
22
  end
@@ -33,10 +32,6 @@ module ISO3166
33
32
 
34
33
  alias countries all
35
34
 
36
- def all_translated(locale = 'en')
37
- translations(locale).values
38
- end
39
-
40
35
  def all_names_with_codes(locale = 'en')
41
36
  Country.all.map do |c|
42
37
  lc = (c.translation(locale) || c.iso_short_name)
@@ -50,64 +45,23 @@ module ISO3166
50
45
  end
51
46
  end
52
47
 
48
+ def all_translated(locale = 'en')
49
+ translations(locale).values
50
+ end
51
+
53
52
  def translations(locale = 'en')
54
- i18n_data_countries = I18nData.countries(locale.upcase)
53
+ locale = locale.downcase
54
+ file_path = ISO3166::Data.datafile_path(%W[locales #{locale}.json])
55
+ translations = JSON.parse(File.read(file_path))
55
56
 
56
- custom_countries = (ISO3166::Data.codes - i18n_data_countries.keys).map do |code|
57
+ custom_countries = {}
58
+ (ISO3166::Data.codes - ISO3166::Data.loaded_codes).each do |code|
57
59
  country = ISO3166::Country[code]
58
60
  translation = country.translations[locale] || country.iso_short_name
59
- [code, translation]
60
- end.to_h
61
-
62
- i18n_data_countries.merge(custom_countries)
63
- end
64
-
65
- def search(query)
66
- country = new(query.to_s.upcase)
67
- country && country.valid? ? country : nil
68
- end
69
-
70
- def [](query)
71
- search(query)
72
- end
73
-
74
- def method_missing(method_name, *arguments)
75
- matches = method_name.to_s.match(FIND_BY_REGEX)
76
- return_all = matches[1]
77
- super unless matches
78
-
79
- if matches[3] == 'names'
80
- if RUBY_VERSION =~ /^3\.\d\.\d/
81
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
82
- else
83
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1
84
- end
61
+ custom_countries[code] = translation
85
62
  end
86
63
 
87
- countries = find_by(matches[3], arguments[0], matches[2])
88
- return_all ? countries : countries.last
89
- end
90
-
91
- def respond_to_missing?(method_name, include_private = false)
92
- matches = method_name.to_s.match(FIND_BY_REGEX)
93
- if matches && matches[3]
94
- instance_methods.include?(matches[3].to_sym)
95
- else
96
- super
97
- end
98
- end
99
-
100
- def find_all_by(attribute, val)
101
- attributes, lookup_value = parse_attributes(attribute, val)
102
-
103
- ISO3166::Data.cache.select do |_, v|
104
- country = Country.new(v)
105
- attributes.any? do |attr|
106
- Array(country.send(attr)).any? do |n|
107
- lookup_value === cached(n) { parse_value(n) }
108
- end
109
- end
110
- end
64
+ translations.merge(custom_countries)
111
65
  end
112
66
 
113
67
  def subdivisions(alpha2)
@@ -117,58 +71,20 @@ module ISO3166
117
71
 
118
72
  def create_subdivisions(subdivision_data)
119
73
  subdivision_data.each_with_object({}) do |(k, v), hash|
120
- data = v.merge('code' => k.to_s)
121
- hash[k] = Subdivision.new(data)
74
+ hash[k] = Subdivision.new(v)
122
75
  end
123
76
  end
124
77
 
125
78
  protected
126
79
 
127
- def strip_accents(v)
128
- if v.is_a?(Regexp)
129
- Regexp.new(v.source.unaccent, 'i')
80
+ def strip_accents(string)
81
+ if string.is_a?(Regexp)
82
+ Regexp.new(string.source.unaccent, 'i')
130
83
  else
131
- v.to_s.unaccent.downcase
84
+ string.to_s.unaccent.downcase
132
85
  end
133
86
  end
134
87
 
135
- def parse_attributes(attribute, val)
136
- raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
137
-
138
- attributes = Array(attribute.to_s)
139
- if attribute.to_s == 'name'
140
- if RUBY_VERSION =~ /^3\.\d\.\d/
141
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
142
- else
143
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1
144
- end
145
- # 'find_by_name' and 'find_*_by_name' will be changed for 5.0
146
- # The addition of 'iso_short_name' here ensures the behaviour of 4.1 is kept for 4.2
147
- attributes = %w[iso_short_name unofficial_names translated_names]
148
- end
149
-
150
- [attributes, parse_value(val)]
151
- end
152
-
153
- def searchable_attribute?(attribute)
154
- searchable_attributes.include?(attribute.to_sym)
155
- end
156
-
157
- def searchable_attributes
158
- instance_methods - UNSEARCHABLE_METHODS
159
- end
160
-
161
- def find_by(attribute, value, obj = nil)
162
- find_all_by(attribute.downcase, value).map do |country|
163
- obj.nil? ? country : new(country.last)
164
- end
165
- end
166
-
167
- def parse_value(value)
168
- value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
169
- strip_accents(value)
170
- end
171
-
172
88
  def subdivision_data(alpha2)
173
89
  file = subdivision_file_path(alpha2)
174
90
  File.exist?(file) ? YAML.load_file(file) : {}
@@ -190,6 +106,7 @@ module ISO3166
190
106
  def cached(value)
191
107
  @_parsed_values_cache ||= {}
192
108
  return @_parsed_values_cache[value] if @_parsed_values_cache[value]
109
+
193
110
  @_parsed_values_cache[value] = yield
194
111
  end
195
112
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'money'
2
4
 
3
5
  module ISO3166
@@ -1,5 +1,4 @@
1
- #!/bin/env ruby
2
- # encoding: utf-8
1
+ # frozen_string_literal: true
3
2
 
4
3
  module ISO3166
5
4
  module Emoji
@@ -36,7 +35,7 @@ module ISO3166
36
35
  #
37
36
  # The emoji flag for this country, using Unicode Regional Indicator characters. e.g: "U+1F1FA U+1F1F8" for 🇺🇸
38
37
  def emoji_flag
39
- alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join('')
38
+ alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join
40
39
  end
41
40
  end
42
41
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ISO3166
4
+ module CountryFinderMethods
5
+ FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/.freeze
6
+ SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/.freeze
7
+
8
+ def search(query)
9
+ country = new(query.to_s.upcase)
10
+ country&.valid? ? country : nil
11
+ end
12
+
13
+ def [](query)
14
+ search(query)
15
+ end
16
+
17
+ def find_all_by(attribute, val)
18
+ attributes, lookup_value = parse_attributes(attribute, val)
19
+
20
+ ISO3166::Data.cache.select do |_, v|
21
+ country = Country.new(v)
22
+ attributes.any? do |attr|
23
+ Array(country.send(attr)).any? do |n|
24
+ lookup_value === cached(n) { parse_value(n) }
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ def method_missing(method_name, *arguments)
31
+ matches = method_name.to_s.match(FIND_BY_REGEX)
32
+ return_all = matches[1]
33
+ super unless matches
34
+
35
+ countries = find_by(matches[3], arguments[0], matches[2])
36
+ return_all ? countries : countries.last
37
+ end
38
+
39
+ def respond_to_missing?(method_name, include_private = false)
40
+ matches = method_name.to_s.match(FIND_BY_REGEX)
41
+ if matches && matches[3]
42
+ instance_methods.include?(matches[3].to_sym)
43
+ else
44
+ super
45
+ end
46
+ end
47
+
48
+ protected
49
+
50
+ def find_by(attribute, value, obj = nil)
51
+ find_all_by(attribute.downcase, value).map do |country|
52
+ obj.nil? ? country : new(country.last)
53
+ end
54
+ end
55
+
56
+ def parse_attributes(attribute, val)
57
+ raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
58
+
59
+ attributes = Array(attribute.to_s)
60
+ if attribute.to_s == 'any_name'
61
+ attributes = %w[iso_long_name iso_short_name unofficial_names translated_names]
62
+ end
63
+
64
+ [attributes, parse_value(val)]
65
+ end
66
+
67
+ def parse_value(value)
68
+ value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
69
+ strip_accents(value)
70
+ end
71
+
72
+ def searchable_attribute?(attribute)
73
+ searchable_attributes.include?(attribute.to_sym)
74
+ end
75
+
76
+ def searchable_attributes
77
+ # Add name and names until we complete the deprecation of the finders
78
+ instance_methods - UNSEARCHABLE_METHODS + [:name, :names, :any_name]
79
+ end
80
+ end
81
+ end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class Country
3
5
  extend CountryClassMethods
6
+ extend CountryFinderMethods
4
7
  include Emoji
5
8
  attr_reader :data
6
9
 
@@ -31,24 +34,6 @@ module ISO3166
31
34
  alias zip_format postal_code_format
32
35
  alias languages languages_official
33
36
 
34
- def latitude_dec
35
- if RUBY_VERSION =~ /^3\.\d\.\d/
36
- warn "DEPRECATION WARNING: The Country#latitude_dec method has been deprecated and will be removed in 5.0. Please use Country#latitude instead.", uplevel: 1, category: :deprecated
37
- else
38
- warn "DEPRECATION WARNING: The Country#latitude_dec method has been deprecated and will be removed in 5.0. Please use Country#latitude instead.", uplevel: 1
39
- end
40
- latitude
41
- end
42
-
43
- def longitude_dec
44
- if RUBY_VERSION =~ /^3\.\d\.\d/
45
- warn "DEPRECATION WARNING: The Country#longitude_dec method has been deprecated and will be removed in 5.0. Please use Country#longitude instead.", uplevel: 1, category: :deprecated
46
- else
47
- warn "DEPRECATION WARNING: The Country#longitude_dec method has been deprecated and will be removed in 5.0. Please use Country#longitude instead.", uplevel: 1
48
- end
49
- longitude
50
- end
51
-
52
37
  def ==(other)
53
38
  other.respond_to?(:alpha2) && other.alpha2 == alpha2
54
39
  end
@@ -79,13 +64,41 @@ module ISO3166
79
64
  end
80
65
  end
81
66
 
67
+ # @param types [Array<String>] The locale to use for translations.
68
+ # @return [Array<ISO3166::Subdivision>] the list of subdivisions of the given type(s) for this Country.
69
+ def subdivisions_of_types(types)
70
+ subdivisions.select{|k,v| types.include?(v.type)}
71
+ end
72
+
73
+ # @return [Array<String>] the list of subdivision types for this country
74
+ def subdivision_types
75
+ subdivisions.map{|k,v| v['type']}.uniq
76
+ end
77
+
78
+ # @return [Array<String>] the list of humanized subdivision types for this country. Uses ActiveSupport's `#humanize` if available
79
+ def humanized_subdivision_types
80
+ if String.instance_methods.include?(:humanize)
81
+ subdivisions.map{|k,v| v['type'].humanize}.uniq
82
+ else
83
+ subdivisions.map{|k,v| v['type'][0].upcase + v['type'].tr('_', ' ')[1..-1]}.uniq
84
+ end
85
+ end
86
+
82
87
  # @param locale [String] The locale to use for translations.
83
88
  # @return [Array<Array>] This Country's subdivision pairs of names and codes.
84
89
  def subdivision_names_with_codes(locale = 'en')
85
90
  subdivisions.map { |k, v| [v.translations[locale] || v.name, k] }
86
91
  end
87
92
 
88
- alias states subdivisions
93
+ def states
94
+ if RUBY_VERSION =~ /^3\.\d\.\d/
95
+ warn "DEPRECATION WARNING: The Country#states method has been deprecated and will be removed in 6.0. Please use Country#subdivisions instead.", uplevel: 1, category: :deprecated
96
+ else
97
+ warn "DEPRECATION WARNING: The Country#states method has been deprecated and will be removed in 6.0. Please use Country#subdivisions instead.", uplevel: 1
98
+ end
99
+
100
+ subdivisions
101
+ end
89
102
 
90
103
  # +true+ if this country is a member of the European Union.
91
104
  def in_eu?
@@ -136,28 +149,6 @@ module ISO3166
136
149
  @local_name ||= local_names.first
137
150
  end
138
151
 
139
- # @return [String] This Country's ISO Short Name
140
- # @deprecated Use {#iso_short_name} instead.
141
- def name
142
- if RUBY_VERSION =~ /^3\.\d\.\d/
143
- warn "DEPRECATION WARNING: The Country#name method has been deprecated. Please use Country#iso_short_name instead or refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
144
- else
145
- warn "DEPRECATION WARNING: The Country#name method has been deprecated. Please use Country#iso_short_name instead or refer to the README file for more information on this change.", uplevel: 1
146
- end
147
- iso_short_name
148
- end
149
-
150
- # @return [Array<String>] Array of unofficial, slang names or aliases for this Country
151
- # @deprecated Use {#unofficial_names} instead.
152
- def names
153
- if RUBY_VERSION =~ /^3\.\d\.\d/
154
- warn "DEPRECATION WARNING: The Country#names method has been deprecated. Please use Country#unofficial_names instead or refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
155
- else
156
- warn "DEPRECATION WARNING: The Country#names method has been deprecated. Please use Country#unofficial_names instead or refer to the README file for more information on this change.", uplevel: 1
157
- end
158
- unofficial_names
159
- end
160
-
161
152
  # @!attribute alpha2
162
153
  # @return [String] the ISO3166 alpha-2 code for this Country
163
154
  #
@@ -242,8 +233,6 @@ module ISO3166
242
233
  # @!attribute world_region
243
234
  # @return [String] The "World Region" this country is in: +"AMER"+ , +"APAC"+ or +"EMEA"+
244
235
 
245
-
246
-
247
236
  private
248
237
 
249
238
  def reload
@@ -9,7 +9,6 @@ KN:
9
9
  geo:
10
10
  latitude: 17.357822
11
11
  longitude: -62.782998
12
- longitude_dec: "-62.643184661865234"
13
12
  max_latitude: 17.4205891
14
13
  max_longitude: -62.52369989999999
15
14
  min_latitude: 17.07861
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  '02':
3
3
  name: Canillo
4
- code:
4
+ code: '02'
5
5
  unofficial_names: Canillo
6
6
  geo:
7
7
  latitude: 42.5666535
@@ -13,9 +13,10 @@
13
13
  translations:
14
14
  en: Canillo
15
15
  comments:
16
+ type: parish
16
17
  '03':
17
18
  name: Encamp
18
- code:
19
+ code: '03'
19
20
  unofficial_names: Encamp
20
21
  geo:
21
22
  latitude: 42.5362652
@@ -27,9 +28,10 @@
27
28
  translations:
28
29
  en: Encamp
29
30
  comments:
31
+ type: parish
30
32
  '04':
31
33
  name: La Massana
32
- code:
34
+ code: '04'
33
35
  unofficial_names: La Massana
34
36
  geo:
35
37
  latitude: 42.545625
@@ -41,9 +43,10 @@
41
43
  translations:
42
44
  en: La Massana
43
45
  comments:
46
+ type: parish
44
47
  '05':
45
48
  name: Ordino
46
- code:
49
+ code: '05'
47
50
  unofficial_names: Ordino
48
51
  geo:
49
52
  latitude: 42.5556547
@@ -55,9 +58,10 @@
55
58
  translations:
56
59
  en: Ordino
57
60
  comments:
61
+ type: parish
58
62
  '06':
59
63
  name: Sant Julià de Lòria
60
- code:
64
+ code: '06'
61
65
  unofficial_names:
62
66
  - Saint Julia de Loria
63
67
  geo:
@@ -70,9 +74,10 @@
70
74
  translations:
71
75
  en: Sant Julià de Lòria
72
76
  comments:
77
+ type: parish
73
78
  '07':
74
79
  name: Andorra la Vella
75
- code:
80
+ code: '07'
76
81
  unofficial_names:
77
82
  - Andorra la Vieja
78
83
  - Andorre-la-Vieille
@@ -86,9 +91,10 @@
86
91
  translations:
87
92
  en: Andorra la Vella
88
93
  comments:
94
+ type: parish
89
95
  '08':
90
96
  name: Escaldes-Engordany
91
- code:
97
+ code: '08'
92
98
  unofficial_names:
93
99
  - Les Escaldes
94
100
  geo:
@@ -101,3 +107,4 @@
101
107
  translations:
102
108
  en: Escaldes-Engordany
103
109
  comments:
110
+ type: parish
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  AJ:
3
3
  name: "'Ajmān"
4
- code:
4
+ code: AJ
5
5
  unofficial_names: "-إمارة عجمانّ - Ujman"
6
6
  geo:
7
7
  latitude: 25.3995
@@ -74,9 +74,10 @@ AJ:
74
74
  'no': Emiratet Ajman
75
75
  yo_BJ: Ajman
76
76
  comments:
77
+ type: emirate
77
78
  AZ:
78
79
  name: Abū Z̧aby [Abu Dhabi]
79
- code:
80
+ code: AZ
80
81
  unofficial_names:
81
82
  - أبو ظبي
82
83
  - Abu Zabi
@@ -157,9 +158,10 @@ AZ:
157
158
  mk: Абу Даби
158
159
  'no': Emiratet Abu Dhabi
159
160
  comments:
161
+ type: emirate
160
162
  DU:
161
163
  name: Dubayy
162
- code:
164
+ code: DU
163
165
  unofficial_names:
164
166
  - دبي
165
167
  - Dubai
@@ -232,9 +234,10 @@ DU:
232
234
  bs: Dubai
233
235
  'no': Emiratet Dubai
234
236
  comments:
237
+ type: emirate
235
238
  FU:
236
239
  name: Al Fujayrah
237
- code:
240
+ code: FU
238
241
  unofficial_names:
239
242
  - الفجيرة
240
243
  - Al Fujayrah
@@ -309,9 +312,10 @@ FU:
309
312
  'no': Emiratet Fujairah
310
313
  yo_BJ: Fujairah
311
314
  comments:
315
+ type: emirate
312
316
  RK:
313
317
  name: Ra's al Khaymah
314
- code:
318
+ code: RK
315
319
  unofficial_names:
316
320
  - إمارة رأس الخيمة
317
321
  - Ras al-Khaimah
@@ -385,9 +389,10 @@ RK:
385
389
  'no': Emiratet Ras al-Khaimah
386
390
  yo_BJ: Ras al Khaimah
387
391
  comments:
392
+ type: emirate
388
393
  SH:
389
394
  name: Ash Shariqah [Sharjah]
390
- code:
395
+ code: SH
391
396
  unofficial_names:
392
397
  - إمارة الشارقةّ
393
398
  - Ash Shariqah
@@ -462,9 +467,10 @@ SH:
462
467
  'no': Emiratet Sharjah
463
468
  yo_BJ: Sharjah
464
469
  comments:
470
+ type: emirate
465
471
  UQ:
466
472
  name: Umm al Qaywayn
467
- code:
473
+ code: UQ
468
474
  unofficial_names:
469
475
  - أمّ القيوين
470
476
  - Umm al-Quwain
@@ -537,3 +543,4 @@ UQ:
537
543
  'no': Emiratet Umm al-Qaiwain
538
544
  yo_BJ: Um Al Quwain
539
545
  comments:
546
+ type: emirate