countries 5.1.2 → 5.7.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 (534) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +61 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/workflows/codeql-analysis.yml +3 -3
  5. data/.github/workflows/tests.yml +10 -13
  6. data/.gitignore +0 -1
  7. data/.rubocop.yml +17 -8
  8. data/CHANGELOG.md +97 -2
  9. data/Gemfile +1 -2
  10. data/Gemfile.lock +102 -0
  11. data/{README.markdown → README.md} +69 -14
  12. data/Rakefile +2 -3
  13. data/countries.gemspec +6 -5
  14. data/lib/countries/cache/countries.json +1 -1
  15. data/lib/countries/cache/locales/ab.json +1 -1
  16. data/lib/countries/cache/locales/ak.json +1 -1
  17. data/lib/countries/cache/locales/an.json +1 -1
  18. data/lib/countries/cache/locales/ay.json +1 -1
  19. data/lib/countries/cache/locales/ba.json +1 -1
  20. data/lib/countries/cache/locales/bi.json +1 -1
  21. data/lib/countries/cache/locales/ch.json +1 -1
  22. data/lib/countries/cache/locales/de.json +1 -1
  23. data/lib/countries/cache/locales/ee.json +1 -1
  24. data/lib/countries/cache/locales/en.json +1 -1
  25. data/lib/countries/cache/locales/fr.json +1 -1
  26. data/lib/countries/cache/locales/gn.json +1 -1
  27. data/lib/countries/cache/locales/ja.json +1 -1
  28. data/lib/countries/cache/locales/ki.json +1 -1
  29. data/lib/countries/cache/locales/kl.json +1 -1
  30. data/lib/countries/cache/locales/lt.json +1 -1
  31. data/lib/countries/cache/locales/pt-br.json +1 -1
  32. data/lib/countries/cache/locales/sd.json +1 -1
  33. data/lib/countries/cache/locales/sw.json +1 -1
  34. data/lib/countries/cache/locales/th.json +1 -1
  35. data/lib/countries/cache/locales/tk.json +1 -1
  36. data/lib/countries/cache/locales/tl.json +1 -1
  37. data/lib/countries/cache/locales/ve.json +1 -1
  38. data/lib/countries/cache/locales/xh.json +1 -1
  39. data/lib/countries/configuration.rb +1 -1
  40. data/lib/countries/country/class_methods.rb +25 -6
  41. data/lib/countries/country/country_subdivision_methods.rb +82 -0
  42. data/lib/countries/country/currency_methods.rb +0 -1
  43. data/lib/countries/country/finder_methods.rb +2 -4
  44. data/lib/countries/country.rb +27 -51
  45. data/lib/countries/data/countries/AD.yaml +1 -0
  46. data/lib/countries/data/countries/AE.yaml +1 -0
  47. data/lib/countries/data/countries/AF.yaml +1 -0
  48. data/lib/countries/data/countries/AG.yaml +1 -0
  49. data/lib/countries/data/countries/AI.yaml +1 -0
  50. data/lib/countries/data/countries/AL.yaml +1 -0
  51. data/lib/countries/data/countries/AM.yaml +1 -0
  52. data/lib/countries/data/countries/AO.yaml +1 -0
  53. data/lib/countries/data/countries/AQ.yaml +1 -0
  54. data/lib/countries/data/countries/AR.yaml +2 -0
  55. data/lib/countries/data/countries/AS.yaml +1 -0
  56. data/lib/countries/data/countries/AT.yaml +1 -0
  57. data/lib/countries/data/countries/AU.yaml +3 -0
  58. data/lib/countries/data/countries/AW.yaml +1 -0
  59. data/lib/countries/data/countries/AX.yaml +3 -0
  60. data/lib/countries/data/countries/AZ.yaml +1 -0
  61. data/lib/countries/data/countries/BA.yaml +1 -0
  62. data/lib/countries/data/countries/BB.yaml +1 -0
  63. data/lib/countries/data/countries/BD.yaml +1 -0
  64. data/lib/countries/data/countries/BE.yaml +1 -0
  65. data/lib/countries/data/countries/BF.yaml +1 -0
  66. data/lib/countries/data/countries/BG.yaml +1 -0
  67. data/lib/countries/data/countries/BH.yaml +1 -0
  68. data/lib/countries/data/countries/BI.yaml +1 -0
  69. data/lib/countries/data/countries/BJ.yaml +1 -0
  70. data/lib/countries/data/countries/BL.yaml +1 -0
  71. data/lib/countries/data/countries/BM.yaml +1 -0
  72. data/lib/countries/data/countries/BN.yaml +1 -0
  73. data/lib/countries/data/countries/BO.yaml +1 -0
  74. data/lib/countries/data/countries/BQ.yaml +1 -0
  75. data/lib/countries/data/countries/BR.yaml +2 -0
  76. data/lib/countries/data/countries/BS.yaml +1 -0
  77. data/lib/countries/data/countries/BT.yaml +1 -0
  78. data/lib/countries/data/countries/BV.yaml +1 -0
  79. data/lib/countries/data/countries/BW.yaml +1 -0
  80. data/lib/countries/data/countries/BY.yaml +1 -0
  81. data/lib/countries/data/countries/BZ.yaml +1 -0
  82. data/lib/countries/data/countries/CA.yaml +3 -0
  83. data/lib/countries/data/countries/CC.yaml +1 -0
  84. data/lib/countries/data/countries/CD.yaml +1 -0
  85. data/lib/countries/data/countries/CF.yaml +1 -0
  86. data/lib/countries/data/countries/CG.yaml +1 -0
  87. data/lib/countries/data/countries/CH.yaml +1 -0
  88. data/lib/countries/data/countries/CI.yaml +1 -0
  89. data/lib/countries/data/countries/CK.yaml +1 -0
  90. data/lib/countries/data/countries/CL.yaml +1 -0
  91. data/lib/countries/data/countries/CM.yaml +1 -0
  92. data/lib/countries/data/countries/CN.yaml +2 -0
  93. data/lib/countries/data/countries/CO.yaml +1 -0
  94. data/lib/countries/data/countries/CR.yaml +1 -0
  95. data/lib/countries/data/countries/CU.yaml +1 -0
  96. data/lib/countries/data/countries/CV.yaml +1 -0
  97. data/lib/countries/data/countries/CW.yaml +1 -0
  98. data/lib/countries/data/countries/CX.yaml +1 -0
  99. data/lib/countries/data/countries/CY.yaml +1 -0
  100. data/lib/countries/data/countries/CZ.yaml +1 -0
  101. data/lib/countries/data/countries/DE.yaml +3 -0
  102. data/lib/countries/data/countries/DJ.yaml +1 -0
  103. data/lib/countries/data/countries/DK.yaml +1 -0
  104. data/lib/countries/data/countries/DM.yaml +1 -0
  105. data/lib/countries/data/countries/DO.yaml +1 -0
  106. data/lib/countries/data/countries/DZ.yaml +1 -0
  107. data/lib/countries/data/countries/EC.yaml +1 -0
  108. data/lib/countries/data/countries/EE.yaml +1 -0
  109. data/lib/countries/data/countries/EG.yaml +1 -0
  110. data/lib/countries/data/countries/EH.yaml +1 -0
  111. data/lib/countries/data/countries/ER.yaml +1 -0
  112. data/lib/countries/data/countries/ES.yaml +1 -0
  113. data/lib/countries/data/countries/ET.yaml +1 -0
  114. data/lib/countries/data/countries/FI.yaml +1 -0
  115. data/lib/countries/data/countries/FJ.yaml +1 -0
  116. data/lib/countries/data/countries/FK.yaml +1 -0
  117. data/lib/countries/data/countries/FM.yaml +1 -0
  118. data/lib/countries/data/countries/FO.yaml +1 -0
  119. data/lib/countries/data/countries/FR.yaml +3 -0
  120. data/lib/countries/data/countries/GA.yaml +1 -0
  121. data/lib/countries/data/countries/GB.yaml +3 -0
  122. data/lib/countries/data/countries/GD.yaml +1 -0
  123. data/lib/countries/data/countries/GE.yaml +1 -0
  124. data/lib/countries/data/countries/GF.yaml +3 -0
  125. data/lib/countries/data/countries/GG.yaml +1 -0
  126. data/lib/countries/data/countries/GH.yaml +1 -0
  127. data/lib/countries/data/countries/GI.yaml +1 -0
  128. data/lib/countries/data/countries/GL.yaml +1 -0
  129. data/lib/countries/data/countries/GM.yaml +1 -0
  130. data/lib/countries/data/countries/GN.yaml +1 -0
  131. data/lib/countries/data/countries/GP.yaml +4 -1
  132. data/lib/countries/data/countries/GQ.yaml +1 -0
  133. data/lib/countries/data/countries/GR.yaml +1 -0
  134. data/lib/countries/data/countries/GS.yaml +1 -0
  135. data/lib/countries/data/countries/GT.yaml +1 -0
  136. data/lib/countries/data/countries/GU.yaml +1 -0
  137. data/lib/countries/data/countries/GW.yaml +1 -0
  138. data/lib/countries/data/countries/GY.yaml +1 -0
  139. data/lib/countries/data/countries/HK.yaml +1 -0
  140. data/lib/countries/data/countries/HM.yaml +1 -0
  141. data/lib/countries/data/countries/HN.yaml +1 -0
  142. data/lib/countries/data/countries/HR.yaml +2 -1
  143. data/lib/countries/data/countries/HT.yaml +1 -0
  144. data/lib/countries/data/countries/HU.yaml +1 -0
  145. data/lib/countries/data/countries/ID.yaml +2 -0
  146. data/lib/countries/data/countries/IE.yaml +1 -0
  147. data/lib/countries/data/countries/IL.yaml +1 -0
  148. data/lib/countries/data/countries/IM.yaml +1 -0
  149. data/lib/countries/data/countries/IN.yaml +2 -0
  150. data/lib/countries/data/countries/IO.yaml +1 -0
  151. data/lib/countries/data/countries/IQ.yaml +1 -0
  152. data/lib/countries/data/countries/IR.yaml +1 -0
  153. data/lib/countries/data/countries/IS.yaml +1 -0
  154. data/lib/countries/data/countries/IT.yaml +3 -0
  155. data/lib/countries/data/countries/JE.yaml +1 -0
  156. data/lib/countries/data/countries/JM.yaml +1 -0
  157. data/lib/countries/data/countries/JO.yaml +1 -0
  158. data/lib/countries/data/countries/JP.yaml +3 -0
  159. data/lib/countries/data/countries/KE.yaml +1 -0
  160. data/lib/countries/data/countries/KG.yaml +1 -0
  161. data/lib/countries/data/countries/KH.yaml +1 -0
  162. data/lib/countries/data/countries/KI.yaml +1 -0
  163. data/lib/countries/data/countries/KM.yaml +1 -0
  164. data/lib/countries/data/countries/KN.yaml +1 -0
  165. data/lib/countries/data/countries/KP.yaml +1 -0
  166. data/lib/countries/data/countries/KR.yaml +2 -0
  167. data/lib/countries/data/countries/KW.yaml +1 -0
  168. data/lib/countries/data/countries/KY.yaml +1 -0
  169. data/lib/countries/data/countries/KZ.yaml +1 -0
  170. data/lib/countries/data/countries/LA.yaml +1 -0
  171. data/lib/countries/data/countries/LB.yaml +1 -0
  172. data/lib/countries/data/countries/LC.yaml +1 -0
  173. data/lib/countries/data/countries/LI.yaml +3 -0
  174. data/lib/countries/data/countries/LK.yaml +1 -0
  175. data/lib/countries/data/countries/LR.yaml +1 -0
  176. data/lib/countries/data/countries/LS.yaml +1 -0
  177. data/lib/countries/data/countries/LT.yaml +1 -0
  178. data/lib/countries/data/countries/LU.yaml +1 -0
  179. data/lib/countries/data/countries/LV.yaml +1 -0
  180. data/lib/countries/data/countries/LY.yaml +1 -0
  181. data/lib/countries/data/countries/MA.yaml +1 -0
  182. data/lib/countries/data/countries/MC.yaml +3 -0
  183. data/lib/countries/data/countries/MD.yaml +1 -0
  184. data/lib/countries/data/countries/ME.yaml +1 -0
  185. data/lib/countries/data/countries/MF.yaml +4 -1
  186. data/lib/countries/data/countries/MG.yaml +1 -0
  187. data/lib/countries/data/countries/MH.yaml +1 -0
  188. data/lib/countries/data/countries/MK.yaml +1 -0
  189. data/lib/countries/data/countries/ML.yaml +1 -0
  190. data/lib/countries/data/countries/MM.yaml +1 -0
  191. data/lib/countries/data/countries/MN.yaml +1 -0
  192. data/lib/countries/data/countries/MO.yaml +1 -0
  193. data/lib/countries/data/countries/MP.yaml +1 -0
  194. data/lib/countries/data/countries/MQ.yaml +3 -0
  195. data/lib/countries/data/countries/MR.yaml +1 -0
  196. data/lib/countries/data/countries/MS.yaml +1 -0
  197. data/lib/countries/data/countries/MT.yaml +1 -0
  198. data/lib/countries/data/countries/MU.yaml +1 -0
  199. data/lib/countries/data/countries/MV.yaml +1 -0
  200. data/lib/countries/data/countries/MW.yaml +1 -0
  201. data/lib/countries/data/countries/MX.yaml +2 -0
  202. data/lib/countries/data/countries/MY.yaml +1 -0
  203. data/lib/countries/data/countries/MZ.yaml +1 -0
  204. data/lib/countries/data/countries/NA.yaml +1 -0
  205. data/lib/countries/data/countries/NC.yaml +1 -0
  206. data/lib/countries/data/countries/NE.yaml +1 -0
  207. data/lib/countries/data/countries/NF.yaml +1 -0
  208. data/lib/countries/data/countries/NG.yaml +1 -0
  209. data/lib/countries/data/countries/NI.yaml +1 -0
  210. data/lib/countries/data/countries/NL.yaml +1 -0
  211. data/lib/countries/data/countries/NO.yaml +1 -0
  212. data/lib/countries/data/countries/NP.yaml +1 -0
  213. data/lib/countries/data/countries/NR.yaml +1 -0
  214. data/lib/countries/data/countries/NU.yaml +1 -0
  215. data/lib/countries/data/countries/NZ.yaml +1 -0
  216. data/lib/countries/data/countries/OM.yaml +1 -0
  217. data/lib/countries/data/countries/PA.yaml +1 -0
  218. data/lib/countries/data/countries/PE.yaml +1 -0
  219. data/lib/countries/data/countries/PF.yaml +1 -0
  220. data/lib/countries/data/countries/PG.yaml +1 -0
  221. data/lib/countries/data/countries/PH.yaml +1 -0
  222. data/lib/countries/data/countries/PK.yaml +1 -0
  223. data/lib/countries/data/countries/PL.yaml +1 -0
  224. data/lib/countries/data/countries/PM.yaml +1 -0
  225. data/lib/countries/data/countries/PN.yaml +1 -0
  226. data/lib/countries/data/countries/PR.yaml +1 -0
  227. data/lib/countries/data/countries/PS.yaml +1 -0
  228. data/lib/countries/data/countries/PT.yaml +1 -0
  229. data/lib/countries/data/countries/PW.yaml +1 -0
  230. data/lib/countries/data/countries/PY.yaml +1 -0
  231. data/lib/countries/data/countries/QA.yaml +1 -0
  232. data/lib/countries/data/countries/RE.yaml +3 -0
  233. data/lib/countries/data/countries/RO.yaml +1 -0
  234. data/lib/countries/data/countries/RS.yaml +1 -0
  235. data/lib/countries/data/countries/RU.yaml +2 -0
  236. data/lib/countries/data/countries/RW.yaml +1 -0
  237. data/lib/countries/data/countries/SA.yaml +2 -0
  238. data/lib/countries/data/countries/SB.yaml +1 -0
  239. data/lib/countries/data/countries/SC.yaml +1 -0
  240. data/lib/countries/data/countries/SD.yaml +1 -0
  241. data/lib/countries/data/countries/SE.yaml +1 -0
  242. data/lib/countries/data/countries/SG.yaml +1 -0
  243. data/lib/countries/data/countries/SH.yaml +1 -0
  244. data/lib/countries/data/countries/SI.yaml +1 -0
  245. data/lib/countries/data/countries/SJ.yaml +1 -0
  246. data/lib/countries/data/countries/SK.yaml +1 -0
  247. data/lib/countries/data/countries/SL.yaml +1 -0
  248. data/lib/countries/data/countries/SM.yaml +1 -0
  249. data/lib/countries/data/countries/SN.yaml +1 -0
  250. data/lib/countries/data/countries/SO.yaml +1 -0
  251. data/lib/countries/data/countries/SR.yaml +1 -0
  252. data/lib/countries/data/countries/SS.yaml +1 -0
  253. data/lib/countries/data/countries/ST.yaml +1 -0
  254. data/lib/countries/data/countries/SV.yaml +1 -0
  255. data/lib/countries/data/countries/SX.yaml +1 -0
  256. data/lib/countries/data/countries/SY.yaml +1 -0
  257. data/lib/countries/data/countries/SZ.yaml +1 -0
  258. data/lib/countries/data/countries/TC.yaml +1 -0
  259. data/lib/countries/data/countries/TD.yaml +1 -0
  260. data/lib/countries/data/countries/TF.yaml +1 -0
  261. data/lib/countries/data/countries/TG.yaml +1 -0
  262. data/lib/countries/data/countries/TH.yaml +1 -0
  263. data/lib/countries/data/countries/TJ.yaml +1 -0
  264. data/lib/countries/data/countries/TK.yaml +1 -0
  265. data/lib/countries/data/countries/TL.yaml +1 -0
  266. data/lib/countries/data/countries/TM.yaml +2 -1
  267. data/lib/countries/data/countries/TN.yaml +1 -0
  268. data/lib/countries/data/countries/TO.yaml +1 -0
  269. data/lib/countries/data/countries/TR.yaml +4 -2
  270. data/lib/countries/data/countries/TT.yaml +1 -0
  271. data/lib/countries/data/countries/TV.yaml +1 -0
  272. data/lib/countries/data/countries/TW.yaml +16 -13
  273. data/lib/countries/data/countries/TZ.yaml +1 -0
  274. data/lib/countries/data/countries/UA.yaml +1 -0
  275. data/lib/countries/data/countries/UG.yaml +1 -0
  276. data/lib/countries/data/countries/UM.yaml +1 -0
  277. data/lib/countries/data/countries/US.yaml +3 -0
  278. data/lib/countries/data/countries/UY.yaml +1 -0
  279. data/lib/countries/data/countries/UZ.yaml +1 -0
  280. data/lib/countries/data/countries/VA.yaml +1 -0
  281. data/lib/countries/data/countries/VC.yaml +1 -0
  282. data/lib/countries/data/countries/VE.yaml +1 -0
  283. data/lib/countries/data/countries/VG.yaml +1 -0
  284. data/lib/countries/data/countries/VI.yaml +1 -0
  285. data/lib/countries/data/countries/VN.yaml +1 -0
  286. data/lib/countries/data/countries/VU.yaml +1 -0
  287. data/lib/countries/data/countries/WF.yaml +1 -0
  288. data/lib/countries/data/countries/WS.yaml +1 -0
  289. data/lib/countries/data/countries/YE.yaml +1 -0
  290. data/lib/countries/data/countries/YT.yaml +3 -0
  291. data/lib/countries/data/countries/ZA.yaml +2 -0
  292. data/lib/countries/data/countries/ZM.yaml +1 -0
  293. data/lib/countries/data/countries/ZW.yaml +1 -0
  294. data/lib/countries/data/locales_methods.rb +23 -0
  295. data/lib/countries/data/subdivision_methods.rb +30 -0
  296. data/lib/countries/data/subdivisions/AD.yaml +7 -0
  297. data/lib/countries/data/subdivisions/AE.yaml +24 -0
  298. data/lib/countries/data/subdivisions/AF.yaml +200 -1
  299. data/lib/countries/data/subdivisions/AG.yaml +17 -0
  300. data/lib/countries/data/subdivisions/AL.yaml +69 -0
  301. data/lib/countries/data/subdivisions/AM.yaml +44 -0
  302. data/lib/countries/data/subdivisions/AO.yaml +54 -0
  303. data/lib/countries/data/subdivisions/AR.yaml +69 -0
  304. data/lib/countries/data/subdivisions/AT.yaml +35 -0
  305. data/lib/countries/data/subdivisions/AU.yaml +37 -0
  306. data/lib/countries/data/subdivisions/AZ.yaml +316 -2
  307. data/lib/countries/data/subdivisions/BA.yaml +8 -0
  308. data/lib/countries/data/subdivisions/BB.yaml +15 -0
  309. data/lib/countries/data/subdivisions/BD.yaml +211 -0
  310. data/lib/countries/data/subdivisions/BE.yaml +34 -0
  311. data/lib/countries/data/subdivisions/BF.yaml +56 -0
  312. data/lib/countries/data/subdivisions/BG.yaml +30 -0
  313. data/lib/countries/data/subdivisions/BH.yaml +13 -0
  314. data/lib/countries/data/subdivisions/BI.yaml +54 -0
  315. data/lib/countries/data/subdivisions/BJ.yaml +22 -0
  316. data/lib/countries/data/subdivisions/BN.yaml +9 -0
  317. data/lib/countries/data/subdivisions/BO.yaml +35 -0
  318. data/lib/countries/data/subdivisions/BQ.yaml +4 -0
  319. data/lib/countries/data/subdivisions/BR.yaml +14 -0
  320. data/lib/countries/data/subdivisions/BS.yaml +24 -0
  321. data/lib/countries/data/subdivisions/BT.yaml +24 -0
  322. data/lib/countries/data/subdivisions/BW.yaml +24 -0
  323. data/lib/countries/data/subdivisions/BY.yaml +5 -0
  324. data/lib/countries/data/subdivisions/BZ.yaml +3 -0
  325. data/lib/countries/data/subdivisions/CA.yaml +24 -0
  326. data/lib/countries/data/subdivisions/CD.yaml +77 -0
  327. data/lib/countries/data/subdivisions/CF.yaml +15 -0
  328. data/lib/countries/data/subdivisions/CG.yaml +18 -0
  329. data/lib/countries/data/subdivisions/CH.yaml +92 -0
  330. data/lib/countries/data/subdivisions/CI.yaml +65 -0
  331. data/lib/countries/data/subdivisions/CL.yaml +45 -2
  332. data/lib/countries/data/subdivisions/CM.yaml +22 -0
  333. data/lib/countries/data/subdivisions/CN.yaml +98 -0
  334. data/lib/countries/data/subdivisions/CO.yaml +68 -0
  335. data/lib/countries/data/subdivisions/CR.yaml +14 -0
  336. data/lib/countries/data/subdivisions/CU.yaml +42 -0
  337. data/lib/countries/data/subdivisions/CV.yaml +32 -0
  338. data/lib/countries/data/subdivisions/CY.yaml +18 -0
  339. data/lib/countries/data/subdivisions/CZ.yaml +227 -0
  340. data/lib/countries/data/subdivisions/DE.yaml +31 -0
  341. data/lib/countries/data/subdivisions/DJ.yaml +16 -0
  342. data/lib/countries/data/subdivisions/DK.yaml +13 -0
  343. data/lib/countries/data/subdivisions/DM.yaml +1 -0
  344. data/lib/countries/data/subdivisions/DO.yaml +102 -0
  345. data/lib/countries/data/subdivisions/DZ.yaml +104 -0
  346. data/lib/countries/data/subdivisions/EC.yaml +72 -0
  347. data/lib/countries/data/subdivisions/EE.yaml +6 -0
  348. data/lib/countries/data/subdivisions/EG.yaml +54 -0
  349. data/lib/countries/data/subdivisions/ER.yaml +2 -0
  350. data/lib/countries/data/subdivisions/ES.yaml +252 -0
  351. data/lib/countries/data/subdivisions/ET.yaml +27 -0
  352. data/lib/countries/data/subdivisions/FI.yaml +78 -0
  353. data/lib/countries/data/subdivisions/FJ.yaml +30 -0
  354. data/lib/countries/data/subdivisions/FM.yaml +11 -0
  355. data/lib/countries/data/subdivisions/FR.yaml +332 -1
  356. data/lib/countries/data/subdivisions/GA.yaml +24 -0
  357. data/lib/countries/data/subdivisions/GB.yaml +488 -0
  358. data/lib/countries/data/subdivisions/GD.yaml +10 -0
  359. data/lib/countries/data/subdivisions/GE.yaml +34 -0
  360. data/lib/countries/data/subdivisions/GH.yaml +79 -0
  361. data/lib/countries/data/subdivisions/GL.yaml +58 -0
  362. data/lib/countries/data/subdivisions/GM.yaml +10 -0
  363. data/lib/countries/data/subdivisions/GN.yaml +65 -0
  364. data/lib/countries/data/subdivisions/GQ.yaml +36 -0
  365. data/lib/countries/data/subdivisions/GR.yaml +41 -0
  366. data/lib/countries/data/subdivisions/GW.yaml +24 -0
  367. data/lib/countries/data/subdivisions/GY.yaml +31 -0
  368. data/lib/countries/data/subdivisions/HN.yaml +21 -0
  369. data/lib/countries/data/subdivisions/HR.yaml +82 -0
  370. data/lib/countries/data/subdivisions/HT.yaml +14 -0
  371. data/lib/countries/data/subdivisions/HU.yaml +94 -0
  372. data/lib/countries/data/subdivisions/ID.yaml +99 -0
  373. data/lib/countries/data/subdivisions/IE.yaml +39 -0
  374. data/lib/countries/data/subdivisions/IL.yaml +15 -0
  375. data/lib/countries/data/subdivisions/IN.yaml +210 -0
  376. data/lib/countries/data/subdivisions/IQ.yaml +59 -0
  377. data/lib/countries/data/subdivisions/IR.yaml +33 -1
  378. data/lib/countries/data/subdivisions/IS.yaml +560 -0
  379. data/lib/countries/data/subdivisions/IT.yaml +321 -0
  380. data/lib/countries/data/subdivisions/JM.yaml +22 -0
  381. data/lib/countries/data/subdivisions/JO.yaml +16 -0
  382. data/lib/countries/data/subdivisions/JP.yaml +42 -0
  383. data/lib/countries/data/subdivisions/KE.yaml +298 -0
  384. data/lib/countries/data/subdivisions/KG.yaml +28 -0
  385. data/lib/countries/data/subdivisions/KH.yaml +108 -0
  386. data/lib/countries/data/subdivisions/KI.yaml +6 -0
  387. data/lib/countries/data/subdivisions/KM.yaml +4 -0
  388. data/lib/countries/data/subdivisions/KN.yaml +6 -0
  389. data/lib/countries/data/subdivisions/KP.yaml +42 -0
  390. data/lib/countries/data/subdivisions/KR.yaml +36 -0
  391. data/lib/countries/data/subdivisions/KW.yaml +5 -0
  392. data/lib/countries/data/subdivisions/KZ.yaml +127 -0
  393. data/lib/countries/data/subdivisions/LA.yaml +49 -0
  394. data/lib/countries/data/subdivisions/LB.yaml +28 -0
  395. data/lib/countries/data/subdivisions/LC.yaml +6 -0
  396. data/lib/countries/data/subdivisions/LI.yaml +37 -0
  397. data/lib/countries/data/subdivisions/LK.yaml +67 -0
  398. data/lib/countries/data/subdivisions/LR.yaml +16 -0
  399. data/lib/countries/data/subdivisions/LS.yaml +23 -0
  400. data/lib/countries/data/subdivisions/LT.yaml +315 -0
  401. data/lib/countries/data/subdivisions/LU.yaml +31 -0
  402. data/lib/countries/data/subdivisions/LV.yaml +83 -0
  403. data/lib/countries/data/subdivisions/LY.yaml +16 -0
  404. data/lib/countries/data/subdivisions/MA.yaml +827 -12
  405. data/lib/countries/data/subdivisions/MC.yaml +47 -0
  406. data/lib/countries/data/subdivisions/MD.yaml +41 -0
  407. data/lib/countries/data/subdivisions/ME.yaml +83 -0
  408. data/lib/countries/data/subdivisions/MG.yaml +21 -0
  409. data/lib/countries/data/subdivisions/MH.yaml +70 -0
  410. data/lib/countries/data/subdivisions/MK.yaml +505 -0
  411. data/lib/countries/data/subdivisions/ML.yaml +33 -0
  412. data/lib/countries/data/subdivisions/MM.yaml +51 -0
  413. data/lib/countries/data/subdivisions/MN.yaml +94 -0
  414. data/lib/countries/data/subdivisions/MR.yaml +32 -0
  415. data/lib/countries/data/subdivisions/MT.yaml +126 -0
  416. data/lib/countries/data/subdivisions/MU.yaml +21 -0
  417. data/lib/countries/data/subdivisions/MV.yaml +20 -0
  418. data/lib/countries/data/subdivisions/MW.yaml +52 -0
  419. data/lib/countries/data/subdivisions/MX.yaml +23 -0
  420. data/lib/countries/data/subdivisions/MY.yaml +24 -0
  421. data/lib/countries/data/subdivisions/MZ.yaml +20 -0
  422. data/lib/countries/data/subdivisions/NA.yaml +28 -0
  423. data/lib/countries/data/subdivisions/NE.yaml +9 -0
  424. data/lib/countries/data/subdivisions/NG.yaml +89 -0
  425. data/lib/countries/data/subdivisions/NI.yaml +25 -0
  426. data/lib/countries/data/subdivisions/NL.yaml +24 -0
  427. data/lib/countries/data/subdivisions/NO.yaml +138 -1
  428. data/lib/countries/data/subdivisions/NP.yaml +9 -0
  429. data/lib/countries/data/subdivisions/NR.yaml +19 -0
  430. data/lib/countries/data/subdivisions/NZ.yaml +34 -0
  431. data/lib/countries/data/subdivisions/OM.yaml +10 -0
  432. data/lib/countries/data/subdivisions/PA.yaml +27 -0
  433. data/lib/countries/data/subdivisions/PE.yaml +24 -0
  434. data/lib/countries/data/subdivisions/PG.yaml +46 -0
  435. data/lib/countries/data/subdivisions/PH.yaml +293 -0
  436. data/lib/countries/data/subdivisions/PK.yaml +22 -0
  437. data/lib/countries/data/subdivisions/PL.yaml +141 -0
  438. data/lib/countries/data/subdivisions/PS.yaml +41 -0
  439. data/lib/countries/data/subdivisions/PT.yaml +36 -0
  440. data/lib/countries/data/subdivisions/PW.yaml +24 -0
  441. data/lib/countries/data/subdivisions/PY.yaml +22 -1
  442. data/lib/countries/data/subdivisions/QA.yaml +26 -0
  443. data/lib/countries/data/subdivisions/RO.yaml +189 -0
  444. data/lib/countries/data/subdivisions/RS.yaml +112 -0
  445. data/lib/countries/data/subdivisions/RU.yaml +123 -0
  446. data/lib/countries/data/subdivisions/RW.yaml +7 -0
  447. data/lib/countries/data/subdivisions/SA.yaml +38 -0
  448. data/lib/countries/data/subdivisions/SB.yaml +11 -0
  449. data/lib/countries/data/subdivisions/SC.yaml +45 -0
  450. data/lib/countries/data/subdivisions/SD.yaml +15 -0
  451. data/lib/countries/data/subdivisions/SE.yaml +42 -0
  452. data/lib/countries/data/subdivisions/SG.yaml +8 -0
  453. data/lib/countries/data/subdivisions/SH.yaml +6 -0
  454. data/lib/countries/data/subdivisions/SI.yaml +735 -0
  455. data/lib/countries/data/subdivisions/SK.yaml +22 -0
  456. data/lib/countries/data/subdivisions/SL.yaml +7 -0
  457. data/lib/countries/data/subdivisions/SM.yaml +19 -0
  458. data/lib/countries/data/subdivisions/SN.yaml +43 -0
  459. data/lib/countries/data/subdivisions/SO.yaml +71 -0
  460. data/lib/countries/data/subdivisions/SR.yaml +17 -0
  461. data/lib/countries/data/subdivisions/SS.yaml +4 -0
  462. data/lib/countries/data/subdivisions/ST.yaml +127 -0
  463. data/lib/countries/data/subdivisions/SV.yaml +20 -0
  464. data/lib/countries/data/subdivisions/SY.yaml +53 -0
  465. data/lib/countries/data/subdivisions/SZ.yaml +18 -0
  466. data/lib/countries/data/subdivisions/TD.yaml +51 -0
  467. data/lib/countries/data/subdivisions/TG.yaml +13 -0
  468. data/lib/countries/data/subdivisions/TH.yaml +231 -0
  469. data/lib/countries/data/subdivisions/TJ.yaml +16 -1
  470. data/lib/countries/data/subdivisions/TL.yaml +38 -0
  471. data/lib/countries/data/subdivisions/TM.yaml +16 -1
  472. data/lib/countries/data/subdivisions/TN.yaml +25 -0
  473. data/lib/countries/data/subdivisions/TO.yaml +1 -0
  474. data/lib/countries/data/subdivisions/TR.yaml +93 -0
  475. data/lib/countries/data/subdivisions/TT.yaml +25 -0
  476. data/lib/countries/data/subdivisions/TV.yaml +25 -0
  477. data/lib/countries/data/subdivisions/TW.yaml +106 -0
  478. data/lib/countries/data/subdivisions/TZ.yaml +38 -0
  479. data/lib/countries/data/subdivisions/UA.yaml +108 -1
  480. data/lib/countries/data/subdivisions/UG.yaml +262 -0
  481. data/lib/countries/data/subdivisions/UM.yaml +4 -0
  482. data/lib/countries/data/subdivisions/US.yaml +166 -4
  483. data/lib/countries/data/subdivisions/UY.yaml +27 -0
  484. data/lib/countries/data/subdivisions/UZ.yaml +78 -1
  485. data/lib/countries/data/subdivisions/VC.yaml +6 -0
  486. data/lib/countries/data/subdivisions/VE.yaml +33 -0
  487. data/lib/countries/data/subdivisions/VN.yaml +131 -0
  488. data/lib/countries/data/subdivisions/VU.yaml +8 -0
  489. data/lib/countries/data/subdivisions/WS.yaml +18 -0
  490. data/lib/countries/data/subdivisions/YE.yaml +16 -0
  491. data/lib/countries/data/subdivisions/ZA.yaml +5 -0
  492. data/lib/countries/data/subdivisions/ZM.yaml +24 -0
  493. data/lib/countries/data/subdivisions/ZW.yaml +21 -0
  494. data/lib/countries/data/translations/countries-ab.yaml +1 -1
  495. data/lib/countries/data/translations/countries-ak.yaml +1 -1
  496. data/lib/countries/data/translations/countries-an.yaml +1 -1
  497. data/lib/countries/data/translations/countries-ay.yaml +1 -1
  498. data/lib/countries/data/translations/countries-ba.yaml +1 -1
  499. data/lib/countries/data/translations/countries-bi.yaml +1 -1
  500. data/lib/countries/data/translations/countries-ch.yaml +1 -1
  501. data/lib/countries/data/translations/countries-de.yaml +2 -2
  502. data/lib/countries/data/translations/countries-ee.yaml +1 -1
  503. data/lib/countries/data/translations/countries-en.yaml +1 -1
  504. data/lib/countries/data/translations/countries-fr.yaml +7 -7
  505. data/lib/countries/data/translations/countries-gn.yaml +2 -2
  506. data/lib/countries/data/translations/countries-ja.yaml +3 -3
  507. data/lib/countries/data/translations/countries-ki.yaml +1 -1
  508. data/lib/countries/data/translations/countries-kl.yaml +1 -1
  509. data/lib/countries/data/translations/countries-lt.yaml +2 -2
  510. data/lib/countries/data/translations/countries-pt_BR.yaml +1 -1
  511. data/lib/countries/data/translations/countries-sd.yaml +1 -1
  512. data/lib/countries/data/translations/countries-sw.yaml +1 -1
  513. data/lib/countries/data/translations/countries-th.yaml +2 -2
  514. data/lib/countries/data/translations/countries-tk.yaml +88 -88
  515. data/lib/countries/data/translations/countries-tl.yaml +1 -1
  516. data/lib/countries/data/translations/countries-ve.yaml +1 -1
  517. data/lib/countries/data/translations/countries-xh.yaml +1 -1
  518. data/lib/countries/data.rb +19 -50
  519. data/lib/countries/global.rb +0 -1
  520. data/lib/countries/iso3166.rb +3 -1
  521. data/lib/countries/sources/cldr/subdivision.rb +1 -1
  522. data/lib/countries/structure.rb +1 -0
  523. data/lib/countries/subdivision.rb +5 -0
  524. data/lib/countries/tasks/postal_codes.rake +5 -1
  525. data/lib/countries/version.rb +1 -1
  526. data/lib/countries.rb +0 -2
  527. data/spec/country_spec.rb +218 -22
  528. data/spec/data_spec.rb +12 -8
  529. data/spec/spec_helper.rb +4 -0
  530. data/spec/subdivision_spec.rb +8 -0
  531. metadata +28 -21
  532. data/.rubocop_todo.yml +0 -19
  533. data/lib/countries/kwarg_struct.rb +0 -14
  534. data/lib/countries/tasks/geocoding.rake +0 -106
