countries 4.2.3 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'geocoder'
2
4
  require 'retryable'
3
5
 
@@ -16,7 +18,7 @@ def geocode(query, params)
16
18
  Retryable.retryable(tries: 3, sleep: ->(n) { 2**n }) do
17
19
  Geocoder.search(query, params: params).first
18
20
  end
19
- rescue => e
21
+ rescue Geocoder::Error, Geocoder::LookupTimeout => e
20
22
  warn "Attempts exceeded for query #{query}, last error was #{e.message}"
21
23
  nil
22
24
  end
@@ -26,7 +28,7 @@ def load_country_yaml(alpha2)
26
28
  end
27
29
 
28
30
  def save_country_yaml(alpha2, data)
29
- File.open(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"), 'w+') { |f| f.write data.to_yaml }
31
+ File.write(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"), data.to_yaml)
30
32
  end
31
33
 
32
34
  def country_codes
@@ -44,7 +46,10 @@ namespace :geocode do
44
46
  data = load_country_yaml(country.alpha2)
45
47
 
46
48
  next unless (result = geocode(country.iso_short_name, {region: country.alpha2}))
47
- puts "WARNING:: Geocoder returned something that was not a country for #{country.alpha2}" unless result.types.include?('country')
49
+
50
+ unless result.types.include?('country')
51
+ puts "WARNING:: Geocoder returned something that was not a country for #{country.alpha2}"
52
+ end
48
53
  geometry = result.geometry
49
54
 
50
55
  # Extract center point data
@@ -55,6 +60,7 @@ namespace :geocode do
55
60
 
56
61
  # Extract bounding box data
57
62
  next unless geometry['bounds']
63
+
58
64
  data[code]['geo']['bounds'] = geometry['bounds']
59
65
  data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
60
66
  data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
@@ -73,10 +79,10 @@ namespace :geocode do
73
79
  ISO3166::Country.all.select(&:subdivisions?).each do |c|
74
80
  # Iterate subdivisions
75
81
  state_data = c.subdivisions.dup
76
- state_data.reject { |_, data| data['geo'] }.each do |code, data|
82
+ state_data.reject { |_, data| data['geo'] }.each do |code, _|
77
83
  location = "#{c.alpha2}-#{code}"
78
84
 
79
- next unless (result = geocode(location, {region: c.alpha2}))
85
+ next unless (result = geocode(location, { region: c.alpha2 }))
80
86
 
81
87
  geometry = result.geometry
82
88
  if geometry['location']
@@ -84,14 +90,17 @@ namespace :geocode do
84
90
  state_data[code]['geo']['latitude'] = geometry['location']['lat']
85
91
  state_data[code]['geo']['longitude'] = geometry['location']['lng']
86
92
  end
93
+
87
94
  next unless geometry['bounds']
95
+
88
96
  state_data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
89
97
  state_data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
90
98
  state_data[code]['geo']['max_latitude'] = geometry['bounds']['northeast']['lat']
91
99
  state_data[code]['geo']['max_longitude'] = geometry['bounds']['northeast']['lng']
92
100
  end
93
101
  # Write updated YAML for current country
94
- File.open(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'subdivisions', "#{c.alpha2}.yaml"), 'w+') { |f| f.write state_data.to_yaml }
102
+ out = File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'subdivisions', "#{c.alpha2}.yaml")
103
+ File.write(out, state_data.to_yaml)
95
104
  end
96
105
  end
97
106
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :postal_codes do
2
4
  desc 'Retrieve and update postal codes and their format'
3
5
  task :update do
@@ -20,13 +22,13 @@ namespace :postal_codes do
20
22
  json = JSON.parse(response) rescue {}
21
23
  puts ' - Returned empty data. Skipping ' and next if json.empty?
22
24
 
23
- postal_code = ['postal_code', !!json['zip']]
25
+ postal_code = ['postal_code', !json['zip'].nil?]
24
26
  postal_code_format = ['postal_code_format', json['zip']]
25
27
 
26
28
  if postal_code_index
27
29
  data[postal_code_index] = postal_code
28
30
  else
29
- postal_code_index = data.find_index { |d| d[0] == 'nationality' } + 1 || data.size
31
+ postal_code_index = (data.find_index { |d| d[0] == 'nationality' } + 1) || data.size
30
32
  data.insert(postal_code_index, postal_code)
31
33
  end
32
34
 
@@ -42,7 +44,7 @@ namespace :postal_codes do
42
44
 
43
45
  yaml[country_code] = data.to_h
44
46
 
45
- File.open(country_file, 'w') { |file| file.write(yaml.to_yaml) }
47
+ File.write(country_file, yaml.to_yaml)
46
48
  end
47
49
  end
48
50
  end
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  # Extend Country class with support for timezones. Requires the {tzinfo}[https://github.com/tzinfo/tzinfo] gem
3
5
  #
4
6
  # gem 'tzinfo'
5
7
  #
6
8
  module TimezoneExtensions
9
+ # TODO: rename method to tz_country or something similar
7
10
  def timezones
8
- @tz_country ||= TZInfo::Country.get(alpha2)
11
+ @timezones ||= TZInfo::Country.get(alpha2)
9
12
  end
10
13
  end
11
14
  end
12
15
 
13
- ISO3166::Country.send(:include, ISO3166::TimezoneExtensions)
16
+ ISO3166::Country.include ISO3166::TimezoneExtensions
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  # Extend the hash class to allow locale lookup fall back behavior
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Countries
2
- VERSION = '4.2.3'.freeze
4
+ VERSION = '5.1.0'.freeze
3
5
  end
data/lib/countries.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sixarm_ruby_unaccent'
2
4
 
3
5
  require 'countries/version'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe 'global Country class', order: :defined do
2
4
  context "when loaded via 'iso3166' existence" do
3
5
  subject { defined?(Country) }
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
  require 'i18n'
4
5
 
@@ -16,14 +17,14 @@ describe 'ISO3166.configuration' do
16
17
  end
17
18
 
18
19
  it 'locales are assumed from I18n.available_locales' do
19
- I18n.available_locales = [:de, :en]
20
+ I18n.available_locales = %i[de en]
20
21
  ISO3166.reset
21
22
  expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
22
23
  expect(ISO3166::Country.new('DE').translation(:es)).to eq nil
23
24
  end
24
25
 
25
26
  it 'unsupported locales do not affect supported locales' do
26
- I18n.available_locales = [:de, :en, :unsupported]
27
+ I18n.available_locales = %i[de en unsupported]
27
28
  ISO3166.reset
28
29
  expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
29
30
  expect(ISO3166::Country.new('DE').translation(:es)).to eq nil
@@ -36,7 +37,7 @@ describe 'ISO3166.configuration' do
36
37
  end
37
38
 
38
39
  it 'locales can be changed' do
39
- ISO3166.configuration.locales = [:es, :de, :en]
40
+ ISO3166.configuration.locales = %i[es de en]
40
41
  expect(ISO3166::Country.new('DE').translation(:es)).to eq 'Alemania'
41
42
  expect(ISO3166::Country.new('DE').translation(:en)).to eq 'Germany'
42
43
  expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
@@ -44,7 +45,12 @@ describe 'ISO3166.configuration' do
44
45
 
45
46
  it 'locales can be changed with a block' do
46
47
  ISO3166.configure do |config|
47
- config.locales = [:af, :am, :ar, :as, :az, :be, :bg, :bn, :br, :bs, :ca, :cs, :cy, :da, :de, :dz, :el, :en, :eo, :es, :et, :eu, :fa, :fi, :fo, :fr, :ga, :gl, :gu, :he, :hi, :hr, :hu, :hy, :ia, :id, :is, :it, :ja, :ka, :kk, :km, :kn, :ko, :ku, :lt, :lv, :mi, :mk, :ml, :mn, :mr, :ms, :mt, :nb, :ne, :nl, :nn, :oc, :or, :pa, :pl, :ps, :pt, :ro, :ru, :rw, :si, :sk, :sl, :so, :sq, :sr, :sv, :sw, :ta, :te, :th, :ti, :tk, :tl, :tr, :tt, :ug, :uk, :ve, :vi, :wa, :wo, :xh, :zh, :zu]
48
+ config.locales = %i[af am ar as az be bg bn br bs ca cs cy da de dz el en
49
+ eo es et eu fa fi fo fr ga gl gu he hi hr hu hy ia id
50
+ is it ja ka kk km kn ko ku lt lv mi mk ml mn mr ms mt
51
+ nb ne nl nn oc or pa pl ps pt ro ru rw si sk sl so sq
52
+ sr sv sw ta te th ti tk tl tr tt ug uk ve vi wa wo xh
53
+ zh zu]
48
54
  end
49
55
 