data/spec/country_spec.rb CHANGED
@@ -3,7 +3,11 @@
3
3
  require 'spec_helper'
4
4
  NUM_OF_COUNTRIES = 249
5
5
  describe ISO3166::Country do
6
- before { ISO3166.configuration.enable_currency_extension! }
6
+ before do
7
+ ISO3166::Data.reset
8
+ ISO3166.configuration.enable_currency_extension!
9
+ end
10
+
7
11
  let(:country) { ISO3166::Country.search('US') }
8
12
 
9
13
  it 'allows to create a country object from a symbol representation of the alpha2 code' do
@@ -48,9 +52,11 @@ describe ISO3166::Country do
48
52
  end
49
53
 
50
54
  it 'should return alternate names' do
51
- expect(country.unofficial_names).to eq(['United States', 'USA', 'Murica',
52
- 'Vereinigte Staaten von Amerika', 'États-Unis',
53
- 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
55
+ expect(country.unofficial_names).to eq(['United States', 'USA',
56
+ 'Vereinigte Staaten von Amerika',
57
+ 'États-Unis', 'Estados Unidos',
58
+ 'アメリカ合衆国', 'Verenigde Staten',
59
+ 'Соединенные Штаты Америки'])
54
60
  end
55
61
 
56
62
  it 'should return translations' do
@@ -74,6 +80,10 @@ describe ISO3166::Country do
74
80
  expect(country.continent).to eq('North America')
75
81
  end
76
82
 
83
+ it 'should return distance unit' do
84
+ expect(country.distance_unit).to eq('MI')
85
+ end
86
+
77
87
  it 'knows about whether or not the country uses postal codes' do
78
88
  expect(country.zip).to be_truthy
79
89
  end
@@ -88,6 +98,7 @@ describe ISO3166::Country do
88
98
 
89
99
  regex = Regexp.new(country.postal_code_format)
90
100
  expect(regex).to match('12345-6789')
101
+ expect(regex).not_to match('12345-67890')
91
102
 
92
103
  antarctica = ISO3166::Country.search('AQ')
93
104
  expect(antarctica.postal_code_format).to be_nil
@@ -105,12 +116,20 @@ describe ISO3166::Country do
105
116
  expect(country.world_region).to eq('AMER')
106
117
  end
107
118
 
108
- context 'with Turkey' do
119
+ context 'with Türkiye' do
109
120
  let(:country) { ISO3166::Country.search('TR') }
110
121
 
111
122
  it 'should indicate EMEA as the world region' do
112
123
  expect(country.world_region).to eq('EMEA')
113
124
  end
125
+
126
+ it 'has iso_short_name Türkiye' do
127
+ expect(country.iso_short_name).to eq('Türkiye')
128
+ end
129
+
130
+ it 'has iso_long_name Republic of Türkiye' do
131
+ expect(country.iso_long_name).to eq('The Republic of Türkiye')
132
+ end
114
133
  end
115
134
 
116
135
  context 'with Japan' do
@@ -139,7 +158,7 @@ describe ISO3166::Country do
139
158
  ISO3166::Data.register(
140
159
  alpha2: 'BR2',
141
160
  iso_short_name: 'Brazil',
142
- languages_official: %w(pt-BR),
161
+ languages_official: %w[pt-BR],
143
162
  translations: {
144
163
  'pt-BR' => 'Translation for pt-BR',
145
164
  'pt' => 'Translation for pt'
@@ -163,7 +182,7 @@ describe ISO3166::Country do
163
182
  ISO3166::Data.register(
164
183
  alpha2: 'BR2',
165
184
  iso_short_name: 'Brazil',
166
- languages_official: %w(pt-BR),
185
+ languages_official: %w[pt-BR],
167
186
  translations: {
168
187
  'pt' => 'Translation for pt'
169
188
  }
@@ -231,7 +250,7 @@ describe ISO3166::Country do
231
250
  end
232
251
 
233
252
  it '#states should be deprecated' do
234
- expect {country.states}.to output.to_stderr
253
+ expect { country.states }.to output.to_stderr
235
254
  end
236
255
 
237
256
  it 'should be a subdivision object' do
@@ -252,54 +271,54 @@ describe ISO3166::Country do
252
271
  end
253
272
 
254
273
  describe 'subdivision_types' do
255
- it "should return an array of subdivision types" do
274
+ it 'should return an array of subdivision types' do
256
275
  expect(country.subdivision_types).to contain_exactly('district', 'state', 'outlying_area')
257
276
  end
258
277
 
259
- it "should return an array of subdivision types even if there is only a single type" do
278
+ it 'should return an array of subdivision types even if there is only a single type' do
260
279
  expect(ISO3166::Country['LI'].subdivision_types).to contain_exactly('commune')
261
280
  end
262
281
 
263
- it "should return an empty array if country has no subdivisions" do
282
+ it 'should return an empty array if country has no subdivisions' do
264
283
  expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
265
284
  expect(ISO3166::Country['AS'].subdivision_types).to eq([])
266
285
  end
267
286
  end
268
287
 
269
288
  describe 'subdivisions_of_types' do
270
- it "given a single type, should return an array of subdivisions that match the type" do
289
+ it 'given a single type, should return an array of subdivisions that match the type' do
271
290
  us_states = country.subdivisions_of_types(%w[state])
272
291
  expect(us_states.size).to eq(50)
273
292
  dc = country.subdivisions_of_types(%w[district])
274
293
  expect(dc.size).to eq(1)
275
294
  end
276
295
 
277
- it "given multiple types, should return an array of subdivisions matching the types" do
296
+ it 'given multiple types, should return an array of subdivisions matching the types' do
278
297
  us_states_plus_dc = country.subdivisions_of_types(%w[state district])
279
298
  expect(us_states_plus_dc.size).to eq(51)
280
299
  end
281
300
 
282
- it "given multiple types where at least one does not exist for that country, should work without issue" do
301
+ it 'given multiple types where at least one does not exist for that country, should work without issue' do
283
302
  us_states_plus_dc = country.subdivisions_of_types(%w[state district governorate])
284
303
  expect(us_states_plus_dc.size).to eq(51)
285
304
  end
286
305
 
287
- it "given only types that do not exist for that country, should return an empty collection" do
306
+ it 'given only types that do not exist for that country, should return an empty collection' do
288
307
  should_be_empty = ISO3166::Country['PT'].subdivisions_of_types(%w[state county])
289
308
  expect(should_be_empty).to be_empty
290
309
  end
291
310
  end
292
311
 
293
312
  describe 'humanized_subdivision_types' do
294
- it "should return an array of humanized subdivision types" do
313
+ it 'should return an array of humanized subdivision types' do
295
314
  expect(country.humanized_subdivision_types).to contain_exactly('District', 'State', 'Outlying area')
296
315
  end
297
316
 
298
- it "should return an array of subdivision types even if there is only a single type" do
317
+ it 'should return an array of subdivision types even if there is only a single type' do
299
318
  expect(ISO3166::Country['LI'].humanized_subdivision_types).to contain_exactly('Commune')
300
319
  end
301
320
 
302
- it "should return an empty array if country has no subdivisions" do
321
+ it 'should return an empty array if country has no subdivisions' do
303
322
  expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
304
323
  expect(ISO3166::Country['AS'].humanized_subdivision_types).to eq([])
305
324
  end
@@ -325,6 +344,26 @@ describe ISO3166::Country do
325
344
  end
326
345
  end
327
346
 
347
+ describe 'subdivision_names' do
348
+ it 'should return an alphabetized list of all subdivisions names' do
349
+ subdivisions = ISO3166::Country.search('EG').subdivision_names
350
+ expect(subdivisions).to be_an(Array)
351
+ expect(subdivisions.first).to be_a(String)
352
+ expect(subdivisions.size).to eq(27)
353
+ expect(subdivisions.first).to eq('Alexandria')
354
+ end
355
+
356
+ it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
357
+ ISO3166.configuration.locales = %i[es de en]
358
+
359
+ subdivisions = ISO3166::Country.search('EG').subdivision_names(:es)
360
+ expect(subdivisions).to be_an(Array)
361
+ expect(subdivisions.first).to be_a(String)
362
+ expect(subdivisions.size).to eq(27)
363
+ expect(subdivisions.first).to eq('Al Iskandariyah')
364
+ end
365
+ end
366
+
328
367
  describe 'valid?' do
329
368
  it 'should return true if country is valid' do
330
369
  expect(ISO3166::Country.new('US')).to be_valid
@@ -602,6 +641,12 @@ describe ISO3166::Country do
602
641
  expect(spain_data.keys).to eq(['ES'])
603
642
  end
604
643
 
644
+ it 'finds country from a subdivision name' do
645
+ gb_data = ISO3166::Country.find_all_by(:subdivision_names, 'Scotland')
646
+ expect(gb_data).to be_a Hash
647
+ expect(gb_data.keys).to eq(['GB'])
648
+ end
649
+
605
650
  it 'performs reasonably' do
606
651
  start = Time.now
607
652
  250.times do
@@ -690,6 +735,13 @@ describe ISO3166::Country do
690
735
  end
691
736
  end
692
737
 
738
+ context "when search name in 'subdivision_names'" do
739
+ subject { ISO3166::Country.find_by_subdivision_names('Scotland') }
740
+ it 'should return' do
741
+ expect(subject.first).to eq('GB')
742
+ end
743
+ end
744
+
693
745
  context "when search name in 'translated_names'" do
694
746
  before do
695
747
  ISO3166.configure do |config|
@@ -814,13 +866,48 @@ describe ISO3166::Country do
814
866
  end
815
867
  end
816
868
 
817
- context 'regression test for #388' do
818
- let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
869
+ context 'sanity check for #771' do
870
+ let(:turkey) { ISO3166::Country.find_country_by_any_name('Turkey') }
819
871
 
820
872
  it 'should be a country instance' do
873
+ expect(turkey).to be_a(ISO3166::Country)
874
+ expect(turkey.alpha2).to eq('TR')
875
+ end
876
+ end
877
+
878
+ context 'regression test for #746' do
879
+ let(:no_country) { ISO3166::Country.find_country_by_any_name(nil) }
880
+
881
+ it 'should not be a country instance' do
882
+ expect(no_country).to_not be_a(ISO3166::Country)
883
+ expect(no_country).to eq nil
884
+ end
885
+ end
886
+
887
+ context 'regression test for #388/#746/#776' do
888
+ before do
889
+ ISO3166.configure do |config|
890
+ config.locales = %i[af am ar as az be bg bn br bs ca cs cy da de dz el en
891
+ eo es et eu fa fi fo fr ga gl gu he hi hr hu hy ia id
892
+ is it ja ka kk km kn ko ku lt lv mi mk ml mn mr ms mt
893
+ nb ne nl nn oc or pa pl ps pt ro ru rw si sk sl so sq
894
+ sr sv sw ta te th ti tk tl tr tt ug uk ve vi wa wo xh
895
+ zh zu]
896
+ end
897
+ end
898
+
899
+ let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
900
+ let(:zimbabwe) { ISO3166::Country['ZW'] }
901
+
902
+ it 'should not be a country instance' do
821
903
  expect(no_country).to_not be_a(ISO3166::Country)
822
904
  expect(no_country).to eq nil
823
905
  end
906
+
907
+ it 'translated_names should not include nil values' do
908
+ expect(zimbabwe.translation('no')).to be_nil
909
+ expect(zimbabwe.translated_names).not_to include(nil)
910
+ end
824
911
  end
825
912
 
826
913
  context 'when attempting to search by translations hash' do
@@ -998,6 +1085,24 @@ describe ISO3166::Country do
998
1085
  end
999
1086
  end
1000
1087
 
1088
+ describe 'gdpr_compliant?' do
1089
+ let(:united_kigndom) { ISO3166::Country.search('GB') }
1090
+ let(:france) { ISO3166::Country.search('FR') }
1091
+ let(:mexico) { ISO3166::Country.search('MX') }
1092
+
1093
+ it 'should return false for countries without eea_member flag' do
1094
+ expect(mexico.gdpr_compliant?).to be_falsey
1095
+ end
1096
+
1097
+ it 'should return true for countries with eea_member flag set to true' do
1098
+ expect(france.gdpr_compliant?).to be_truthy
1099
+ end
1100
+
1101
+ it 'should return true for UK' do
1102
+ expect(united_kigndom.gdpr_compliant?).to be_truthy
1103
+ end
1104
+ end
1105
+
1001
1106
  describe 'in_esm?' do
1002
1107
  let(:netherlands) { ISO3166::Country.search('NL') }
1003
1108
  let(:switzerland) { ISO3166::Country.search('CH') }
@@ -1015,6 +1120,28 @@ describe ISO3166::Country do
1015
1120
  end
1016
1121
  end
1017
1122
 
1123
+ describe 'in_eu_vat?' do
1124
+ let(:netherlands) { ISO3166::Country.search('NL') }
1125
+ let(:guadeloupe) { ISO3166::Country.search('GP') }
1126
+ let(:monaco) { ISO3166::Country.search('MC') }
1127
+
1128
+ it 'should return false for countries without euvat_member or eu_member flag' do
1129
+ expect(country.in_eu_vat?).to be_falsey
1130
+ end
1131
+
1132
+ it 'should return true for countries with eu_member flag set to true' do
1133
+ expect(netherlands.in_eu_vat?).to be_truthy
1134
+ end
1135
+
1136
+ it 'should return false for countries with euvat_member flag set to false' do
1137
+ expect(guadeloupe.in_eu_vat?).to be_falsey
1138
+ end
1139
+
1140
+ it 'should return true for countries with euvat_member flag set to true' do
1141
+ expect(monaco.in_eu_vat?).to be_truthy
1142
+ end
1143
+ end
1144
+
1018
1145
  describe 'gec' do
1019
1146
  it 'should return the country\'s GEC code' do
1020
1147
  expect(ISO3166::Country.new('NA').gec).to eql 'WA'
@@ -1119,13 +1246,82 @@ describe ISO3166::Country do
1119
1246
  expect(subject.last).to be_empty
1120
1247
  end
1121
1248
 
1122
- context "when asking for alpha2, alpha3 and iso_short_name" do
1123
- let(:args) { [:alpha2, :alpha3, :iso_short_name] }
1249
+ context 'when asking for alpha2, alpha3 and iso_short_name' do
1250
+ let(:args) { %i[alpha2 alpha3 iso_short_name] }
1124
1251
 
1125
1252
  it 'returns the correct values' do
1126
1253
  expect(subject.first).to eq(%w[AD AND Andorra])
1127
1254
  expect(subject.last).to eq(%w[ZW ZWE Zimbabwe])
1128
1255
  end
1129
1256
  end
1257
+
1258
+ context 'with invalid attributes' do
1259
+ let(:args) { %i[alpha2 bad_attribute] }
1260
+
1261
+ it 'should raise an error' do
1262
+ expect { subject }.to(
1263
+ raise_error(KeyError, 'key not found: "bad_attribute"')
1264
+ )
1265
+ end
1266
+ end
1267
+ end
1268
+
1269
+ describe 'find_subdivision_by_name' do
1270
+ let(:italy) { ISO3166::Country.new('IT') }
1271
+ let(:napoli) { italy.subdivisions['NA'] }
1272
+
1273
+ before do
1274
+ ISO3166.configuration.locales = %i[pt]
1275
+ end
1276
+
1277
+ it 'should find a subdivision using the official name' do
1278
+ expect(ISO3166::Country.new('IT').find_subdivision_by_name('Napoli')).to eq napoli
1279
+ end
1280
+
1281
+ it 'should find a subdivision using the code' do
1282
+ expect(ISO3166::Country.new('IT').find_subdivision_by_name('NA')).to eq napoli
1283
+ end
1284
+
1285
+ it 'should find a subdivision using a translated name' do
1286
+ expect(ISO3166::Country.new('IT').find_subdivision_by_name('Nápoles')).to eq napoli
1287
+ end
1288
+ end
1289
+
1290
+ describe 'collect_countries_with' do
1291
+ let(:italy) { ISO3166::Country.new('IT') }
1292
+ let(:vatican) { ISO3166::Country.new('VA') }
1293
+ let(:san_marino) { ISO3166::Country.new('SM') }
1294
+ let(:switzerland) { ISO3166::Country.new('CH') }
1295
+ let(:seychelles) { ISO3166::Country.new('SC') }
1296
+
1297
+ it 'defaults to querying alpha2 and returning the countries' do
1298
+ expect(ISO3166::Country.collect_countries_with('IT')).to eq [italy]
1299
+ end
1300
+
1301
+ it 'allows querying by other attributes' do
1302
+ expect(ISO3166::Country.collect_countries_with('🇸🇨', :emoji_flag)).to eq [seychelles]
1303
+ expect(ISO3166::Country.collect_countries_with('it',
1304
+ :languages_spoken)).to eq [switzerland, italy, san_marino, vatican]
1305
+ end
1306
+
1307
+ it 'allows applying a method to the result set' do
1308
+ expect(ISO3166::Country.collect_countries_with('Caribbean', :subregion,
1309
+ :languages_spoken).flatten.uniq).to eq %w[en nl fr es ht]
1310
+ end
1311
+ end
1312
+
1313
+ describe 'collect_likely_countries_by_subdivision_name' do
1314
+ let(:costa_rica) { ISO3166::Country.new('CR') }
1315
+ let(:uruguay) { ISO3166::Country.new('UY') }
1316
+
1317
+ it 'defaults to returning the countries' do
1318
+ expect(ISO3166::Country.collect_likely_countries_by_subdivision_name('San José')).to eq [costa_rica, uruguay]
1319
+ end
1320
+
1321
+ it 'allows applying a method to the result set' do
1322
+ expect(ISO3166::Country.collect_likely_countries_by_subdivision_name('San José',
1323
+ :iso_short_name)).to eq ['Costa Rica',
1324
+ 'Uruguay']
1325
+ end
1130
1326
  end
1131
1327
  end
data/spec/data_spec.rb CHANGED
@@ -128,7 +128,7 @@ describe ISO3166::Data do
128
128
 
129
129
  it 'can be done' do
130
130
  data = ISO3166::Data.new('TW').call
131
- ISO3166.configuration.locales = [:es, :de, :de]
131
+ ISO3166.configuration.locales = %i[es de de]
132
132
  expect(data['iso_short_name']).to eq 'NEW Taiwan'
133
133
  expect(subject.iso_short_name).to eq 'NEW Taiwan'
134
134
  expect(subject.translations).to eq('en' => 'NEW Taiwan',
@@ -205,18 +205,18 @@ describe ISO3166::Data do
205
205
  it 'has a non-blank code for all subdivisions' do
206
206
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
207
207
  data = YAML.load_file(file)
208
- expect(data.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{file}"
208
+ expect(data.values.none? { |s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{file}"
209
209
  end
210
210
  end
211
211
 
212
212
  it 'has a non-blank, lowercase and snake_case type for all subdivisions' do
213
213
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
214
214
  data = YAML.load_file(file)
215
- no_type = data.select{|k,v| v['type'].nil? }
215
+ no_type = data.select { |_k, v| v['type'].nil? }
216
216
  expect(no_type).to be_empty, "empty subdivision type in #{file} - #{no_type.keys}"
217
- uppercase = data.select{|k,v| v['type'] =~ /[A-Z]/ }
217
+ uppercase = data.select { |_k, v| v['type'] =~ /[A-Z]/ }
218
218
  expect(uppercase).to be_empty, "uppercase characters in subdivision type in #{file} - #{uppercase.keys}"
219
- spaces = data.select{|k,v| v['type'] =~ /\s/ }
219
+ spaces = data.select { |_k, v| v['type'] =~ /\s/ }
220
220
  expect(spaces).to be_empty, "whitespace characters in subdivision type in #{file} - #{spaces.keys}"
221
221
  end
222
222
  end
@@ -224,7 +224,7 @@ describe ISO3166::Data do
224
224
  it 'has a non-blank name for all subdivisions' do
225
225
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
226
226
  data = YAML.load_file(file)
227
- expect(data.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{file}"
227
+ expect(data.values.none? { |s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{file}"
228
228
  end
229
229
  end
230
230
  end
@@ -232,13 +232,17 @@ describe ISO3166::Data do
232
232
  context 'cached country subdivision data' do
233
233
  it 'has a non-blank code for all subdivisions' do
234
234
  ISO3166::Country.all.each do |country|
235
- expect(country.subdivisions.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{country}"
235
+ expect(country.subdivisions.values.none? do |s|
236
+ s['code'].nil?
237
+ end).to be_truthy, "empty subdivision code in #{country}"
236
238
  end
237
239
  end
238
240
 
239
241
  it 'has a non-blank name for all subdivisions' do
240
242
  ISO3166::Country.all.each do |country|
241
- expect(country.subdivisions.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{country}"
243
+ expect(country.subdivisions.values.none? do |s|
244
+ s['name'].nil?
245
+ end).to be_truthy, "empty subdivision name in #{country}"
242
246
  end
243
247
  end
244
248
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'countries'
4
+ require 'debug'
5
+ require 'simplecov'
6
+ SimpleCov.start
7
+
4
8
  RSpec.configure do |config|
5
9
  config.filter_run :focus
6
10
  config.run_all_when_everything_filtered = true
@@ -31,4 +31,12 @@ describe ISO3166::Subdivision do
31
31
  end
32
32
  end
33
33
  end
34
+
35
+ describe 'code_with_translations' do
36
+ before { ISO3166.configuration.locales = %i[en pt] }
37
+ it 'returns a hash' do
38
+ expect(ISO3166::Country.new('IT').subdivisions['NA'].code_with_translations).to eq({ 'NA' => { 'en' => 'Naples',
39
+ 'pt' => 'Nápoles' } })
40
+ end
41
+ end
34
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: countries
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.2
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Robinson
@@ -11,22 +11,22 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-08-11 00:00:00.000000000 Z
14
+ date: 2023-10-07 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: sixarm_ruby_unaccent
17
+ name: unaccent
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '1.1'
22
+ version: '0.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.1'
29
+ version: '0.3'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: activesupport
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +69,20 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '3'
72
+ - !ruby/object:Gem::Dependency
73
+ name: simplecov
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '0.22'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0.22'
72
86
  description: All sorts of useful information about every country packaged as pretty
73
87
  little country objects. It includes data from ISO 3166
74
88
  email:
@@ -79,16 +93,18 @@ executables: []
79
93
  extensions: []
80
94
  extra_rdoc_files: []
81
95
  files:
96
+ - ".codeclimate.yml"
97
+ - ".github/FUNDING.yml"
82
98
  - ".github/workflows/codeql-analysis.yml"
83
99
  - ".github/workflows/tests.yml"
84
100
  - ".gitignore"
85
101
  - ".rspec"
86
102
  - ".rubocop.yml"
87
- - ".rubocop_todo.yml"
88
103
  - CHANGELOG.md
89
104
  - Gemfile
105
+ - Gemfile.lock
90
106
  - LICENSE
91
- - README.markdown
107
+ - README.md
92
108
  - Rakefile
93
109
  - UPGRADE.md
94
110
  - bin/console
@@ -229,6 +245,7 @@ files:
229
245
  - lib/countries/configuration.rb
230
246
  - lib/countries/country.rb
231
247
  - lib/countries/country/class_methods.rb
248
+ - lib/countries/country/country_subdivision_methods.rb
232
249
  - lib/countries/country/currency_methods.rb
233
250
  - lib/countries/country/emoji.rb
234
251
  - lib/countries/country/finder_methods.rb
@@ -482,6 +499,8 @@ files:
482
499
  - lib/countries/data/countries/ZA.yaml
483
500
  - lib/countries/data/countries/ZM.yaml
484
501
  - lib/countries/data/countries/ZW.yaml
502
+ - lib/countries/data/locales_methods.rb
503
+ - lib/countries/data/subdivision_methods.rb
485
504
  - lib/countries/data/subdivisions/AD.yaml
486
505
  - lib/countries/data/subdivisions/AE.yaml
487
506
  - lib/countries/data/subdivisions/AF.yaml
@@ -815,7 +834,6 @@ files:
815
834
  - lib/countries/data/translations/countries-zu.yaml
816
835
  - lib/countries/global.rb
817
836
  - lib/countries/iso3166.rb
818
- - lib/countries/kwarg_struct.rb
819
837
  - lib/countries/mongoid.rb
820
838
  - lib/countries/sources.rb
821
839
  - lib/countries/sources/cldr/downloader.rb
@@ -825,7 +843,6 @@ files:
825
843
  - lib/countries/sources/local/subdivision.rb
826
844
  - lib/countries/structure.rb
827
845
  - lib/countries/subdivision.rb
828
- - lib/countries/tasks/geocoding.rake
829
846
  - lib/countries/tasks/postal_codes.rake
830
847
  - lib/countries/timezones.rb
831
848
  - lib/countries/translations.rb
@@ -864,18 +881,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
864
881
  - !ruby/object:Gem::Version
865
882
  version: '0'
866
883
  requirements: []
867
- rubygems_version: 3.3.7
884
+ rubygems_version: 3.4.19
868
885
  signing_key:
869
886
  specification_version: 4
870
887
  summary: Gives you a country object full of all sorts of useful information.
871
- test_files:
872
- - spec/00_global_spec.rb
873
- - spec/configuration_spec.rb
874
- - spec/country_spec.rb
875
- - spec/data_spec.rb
876
- - spec/mongoid_spec.rb
877
- - spec/perf_spec.rb
878
- - spec/spec_helper.rb
879
- - spec/subdivision_spec.rb
880
- - spec/thread_safety_spec.rb
881
- - spec/timezone_spec.rb
888
+ test_files: []
data/.rubocop_todo.yml DELETED
@@ -1,19 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2022-01-07 11:03:11 UTC using RuboCop version 1.24.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
-
10
- # Offense count: 3
11
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
12
- Metrics/AbcSize:
13
- Max: 33
14
-
15
- # Enable after the doc branch is merged
16
- Style/Documentation:
17
- Enabled: false
18
- # Exclude:
19
- # - 'spec/**/*'
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ISO3166
4
- class KwargStruct < Struct
5
- # Override the initialize to handle hashes of named parameters
6
- def initialize(*args)
7
- opts = args.last.is_a?(Hash) ? args.pop : {}
8
- super(*args)
9
- opts.each_pair do |k, v|
10
- send "#{k}=", v
11
- end
12
- end
13
- end
14
- end