50
56
  expect(ISO3166::Country.new('DE').translations.size).to eq 92
data/spec/country_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'spec_helper'
4
4
  NUM_OF_COUNTRIES = 249
@@ -48,7 +48,9 @@ describe ISO3166::Country do
48
48
  end
49
49
 
50
50
  it 'should return alternate names' do
51
- expect(country.unofficial_names).to eq(['United States', 'USA', 'Murica', 'Vereinigte Staaten von Amerika', 'États-Unis', 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
51
+ expect(country.unofficial_names).to eq(['United States', 'USA', 'Murica',
52
+ 'Vereinigte Staaten von Amerika', 'États-Unis',
53
+ 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
52
54
  end
53
55
 
54
56
  it 'should return translations' do
@@ -85,7 +87,7 @@ describe ISO3166::Country do
85
87
  expect(country.postal_code_format).to_not be_nil
86
88
 
87
89
  regex = Regexp.new(country.postal_code_format)
88
- expect(regex).to match("12345-6789")
90
+ expect(regex).to match('12345-6789')
89
91
 
90
92
  antarctica = ISO3166::Country.search('AQ')
91
93
  expect(antarctica.postal_code_format).to be_nil
@@ -123,7 +125,7 @@ describe ISO3166::Country do
123
125
  let(:country) { ISO3166::Country.search('BE') }
124
126
 
125
127
  it 'should return its local names based on its languages' do
126
- expect(country.local_names).to match_array(%w(België Belgique Belgien))
128
+ expect(country.local_names).to match_array(%w[België Belgique Belgien])
127
129
  end
128
130
 
129
131
  it 'should return its first local name' do
@@ -219,7 +221,7 @@ describe ISO3166::Country do
219
221
  end
220
222
 
221
223
  describe 'subdivisions' do
222
- let(:virginia) { country.states['VA'] }
224
+ let(:virginia) { country.subdivisions['VA'] }
223
225
  it 'should return an empty hash for a country with no ISO3166-2' do
224
226
  expect(ISO3166::Country.search('VA').subdivisions.size).to eq(0)
225
227
  end
@@ -228,8 +230,8 @@ describe ISO3166::Country do
228
230
  expect(country.subdivisions.size).to eq(57)
229
231
  end
230
232
 
231
- it 'should be available through states' do
232
- expect(country.states.size).to eq(57)
233
+ it '#states should be deprecated' do
234
+ expect {country.states}.to output.to_stderr
233
235
  end
234
236
 
235
237
  it 'should be a subdivision object' do
@@ -249,6 +251,60 @@ describe ISO3166::Country do
249
251
  end
250
252
  end
251
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
+
252
308
  describe 'subdivision_names_with_codes' do
253
309
  it 'should return an alphabetized list of all subdivisions names with codes' do
254
310
  subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
@@ -259,7 +315,7 @@ describe ISO3166::Country do
259
315
  end
260
316
 
261
317
  it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
262
- ISO3166.configuration.locales = [:es, :de, :en]
318
+ ISO3166.configuration.locales = %i[es de en]
263
319
 
264
320
  subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes(:es)
265
321
  expect(subdivisions).to be_an(Array)
@@ -328,7 +384,7 @@ describe ISO3166::Country do
328
384
  countries = ISO3166::Country.all_translated('fr')
329
385
  expect(countries).to be_an(Array)
330
386
  expect(countries.first).to be_a(String)
331
- expect(countries.first).to eq('Aruba')
387
+ expect(countries.first).to eq('Andorre')
332
388
  # countries missing the desired locale will not be added to the list
333
389
  # so all 250 countries may not be returned, 'fr' returns 249, for example
334
390
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -338,7 +394,7 @@ describe ISO3166::Country do
338
394
  countries = ISO3166::Country.all_translated
339
395
  expect(countries).to be_an(Array)
340
396
  expect(countries.first).to be_a(String)
341
- expect(countries.first).to eq('Aruba')
397
+ expect(countries.first).to eq('Andorra')
342
398
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
343
399
  end
344
400
 
@@ -371,11 +427,11 @@ describe ISO3166::Country do
371
427
  expect(countries.first[0]).to be_a(String)
372
428
  expect(countries.first[0]).to eq('Afghanistan')
373
429
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
374
- expect(countries.any?{|pair| !pair[0].html_safe?}).to eq(false)
430
+ expect(countries.any? { |pair| !pair[0].html_safe? }).to eq(false)
375
431
  end
376
432
 
377
433
  it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
378
- ISO3166.configuration.locales = [:es, :de, :en]
434
+ ISO3166.configuration.locales = %i[es de en]
379
435
 
380
436
  countries = ISO3166::Country.all_names_with_codes(:es)
381
437
  expect(countries).to be_an(Array)
@@ -395,7 +451,7 @@ describe ISO3166::Country do
395
451
  end
396
452
 
397
453
  it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
398
- ISO3166.configuration.locales = [:es, :de, :en]
454
+ ISO3166.configuration.locales = %i[es de en]
399
455
 
400
456
  countries = ISO3166::Country.all_names_with_codes(:es)
401
457
  expect(countries).to be_an(Array)
@@ -407,7 +463,7 @@ describe ISO3166::Country do
407
463
 
408
464
  describe 'translation' do
409
465
  it 'should return the localized name for a country to the selected locale' do
410
- ISO3166.configuration.locales = [:es, :de, :en]
466
+ ISO3166.configuration.locales = %i[es de en]
411
467
  countries = ISO3166::Country.new(:de).translation('de')
412
468
  expect(countries).to be_an(String)
413
469
  expect(countries).to eq('Deutschland')
@@ -426,7 +482,7 @@ describe ISO3166::Country do
426
482
 
427
483
  context 'should return variant locales' do
428
484
  it 'should return different value for Chinese variants' do
429
- ISO3166.configuration.locales = [:'zh-cn', :'zh-hk', :'zh-tw']
485
+ ISO3166.configuration.locales = %i[zh-cn zh-hk zh-tw]
430
486
  name_cn = ISO3166::Country['TW'].translation('zh-cn')
431
487
  name_hk = ISO3166::Country['TW'].translation('zh-hk')
432
488
  name_tw = ISO3166::Country['TW'].translation('zh-tw')
@@ -434,7 +490,7 @@ describe ISO3166::Country do
434
490
  end
435
491
 
436
492
  it 'should return different value for Portuguese variants' do
437
- ISO3166.configuration.locales = [:pt, :'pt-br']
493
+ ISO3166.configuration.locales = %i[pt pt-br]
438
494
  name_pt = ISO3166::Country['SG'].translation('pt')
439
495
  name_br = ISO3166::Country['SG'].translation('pt-br')
440
496
  expect([name_pt, name_br].uniq.size).to eql 2
@@ -446,8 +502,8 @@ describe ISO3166::Country do
446
502
  it 'should return an hash of all country names translated to the selected locale' do
447
503
  countries = ISO3166::Country.translations('fr')
448
504
  expect(countries).to be_an(Hash)
449
- expect(countries.first[0]).to eq('AW')
450
- 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])
451
507
  # countries missing the desired locale will not be added to the list
452
508
  # so all 250 countries may not be returned, 'fr' returns 249, for example
453
509
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
@@ -456,8 +512,8 @@ describe ISO3166::Country do
456
512
  it 'should return an hash of all country names in English if no locale is passed' do
457
513
  countries = ISO3166::Country.translations
458
514
  expect(countries).to be_an(Hash)
459
- expect(countries.first[0]).to eq('AW')
460
- 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])
461
517
  expect(countries.size).to eq(NUM_OF_COUNTRIES)
462
518
  end
463
519
  end
@@ -648,7 +704,9 @@ describe ISO3166::Country do
648
704
 
649
705
  context 'when finding by invalid attribute' do
650
706
  it 'should raise an error' do
651
- expect { ISO3166::Country.find_by_invalid('invalid') }.to raise_error(RuntimeError, "Invalid attribute name 'invalid'")
707
+ expect { ISO3166::Country.find_by_invalid('invalid') }.to(
708
+ raise_error(RuntimeError, "Invalid attribute name 'invalid'")
709
+ )
652
710
  end
653
711
  end
654
712
 
@@ -713,6 +771,49 @@ describe ISO3166::Country do
713
771
  end
714
772
  end
715
773
 
774
+ describe '#find_country_by_any_name' do
775
+ context 'when search name found' do
776
+ let(:uk) { ISO3166::Country.find_country_by_any_name('United Kingdom') }
777
+
778
+ it 'should be a country instance' do
779
+ expect(uk).to be_a(ISO3166::Country)
780
+ expect(uk.alpha2).to eq('GB')
781
+ end
782
+ end
783
+
784
+ context 'when search lowercase name found' do
785
+ let(:uk) { ISO3166::Country.find_country_by_any_name('united kingdom') }
786
+
787
+ it 'should be a country instance' do
788
+ expect(uk).to be_a(ISO3166::Country)
789
+ expect(uk.alpha2).to eq('GB')
790
+ end
791
+ end
792
+
793
+ context 'when the search term contains comma' do
794
+ let(:korea) { ISO3166::Country.find_country_by_any_name('Korea, Republic of') }
795
+
796
+ it 'should be a country instance' do
797
+ expect(korea).to be_a(ISO3166::Country)
798
+ expect(korea.alpha2).to eq('KR')
799
+ end
800
+ end
801
+
802
+ context 'when search translation found' do
803
+ before do
804
+ ISO3166.configure do |config|
805
+ config.locales = [:bs]
806
+ end
807
+ end
808
+ let(:uk) { ISO3166::Country.find_country_by_any_name('Velika Britanija') }
809
+
810
+ it 'should be a country instance' do
811
+ expect(uk).to be_a(ISO3166::Country)
812
+ expect(uk.alpha2).to eq('GB')
813
+ end
814
+ end
815
+ end
816
+
716
817
  context 'regression test for #388' do
717
818
  let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
718
819
 
@@ -729,6 +830,7 @@ describe ISO3166::Country do
729
830
  expect { uk }.to raise_error(RuntimeError)
730
831
  end
731
832
  end
833
+
732
834
  context 'when search name not found' do
733
835
  let(:bogus) { ISO3166::Country.find_country_by_unofficial_names('Does not exist') }
734
836
 
@@ -785,8 +887,9 @@ describe ISO3166::Country do
785
887
 
786
888
  context 'when finding by invalid attribute' do
787
889
  it 'should raise an error' do
788
- expect { ISO3166::Country.find_country_by_invalid('invalid') }.to raise_error(RuntimeError,
789
- "Invalid attribute name 'invalid'")
890
+ expect { ISO3166::Country.find_country_by_invalid('invalid') }.to(
891
+ raise_error(RuntimeError, "Invalid attribute name 'invalid'")
892
+ )
790
893
  end
791
894
  end
792
895
 
@@ -847,16 +950,6 @@ describe ISO3166::Country do
847
950
  end
848
951
  end
849
952
 
850
- describe 'names in Data' do
851
- it 'should be unique (to allow .find_by_name work properly)' do
852
- names = ISO3166::Data.cache.map do |_k, v|
853
- [v['iso_short_name'], v['unofficial_names']].flatten.uniq
854
- end.flatten
855
-
856
- expect(names.size).to eq(names.uniq.size)
857
- end
858
- end
859
-
860
953
  describe 'Norway' do
861
954
  let(:norway) { ISO3166::Country.search('NO') }
862
955
 
@@ -947,7 +1040,7 @@ describe ISO3166::Country do
947
1040
 
948
1041
  it 'should contain all keys for vat_rates' do
949
1042
  expect(belgium.vat_rates).to be_a(Hash)
950
- expect(belgium.vat_rates.keys).to eq(%w(standard reduced super_reduced parking))
1043
+ expect(belgium.vat_rates.keys).to eq(%w[standard reduced super_reduced parking])
951
1044
  end
952
1045
 
953
1046
  it 'should return an array of reduced vat rates' do
@@ -1021,7 +1114,7 @@ describe ISO3166::Country do
1021
1114
 
1022
1115
  subject { ISO3166::Country.pluck(*args) }
1023
1116
 
1024
- it "returns empty arrays" do
1117
+ it 'returns empty arrays' do
1025
1118
  expect(subject.first).to be_empty
1026
1119
  expect(subject.last).to be_empty
1027
1120
  end
@@ -1029,9 +1122,9 @@ describe ISO3166::Country do
1029
1122
  context "when asking for alpha2, alpha3 and iso_short_name" do
1030
1123
  let(:args) { [:alpha2, :alpha3, :iso_short_name] }
1031
1124
 
1032
- it "returns the correct values" do
1033
- expect(subject.first).to eq(["AD", "AND", "Andorra"])
1034
- expect(subject.last).to eq(["ZW", "ZWE", "Zimbabwe"])
1125
+ it 'returns the correct values' do
1126
+ expect(subject.first).to eq(%w[AD AND Andorra])
1127
+ expect(subject.last).to eq(%w[ZW ZWE Zimbabwe])
1035
1128
  end
1036
1129
  end
1037
1130
  end