countries 5.4.0 → 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 (486) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +61 -0
  3. data/.github/workflows/codeql-analysis.yml +3 -3
  4. data/.github/workflows/tests.yml +4 -0
  5. data/.gitignore +0 -1
  6. data/.rubocop.yml +17 -8
  7. data/CHANGELOG.md +24 -0
  8. data/Gemfile +1 -2
  9. data/Gemfile.lock +102 -0
  10. data/README.md +47 -1
  11. data/Rakefile +2 -3
  12. data/countries.gemspec +1 -1
  13. data/lib/countries/cache/countries.json +1 -1
  14. data/lib/countries/cache/locales/lt.json +1 -1
  15. data/lib/countries/cache/locales/pt-br.json +1 -1
  16. data/lib/countries/country/class_methods.rb +22 -3
  17. data/lib/countries/country/country_subdivision_methods.rb +82 -0
  18. data/lib/countries/country/currency_methods.rb +0 -1
  19. data/lib/countries/country/finder_methods.rb +2 -4
  20. data/lib/countries/country.rb +21 -56
  21. data/lib/countries/data/countries/AD.yaml +1 -0
  22. data/lib/countries/data/countries/AE.yaml +1 -0
  23. data/lib/countries/data/countries/AF.yaml +1 -0
  24. data/lib/countries/data/countries/AG.yaml +1 -0
  25. data/lib/countries/data/countries/AI.yaml +1 -0
  26. data/lib/countries/data/countries/AL.yaml +1 -0
  27. data/lib/countries/data/countries/AM.yaml +1 -0
  28. data/lib/countries/data/countries/AO.yaml +1 -0
  29. data/lib/countries/data/countries/AQ.yaml +1 -0
  30. data/lib/countries/data/countries/AR.yaml +2 -0
  31. data/lib/countries/data/countries/AS.yaml +1 -0
  32. data/lib/countries/data/countries/AT.yaml +1 -0
  33. data/lib/countries/data/countries/AU.yaml +2 -0
  34. data/lib/countries/data/countries/AW.yaml +1 -0
  35. data/lib/countries/data/countries/AX.yaml +1 -0
  36. data/lib/countries/data/countries/AZ.yaml +1 -0
  37. data/lib/countries/data/countries/BA.yaml +1 -0
  38. data/lib/countries/data/countries/BB.yaml +1 -0
  39. data/lib/countries/data/countries/BD.yaml +1 -0
  40. data/lib/countries/data/countries/BE.yaml +1 -0
  41. data/lib/countries/data/countries/BF.yaml +1 -0
  42. data/lib/countries/data/countries/BG.yaml +1 -0
  43. data/lib/countries/data/countries/BH.yaml +1 -0
  44. data/lib/countries/data/countries/BI.yaml +1 -0
  45. data/lib/countries/data/countries/BJ.yaml +1 -0
  46. data/lib/countries/data/countries/BL.yaml +1 -0
  47. data/lib/countries/data/countries/BM.yaml +1 -0
  48. data/lib/countries/data/countries/BN.yaml +1 -0
  49. data/lib/countries/data/countries/BO.yaml +1 -0
  50. data/lib/countries/data/countries/BQ.yaml +1 -0
  51. data/lib/countries/data/countries/BR.yaml +2 -0
  52. data/lib/countries/data/countries/BS.yaml +1 -0
  53. data/lib/countries/data/countries/BT.yaml +1 -0
  54. data/lib/countries/data/countries/BV.yaml +1 -0
  55. data/lib/countries/data/countries/BW.yaml +1 -0
  56. data/lib/countries/data/countries/BY.yaml +1 -0
  57. data/lib/countries/data/countries/BZ.yaml +1 -0
  58. data/lib/countries/data/countries/CA.yaml +3 -0
  59. data/lib/countries/data/countries/CC.yaml +1 -0
  60. data/lib/countries/data/countries/CD.yaml +1 -0
  61. data/lib/countries/data/countries/CF.yaml +1 -0
  62. data/lib/countries/data/countries/CG.yaml +1 -0
  63. data/lib/countries/data/countries/CH.yaml +1 -0
  64. data/lib/countries/data/countries/CI.yaml +1 -0
  65. data/lib/countries/data/countries/CK.yaml +1 -0
  66. data/lib/countries/data/countries/CL.yaml +1 -0
  67. data/lib/countries/data/countries/CM.yaml +1 -0
  68. data/lib/countries/data/countries/CN.yaml +2 -0
  69. data/lib/countries/data/countries/CO.yaml +1 -0
  70. data/lib/countries/data/countries/CR.yaml +1 -0
  71. data/lib/countries/data/countries/CU.yaml +1 -0
  72. data/lib/countries/data/countries/CV.yaml +1 -0
  73. data/lib/countries/data/countries/CW.yaml +1 -0
  74. data/lib/countries/data/countries/CX.yaml +1 -0
  75. data/lib/countries/data/countries/CY.yaml +1 -0
  76. data/lib/countries/data/countries/CZ.yaml +1 -0
  77. data/lib/countries/data/countries/DE.yaml +3 -0
  78. data/lib/countries/data/countries/DJ.yaml +1 -0
  79. data/lib/countries/data/countries/DK.yaml +1 -0
  80. data/lib/countries/data/countries/DM.yaml +1 -0
  81. data/lib/countries/data/countries/DO.yaml +1 -0
  82. data/lib/countries/data/countries/DZ.yaml +1 -0
  83. data/lib/countries/data/countries/EC.yaml +1 -0
  84. data/lib/countries/data/countries/EE.yaml +1 -0
  85. data/lib/countries/data/countries/EG.yaml +1 -0
  86. data/lib/countries/data/countries/EH.yaml +1 -0
  87. data/lib/countries/data/countries/ER.yaml +1 -0
  88. data/lib/countries/data/countries/ES.yaml +1 -0
  89. data/lib/countries/data/countries/ET.yaml +1 -0
  90. data/lib/countries/data/countries/FI.yaml +1 -0
  91. data/lib/countries/data/countries/FJ.yaml +1 -0
  92. data/lib/countries/data/countries/FK.yaml +1 -0
  93. data/lib/countries/data/countries/FM.yaml +1 -0
  94. data/lib/countries/data/countries/FO.yaml +1 -0
  95. data/lib/countries/data/countries/FR.yaml +3 -0
  96. data/lib/countries/data/countries/GA.yaml +1 -0
  97. data/lib/countries/data/countries/GB.yaml +3 -0
  98. data/lib/countries/data/countries/GD.yaml +1 -0
  99. data/lib/countries/data/countries/GE.yaml +1 -0
  100. data/lib/countries/data/countries/GF.yaml +1 -0
  101. data/lib/countries/data/countries/GG.yaml +1 -0
  102. data/lib/countries/data/countries/GH.yaml +1 -0
  103. data/lib/countries/data/countries/GI.yaml +1 -0
  104. data/lib/countries/data/countries/GL.yaml +1 -0
  105. data/lib/countries/data/countries/GM.yaml +1 -0
  106. data/lib/countries/data/countries/GN.yaml +1 -0
  107. data/lib/countries/data/countries/GP.yaml +1 -0
  108. data/lib/countries/data/countries/GQ.yaml +1 -0
  109. data/lib/countries/data/countries/GR.yaml +1 -0
  110. data/lib/countries/data/countries/GS.yaml +1 -0
  111. data/lib/countries/data/countries/GT.yaml +1 -0
  112. data/lib/countries/data/countries/GU.yaml +1 -0
  113. data/lib/countries/data/countries/GW.yaml +1 -0
  114. data/lib/countries/data/countries/GY.yaml +1 -0
  115. data/lib/countries/data/countries/HK.yaml +1 -0
  116. data/lib/countries/data/countries/HM.yaml +1 -0
  117. data/lib/countries/data/countries/HN.yaml +1 -0
  118. data/lib/countries/data/countries/HR.yaml +1 -0
  119. data/lib/countries/data/countries/HT.yaml +1 -0
  120. data/lib/countries/data/countries/HU.yaml +1 -0
  121. data/lib/countries/data/countries/ID.yaml +2 -0
  122. data/lib/countries/data/countries/IE.yaml +1 -0
  123. data/lib/countries/data/countries/IL.yaml +1 -0
  124. data/lib/countries/data/countries/IM.yaml +1 -0
  125. data/lib/countries/data/countries/IN.yaml +2 -0
  126. data/lib/countries/data/countries/IO.yaml +1 -0
  127. data/lib/countries/data/countries/IQ.yaml +1 -0
  128. data/lib/countries/data/countries/IR.yaml +1 -0
  129. data/lib/countries/data/countries/IS.yaml +1 -0
  130. data/lib/countries/data/countries/IT.yaml +3 -0
  131. data/lib/countries/data/countries/JE.yaml +1 -0
  132. data/lib/countries/data/countries/JM.yaml +1 -0
  133. data/lib/countries/data/countries/JO.yaml +1 -0
  134. data/lib/countries/data/countries/JP.yaml +3 -0
  135. data/lib/countries/data/countries/KE.yaml +1 -0
  136. data/lib/countries/data/countries/KG.yaml +1 -0
  137. data/lib/countries/data/countries/KH.yaml +1 -0
  138. data/lib/countries/data/countries/KI.yaml +1 -0
  139. data/lib/countries/data/countries/KM.yaml +1 -0
  140. data/lib/countries/data/countries/KN.yaml +1 -0
  141. data/lib/countries/data/countries/KP.yaml +1 -0
  142. data/lib/countries/data/countries/KR.yaml +2 -0
  143. data/lib/countries/data/countries/KW.yaml +1 -0
  144. data/lib/countries/data/countries/KY.yaml +1 -0
  145. data/lib/countries/data/countries/KZ.yaml +1 -0
  146. data/lib/countries/data/countries/LA.yaml +1 -0
  147. data/lib/countries/data/countries/LB.yaml +1 -0
  148. data/lib/countries/data/countries/LC.yaml +1 -0
  149. data/lib/countries/data/countries/LI.yaml +1 -0
  150. data/lib/countries/data/countries/LK.yaml +1 -0
  151. data/lib/countries/data/countries/LR.yaml +1 -0
  152. data/lib/countries/data/countries/LS.yaml +1 -0
  153. data/lib/countries/data/countries/LT.yaml +1 -0
  154. data/lib/countries/data/countries/LU.yaml +1 -0
  155. data/lib/countries/data/countries/LV.yaml +1 -0
  156. data/lib/countries/data/countries/LY.yaml +1 -0
  157. data/lib/countries/data/countries/MA.yaml +1 -0
  158. data/lib/countries/data/countries/MC.yaml +1 -0
  159. data/lib/countries/data/countries/MD.yaml +1 -0
  160. data/lib/countries/data/countries/ME.yaml +1 -0
  161. data/lib/countries/data/countries/MF.yaml +1 -0
  162. data/lib/countries/data/countries/MG.yaml +1 -0
  163. data/lib/countries/data/countries/MH.yaml +1 -0
  164. data/lib/countries/data/countries/MK.yaml +1 -0
  165. data/lib/countries/data/countries/ML.yaml +1 -0
  166. data/lib/countries/data/countries/MM.yaml +1 -0
  167. data/lib/countries/data/countries/MN.yaml +1 -0
  168. data/lib/countries/data/countries/MO.yaml +1 -0
  169. data/lib/countries/data/countries/MP.yaml +1 -0
  170. data/lib/countries/data/countries/MQ.yaml +1 -0
  171. data/lib/countries/data/countries/MR.yaml +1 -0
  172. data/lib/countries/data/countries/MS.yaml +1 -0
  173. data/lib/countries/data/countries/MT.yaml +1 -0
  174. data/lib/countries/data/countries/MU.yaml +1 -0
  175. data/lib/countries/data/countries/MV.yaml +1 -0
  176. data/lib/countries/data/countries/MW.yaml +1 -0
  177. data/lib/countries/data/countries/MX.yaml +2 -0
  178. data/lib/countries/data/countries/MY.yaml +1 -0
  179. data/lib/countries/data/countries/MZ.yaml +1 -0
  180. data/lib/countries/data/countries/NA.yaml +1 -0
  181. data/lib/countries/data/countries/NC.yaml +1 -0
  182. data/lib/countries/data/countries/NE.yaml +1 -0
  183. data/lib/countries/data/countries/NF.yaml +1 -0
  184. data/lib/countries/data/countries/NG.yaml +1 -0
  185. data/lib/countries/data/countries/NI.yaml +1 -0
  186. data/lib/countries/data/countries/NL.yaml +1 -0
  187. data/lib/countries/data/countries/NO.yaml +1 -0
  188. data/lib/countries/data/countries/NP.yaml +1 -0
  189. data/lib/countries/data/countries/NR.yaml +1 -0
  190. data/lib/countries/data/countries/NU.yaml +1 -0
  191. data/lib/countries/data/countries/NZ.yaml +1 -0
  192. data/lib/countries/data/countries/OM.yaml +1 -0
  193. data/lib/countries/data/countries/PA.yaml +1 -0
  194. data/lib/countries/data/countries/PE.yaml +1 -0
  195. data/lib/countries/data/countries/PF.yaml +1 -0
  196. data/lib/countries/data/countries/PG.yaml +1 -0
  197. data/lib/countries/data/countries/PH.yaml +1 -0
  198. data/lib/countries/data/countries/PK.yaml +1 -0
  199. data/lib/countries/data/countries/PL.yaml +1 -0
  200. data/lib/countries/data/countries/PM.yaml +1 -0
  201. data/lib/countries/data/countries/PN.yaml +1 -0
  202. data/lib/countries/data/countries/PR.yaml +1 -0
  203. data/lib/countries/data/countries/PS.yaml +1 -0
  204. data/lib/countries/data/countries/PT.yaml +1 -0
  205. data/lib/countries/data/countries/PW.yaml +1 -0
  206. data/lib/countries/data/countries/PY.yaml +1 -0
  207. data/lib/countries/data/countries/QA.yaml +1 -0
  208. data/lib/countries/data/countries/RE.yaml +1 -0
  209. data/lib/countries/data/countries/RO.yaml +1 -0
  210. data/lib/countries/data/countries/RS.yaml +1 -0
  211. data/lib/countries/data/countries/RU.yaml +2 -0
  212. data/lib/countries/data/countries/RW.yaml +1 -0
  213. data/lib/countries/data/countries/SA.yaml +2 -0
  214. data/lib/countries/data/countries/SB.yaml +1 -0
  215. data/lib/countries/data/countries/SC.yaml +1 -0
  216. data/lib/countries/data/countries/SD.yaml +1 -0
  217. data/lib/countries/data/countries/SE.yaml +1 -0
  218. data/lib/countries/data/countries/SG.yaml +1 -0
  219. data/lib/countries/data/countries/SH.yaml +1 -0
  220. data/lib/countries/data/countries/SI.yaml +1 -0
  221. data/lib/countries/data/countries/SJ.yaml +1 -0
  222. data/lib/countries/data/countries/SK.yaml +1 -0
  223. data/lib/countries/data/countries/SL.yaml +1 -0
  224. data/lib/countries/data/countries/SM.yaml +1 -0
  225. data/lib/countries/data/countries/SN.yaml +1 -0
  226. data/lib/countries/data/countries/SO.yaml +1 -0
  227. data/lib/countries/data/countries/SR.yaml +1 -0
  228. data/lib/countries/data/countries/SS.yaml +1 -0
  229. data/lib/countries/data/countries/ST.yaml +1 -0
  230. data/lib/countries/data/countries/SV.yaml +1 -0
  231. data/lib/countries/data/countries/SX.yaml +1 -0
  232. data/lib/countries/data/countries/SY.yaml +1 -0
  233. data/lib/countries/data/countries/SZ.yaml +1 -0
  234. data/lib/countries/data/countries/TC.yaml +1 -0
  235. data/lib/countries/data/countries/TD.yaml +1 -0
  236. data/lib/countries/data/countries/TF.yaml +1 -0
  237. data/lib/countries/data/countries/TG.yaml +1 -0
  238. data/lib/countries/data/countries/TH.yaml +1 -0
  239. data/lib/countries/data/countries/TJ.yaml +1 -0
  240. data/lib/countries/data/countries/TK.yaml +1 -0
  241. data/lib/countries/data/countries/TL.yaml +1 -0
  242. data/lib/countries/data/countries/TM.yaml +1 -0
  243. data/lib/countries/data/countries/TN.yaml +1 -0
  244. data/lib/countries/data/countries/TO.yaml +1 -0
  245. data/lib/countries/data/countries/TR.yaml +2 -0
  246. data/lib/countries/data/countries/TT.yaml +1 -0
  247. data/lib/countries/data/countries/TV.yaml +1 -0
  248. data/lib/countries/data/countries/TW.yaml +2 -1
  249. data/lib/countries/data/countries/TZ.yaml +1 -0
  250. data/lib/countries/data/countries/UA.yaml +1 -0
  251. data/lib/countries/data/countries/UG.yaml +1 -0
  252. data/lib/countries/data/countries/UM.yaml +1 -0
  253. data/lib/countries/data/countries/US.yaml +3 -0
  254. data/lib/countries/data/countries/UY.yaml +1 -0
  255. data/lib/countries/data/countries/UZ.yaml +1 -0
  256. data/lib/countries/data/countries/VA.yaml +1 -0
  257. data/lib/countries/data/countries/VC.yaml +1 -0
  258. data/lib/countries/data/countries/VE.yaml +1 -0
  259. data/lib/countries/data/countries/VG.yaml +1 -0
  260. data/lib/countries/data/countries/VI.yaml +1 -0
  261. data/lib/countries/data/countries/VN.yaml +1 -0
  262. data/lib/countries/data/countries/VU.yaml +1 -0
  263. data/lib/countries/data/countries/WF.yaml +1 -0
  264. data/lib/countries/data/countries/WS.yaml +1 -0
  265. data/lib/countries/data/countries/YE.yaml +1 -0
  266. data/lib/countries/data/countries/YT.yaml +1 -0
  267. data/lib/countries/data/countries/ZA.yaml +2 -0
  268. data/lib/countries/data/countries/ZM.yaml +1 -0
  269. data/lib/countries/data/countries/ZW.yaml +1 -0
  270. data/lib/countries/data/locales_methods.rb +23 -0
  271. data/lib/countries/data/subdivision_methods.rb +30 -0
  272. data/lib/countries/data/subdivisions/AD.yaml +7 -0
  273. data/lib/countries/data/subdivisions/AE.yaml +18 -0
  274. data/lib/countries/data/subdivisions/AF.yaml +167 -2
  275. data/lib/countries/data/subdivisions/AG.yaml +9 -0
  276. data/lib/countries/data/subdivisions/AL.yaml +57 -0
  277. data/lib/countries/data/subdivisions/AM.yaml +34 -0
  278. data/lib/countries/data/subdivisions/AO.yaml +36 -0
  279. data/lib/countries/data/subdivisions/AR.yaml +46 -0
  280. data/lib/countries/data/subdivisions/AT.yaml +28 -0
  281. data/lib/countries/data/subdivisions/AU.yaml +29 -0
  282. data/lib/countries/data/subdivisions/AZ.yaml +239 -0
  283. data/lib/countries/data/subdivisions/BA.yaml +5 -0
  284. data/lib/countries/data/subdivisions/BB.yaml +4 -0
  285. data/lib/countries/data/subdivisions/BD.yaml +139 -0
  286. data/lib/countries/data/subdivisions/BE.yaml +34 -0
  287. data/lib/countries/data/subdivisions/BF.yaml +56 -0
  288. data/lib/countries/data/subdivisions/BG.yaml +30 -0
  289. data/lib/countries/data/subdivisions/BH.yaml +13 -0
  290. data/lib/countries/data/subdivisions/BI.yaml +54 -0
  291. data/lib/countries/data/subdivisions/BJ.yaml +22 -0
  292. data/lib/countries/data/subdivisions/BN.yaml +9 -0
  293. data/lib/countries/data/subdivisions/BO.yaml +35 -0
  294. data/lib/countries/data/subdivisions/BQ.yaml +4 -0
  295. data/lib/countries/data/subdivisions/BR.yaml +14 -0
  296. data/lib/countries/data/subdivisions/BS.yaml +24 -0
  297. data/lib/countries/data/subdivisions/BT.yaml +24 -0
  298. data/lib/countries/data/subdivisions/BW.yaml +24 -0
  299. data/lib/countries/data/subdivisions/BY.yaml +5 -0
  300. data/lib/countries/data/subdivisions/BZ.yaml +3 -0
  301. data/lib/countries/data/subdivisions/CA.yaml +24 -0
  302. data/lib/countries/data/subdivisions/CD.yaml +77 -0
  303. data/lib/countries/data/subdivisions/CF.yaml +15 -0
  304. data/lib/countries/data/subdivisions/CG.yaml +18 -0
  305. data/lib/countries/data/subdivisions/CH.yaml +92 -0
  306. data/lib/countries/data/subdivisions/CI.yaml +65 -0
  307. data/lib/countries/data/subdivisions/CL.yaml +45 -2
  308. data/lib/countries/data/subdivisions/CM.yaml +22 -0
  309. data/lib/countries/data/subdivisions/CN.yaml +98 -0
  310. data/lib/countries/data/subdivisions/CO.yaml +68 -0
  311. data/lib/countries/data/subdivisions/CR.yaml +14 -0
  312. data/lib/countries/data/subdivisions/CU.yaml +42 -0
  313. data/lib/countries/data/subdivisions/CV.yaml +32 -0
  314. data/lib/countries/data/subdivisions/CY.yaml +18 -0
  315. data/lib/countries/data/subdivisions/CZ.yaml +227 -0
  316. data/lib/countries/data/subdivisions/DE.yaml +31 -0
  317. data/lib/countries/data/subdivisions/DJ.yaml +16 -0
  318. data/lib/countries/data/subdivisions/DK.yaml +13 -0
  319. data/lib/countries/data/subdivisions/DM.yaml +1 -0
  320. data/lib/countries/data/subdivisions/DO.yaml +102 -0
  321. data/lib/countries/data/subdivisions/DZ.yaml +104 -0
  322. data/lib/countries/data/subdivisions/EC.yaml +72 -0
  323. data/lib/countries/data/subdivisions/EE.yaml +6 -0
  324. data/lib/countries/data/subdivisions/EG.yaml +54 -0
  325. data/lib/countries/data/subdivisions/ER.yaml +2 -0
  326. data/lib/countries/data/subdivisions/ES.yaml +252 -0
  327. data/lib/countries/data/subdivisions/ET.yaml +27 -0
  328. data/lib/countries/data/subdivisions/FI.yaml +78 -0
  329. data/lib/countries/data/subdivisions/FJ.yaml +30 -0
  330. data/lib/countries/data/subdivisions/FM.yaml +11 -0
  331. data/lib/countries/data/subdivisions/FR.yaml +332 -1
  332. data/lib/countries/data/subdivisions/GA.yaml +24 -0
  333. data/lib/countries/data/subdivisions/GB.yaml +488 -0
  334. data/lib/countries/data/subdivisions/GD.yaml +10 -0
  335. data/lib/countries/data/subdivisions/GE.yaml +34 -0
  336. data/lib/countries/data/subdivisions/GH.yaml +79 -0
  337. data/lib/countries/data/subdivisions/GL.yaml +58 -0
  338. data/lib/countries/data/subdivisions/GM.yaml +10 -0
  339. data/lib/countries/data/subdivisions/GN.yaml +65 -0
  340. data/lib/countries/data/subdivisions/GQ.yaml +36 -0
  341. data/lib/countries/data/subdivisions/GR.yaml +41 -0
  342. data/lib/countries/data/subdivisions/GW.yaml +24 -0
  343. data/lib/countries/data/subdivisions/GY.yaml +31 -0
  344. data/lib/countries/data/subdivisions/HN.yaml +21 -0
  345. data/lib/countries/data/subdivisions/HR.yaml +82 -0
  346. data/lib/countries/data/subdivisions/HT.yaml +14 -0
  347. data/lib/countries/data/subdivisions/HU.yaml +94 -0
  348. data/lib/countries/data/subdivisions/ID.yaml +99 -0
  349. data/lib/countries/data/subdivisions/IE.yaml +39 -0
  350. data/lib/countries/data/subdivisions/IL.yaml +15 -0
  351. data/lib/countries/data/subdivisions/IN.yaml +210 -0
  352. data/lib/countries/data/subdivisions/IQ.yaml +59 -0
  353. data/lib/countries/data/subdivisions/IR.yaml +2 -0
  354. data/lib/countries/data/subdivisions/IS.yaml +560 -0
  355. data/lib/countries/data/subdivisions/IT.yaml +321 -0
  356. data/lib/countries/data/subdivisions/JM.yaml +22 -0
  357. data/lib/countries/data/subdivisions/JO.yaml +16 -0
  358. data/lib/countries/data/subdivisions/JP.yaml +42 -0
  359. data/lib/countries/data/subdivisions/KE.yaml +298 -0
  360. data/lib/countries/data/subdivisions/KG.yaml +28 -0
  361. data/lib/countries/data/subdivisions/KH.yaml +108 -0
  362. data/lib/countries/data/subdivisions/KI.yaml +6 -0
  363. data/lib/countries/data/subdivisions/KM.yaml +4 -0
  364. data/lib/countries/data/subdivisions/KN.yaml +6 -0
  365. data/lib/countries/data/subdivisions/KP.yaml +42 -0
  366. data/lib/countries/data/subdivisions/KR.yaml +36 -0
  367. data/lib/countries/data/subdivisions/KW.yaml +5 -0
  368. data/lib/countries/data/subdivisions/KZ.yaml +113 -0
  369. data/lib/countries/data/subdivisions/LA.yaml +49 -0
  370. data/lib/countries/data/subdivisions/LB.yaml +28 -0
  371. data/lib/countries/data/subdivisions/LC.yaml +6 -0
  372. data/lib/countries/data/subdivisions/LI.yaml +37 -0
  373. data/lib/countries/data/subdivisions/LK.yaml +67 -0
  374. data/lib/countries/data/subdivisions/LR.yaml +16 -0
  375. data/lib/countries/data/subdivisions/LS.yaml +23 -0
  376. data/lib/countries/data/subdivisions/LT.yaml +315 -0
  377. data/lib/countries/data/subdivisions/LU.yaml +31 -0
  378. data/lib/countries/data/subdivisions/LV.yaml +83 -0
  379. data/lib/countries/data/subdivisions/LY.yaml +16 -0
  380. data/lib/countries/data/subdivisions/MA.yaml +827 -12
  381. data/lib/countries/data/subdivisions/MC.yaml +47 -0
  382. data/lib/countries/data/subdivisions/MD.yaml +41 -0
  383. data/lib/countries/data/subdivisions/ME.yaml +83 -0
  384. data/lib/countries/data/subdivisions/MG.yaml +21 -0
  385. data/lib/countries/data/subdivisions/MH.yaml +70 -0
  386. data/lib/countries/data/subdivisions/MK.yaml +505 -0
  387. data/lib/countries/data/subdivisions/ML.yaml +33 -0
  388. data/lib/countries/data/subdivisions/MM.yaml +51 -0
  389. data/lib/countries/data/subdivisions/MN.yaml +94 -0
  390. data/lib/countries/data/subdivisions/MR.yaml +32 -0
  391. data/lib/countries/data/subdivisions/MT.yaml +126 -0
  392. data/lib/countries/data/subdivisions/MU.yaml +21 -0
  393. data/lib/countries/data/subdivisions/MV.yaml +20 -0
  394. data/lib/countries/data/subdivisions/MW.yaml +52 -0
  395. data/lib/countries/data/subdivisions/MX.yaml +23 -0
  396. data/lib/countries/data/subdivisions/MY.yaml +24 -0
  397. data/lib/countries/data/subdivisions/MZ.yaml +20 -0
  398. data/lib/countries/data/subdivisions/NA.yaml +28 -0
  399. data/lib/countries/data/subdivisions/NE.yaml +9 -0
  400. data/lib/countries/data/subdivisions/NG.yaml +89 -0
  401. data/lib/countries/data/subdivisions/NI.yaml +25 -0
  402. data/lib/countries/data/subdivisions/NL.yaml +24 -0
  403. data/lib/countries/data/subdivisions/NO.yaml +138 -1
  404. data/lib/countries/data/subdivisions/NP.yaml +9 -0
  405. data/lib/countries/data/subdivisions/NR.yaml +19 -0
  406. data/lib/countries/data/subdivisions/NZ.yaml +34 -0
  407. data/lib/countries/data/subdivisions/OM.yaml +10 -0
  408. data/lib/countries/data/subdivisions/PA.yaml +27 -0
  409. data/lib/countries/data/subdivisions/PE.yaml +24 -0
  410. data/lib/countries/data/subdivisions/PG.yaml +46 -0
  411. data/lib/countries/data/subdivisions/PH.yaml +293 -0
  412. data/lib/countries/data/subdivisions/PK.yaml +22 -0
  413. data/lib/countries/data/subdivisions/PL.yaml +141 -0
  414. data/lib/countries/data/subdivisions/PS.yaml +41 -0
  415. data/lib/countries/data/subdivisions/PT.yaml +36 -0
  416. data/lib/countries/data/subdivisions/PW.yaml +24 -0
  417. data/lib/countries/data/subdivisions/PY.yaml +21 -0
  418. data/lib/countries/data/subdivisions/QA.yaml +26 -0
  419. data/lib/countries/data/subdivisions/RO.yaml +189 -0
  420. data/lib/countries/data/subdivisions/RS.yaml +112 -0
  421. data/lib/countries/data/subdivisions/RU.yaml +123 -0
  422. data/lib/countries/data/subdivisions/RW.yaml +7 -0
  423. data/lib/countries/data/subdivisions/SA.yaml +38 -0
  424. data/lib/countries/data/subdivisions/SB.yaml +11 -0
  425. data/lib/countries/data/subdivisions/SC.yaml +45 -0
  426. data/lib/countries/data/subdivisions/SD.yaml +15 -0
  427. data/lib/countries/data/subdivisions/SE.yaml +42 -0
  428. data/lib/countries/data/subdivisions/SG.yaml +8 -0
  429. data/lib/countries/data/subdivisions/SH.yaml +6 -0
  430. data/lib/countries/data/subdivisions/SI.yaml +735 -0
  431. data/lib/countries/data/subdivisions/SK.yaml +22 -0
  432. data/lib/countries/data/subdivisions/SL.yaml +7 -0
  433. data/lib/countries/data/subdivisions/SM.yaml +19 -0
  434. data/lib/countries/data/subdivisions/SN.yaml +43 -0
  435. data/lib/countries/data/subdivisions/SO.yaml +71 -0
  436. data/lib/countries/data/subdivisions/SR.yaml +17 -0
  437. data/lib/countries/data/subdivisions/SS.yaml +4 -0
  438. data/lib/countries/data/subdivisions/ST.yaml +127 -0
  439. data/lib/countries/data/subdivisions/SV.yaml +20 -0
  440. data/lib/countries/data/subdivisions/SY.yaml +53 -0
  441. data/lib/countries/data/subdivisions/SZ.yaml +18 -0
  442. data/lib/countries/data/subdivisions/TD.yaml +51 -0
  443. data/lib/countries/data/subdivisions/TG.yaml +13 -0
  444. data/lib/countries/data/subdivisions/TH.yaml +231 -0
  445. data/lib/countries/data/subdivisions/TJ.yaml +15 -0
  446. data/lib/countries/data/subdivisions/TL.yaml +38 -0
  447. data/lib/countries/data/subdivisions/TM.yaml +15 -0
  448. data/lib/countries/data/subdivisions/TN.yaml +25 -0
  449. data/lib/countries/data/subdivisions/TO.yaml +1 -0
  450. data/lib/countries/data/subdivisions/TR.yaml +93 -0
  451. data/lib/countries/data/subdivisions/TT.yaml +25 -0
  452. data/lib/countries/data/subdivisions/TV.yaml +25 -0
  453. data/lib/countries/data/subdivisions/TW.yaml +106 -0
  454. data/lib/countries/data/subdivisions/TZ.yaml +38 -0
  455. data/lib/countries/data/subdivisions/UA.yaml +86 -4
  456. data/lib/countries/data/subdivisions/UG.yaml +262 -0
  457. data/lib/countries/data/subdivisions/UM.yaml +4 -0
  458. data/lib/countries/data/subdivisions/US.yaml +118 -1
  459. data/lib/countries/data/subdivisions/UY.yaml +27 -0
  460. data/lib/countries/data/subdivisions/UZ.yaml +65 -0
  461. data/lib/countries/data/subdivisions/VC.yaml +6 -0
  462. data/lib/countries/data/subdivisions/VE.yaml +33 -0
  463. data/lib/countries/data/subdivisions/VN.yaml +131 -0
  464. data/lib/countries/data/subdivisions/VU.yaml +8 -0
  465. data/lib/countries/data/subdivisions/WS.yaml +18 -0
  466. data/lib/countries/data/subdivisions/YE.yaml +16 -0
  467. data/lib/countries/data/subdivisions/ZA.yaml +5 -0
  468. data/lib/countries/data/subdivisions/ZM.yaml +24 -0
  469. data/lib/countries/data/subdivisions/ZW.yaml +21 -0
  470. data/lib/countries/data/translations/countries-lt.yaml +1 -1
  471. data/lib/countries/data/translations/countries-pt_BR.yaml +1 -1
  472. data/lib/countries/data.rb +19 -50
  473. data/lib/countries/global.rb +0 -1
  474. data/lib/countries/iso3166.rb +3 -0
  475. data/lib/countries/sources/cldr/subdivision.rb +1 -1
  476. data/lib/countries/structure.rb +1 -0
  477. data/lib/countries/subdivision.rb +5 -0
  478. data/lib/countries/tasks/postal_codes.rake +5 -1
  479. data/lib/countries/version.rb +1 -1
  480. data/spec/country_spec.rb +123 -22
  481. data/spec/data_spec.rb +12 -8
  482. data/spec/spec_helper.rb +4 -0
  483. data/spec/subdivision_spec.rb +8 -0
  484. metadata +23 -16
  485. data/.rubocop_todo.yml +0 -19
  486. 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,11 +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",
52
- "Vereinigte Staaten von Amerika",
53
- "États-Unis", "Estados Unidos",
54
- "アメリカ合衆国", "Verenigde Staten",
55
- "Соединенные Штаты Америки"])
55
+ expect(country.unofficial_names).to eq(['United States', 'USA',
56
+ 'Vereinigte Staaten von Amerika',
57
+ 'États-Unis', 'Estados Unidos',
58
+ 'アメリカ合衆国', 'Verenigde Staten',
59
+ 'Соединенные Штаты Америки'])
56
60
  end
57
61
 
58
62
  it 'should return translations' do
@@ -76,6 +80,10 @@ describe ISO3166::Country do
76
80
  expect(country.continent).to eq('North America')
77
81
  end
78
82
 
83
+ it 'should return distance unit' do
84
+ expect(country.distance_unit).to eq('MI')
85
+ end
86
+
79
87
  it 'knows about whether or not the country uses postal codes' do
80
88
  expect(country.zip).to be_truthy
81
89
  end
@@ -90,6 +98,7 @@ describe ISO3166::Country do
90
98
 
91
99
  regex = Regexp.new(country.postal_code_format)
92
100
  expect(regex).to match('12345-6789')
101
+ expect(regex).not_to match('12345-67890')
93
102
 
94
103
  antarctica = ISO3166::Country.search('AQ')
95
104
  expect(antarctica.postal_code_format).to be_nil
@@ -149,7 +158,7 @@ describe ISO3166::Country do
149
158
  ISO3166::Data.register(
150
159
  alpha2: 'BR2',
151
160
  iso_short_name: 'Brazil',
152
- languages_official: %w(pt-BR),
161
+ languages_official: %w[pt-BR],
153
162
  translations: {
154
163
  'pt-BR' => 'Translation for pt-BR',
155
164
  'pt' => 'Translation for pt'
@@ -173,7 +182,7 @@ describe ISO3166::Country do
173
182
  ISO3166::Data.register(
174
183
  alpha2: 'BR2',
175
184
  iso_short_name: 'Brazil',
176
- languages_official: %w(pt-BR),
185
+ languages_official: %w[pt-BR],
177
186
  translations: {
178
187
  'pt' => 'Translation for pt'
179
188
  }
@@ -241,7 +250,7 @@ describe ISO3166::Country do
241
250
  end
242
251
 
243
252
  it '#states should be deprecated' do
244
- expect {country.states}.to output.to_stderr
253
+ expect { country.states }.to output.to_stderr
245
254
  end
246
255
 
247
256
  it 'should be a subdivision object' do
@@ -262,54 +271,54 @@ describe ISO3166::Country do
262
271
  end
263
272
 
264
273
  describe 'subdivision_types' do
265
- it "should return an array of subdivision types" do
274
+ it 'should return an array of subdivision types' do
266
275
  expect(country.subdivision_types).to contain_exactly('district', 'state', 'outlying_area')
267
276
  end
268
277
 
269
- 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
270
279
  expect(ISO3166::Country['LI'].subdivision_types).to contain_exactly('commune')
271
280
  end
272
281
 
273
- 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
274
283
  expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
275
284
  expect(ISO3166::Country['AS'].subdivision_types).to eq([])
276
285
  end
277
286
  end
278
287
 
279
288
  describe 'subdivisions_of_types' do
280
- 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
281
290
  us_states = country.subdivisions_of_types(%w[state])
282
291
  expect(us_states.size).to eq(50)
283
292
  dc = country.subdivisions_of_types(%w[district])
284
293
  expect(dc.size).to eq(1)
285
294
  end
286
295
 
287
- 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
288
297
  us_states_plus_dc = country.subdivisions_of_types(%w[state district])
289
298
  expect(us_states_plus_dc.size).to eq(51)
290
299
  end
291
300
 
292
- 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
293
302
  us_states_plus_dc = country.subdivisions_of_types(%w[state district governorate])
294
303
  expect(us_states_plus_dc.size).to eq(51)
295
304
  end
296
305
 
297
- 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
298
307
  should_be_empty = ISO3166::Country['PT'].subdivisions_of_types(%w[state county])
299
308
  expect(should_be_empty).to be_empty
300
309
  end
301
310
  end
302
311
 
303
312
  describe 'humanized_subdivision_types' do
304
- it "should return an array of humanized subdivision types" do
313
+ it 'should return an array of humanized subdivision types' do
305
314
  expect(country.humanized_subdivision_types).to contain_exactly('District', 'State', 'Outlying area')
306
315
  end
307
316
 
308
- 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
309
318
  expect(ISO3166::Country['LI'].humanized_subdivision_types).to contain_exactly('Commune')
310
319
  end
311
320
 
312
- 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
313
322
  expect(ISO3166::Country['AS'].subdivisions?).to be_falsey
314
323
  expect(ISO3166::Country['AS'].humanized_subdivision_types).to eq([])
315
324
  end
@@ -878,7 +887,12 @@ describe ISO3166::Country do
878
887
  context 'regression test for #388/#746/#776' do
879
888
  before do
880
889
  ISO3166.configure do |config|
881
- 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]
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]
882
896
  end
883
897
  end
884
898
 
@@ -1071,6 +1085,24 @@ describe ISO3166::Country do
1071
1085
  end
1072
1086
  end
1073
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
+
1074
1106
  describe 'in_esm?' do
1075
1107
  let(:netherlands) { ISO3166::Country.search('NL') }
1076
1108
  let(:switzerland) { ISO3166::Country.search('CH') }
@@ -1214,13 +1246,82 @@ describe ISO3166::Country do
1214
1246
  expect(subject.last).to be_empty
1215
1247
  end
1216
1248
 
1217
- context "when asking for alpha2, alpha3 and iso_short_name" do
1218
- 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] }
1219
1251
 
1220
1252
  it 'returns the correct values' do
1221
1253
  expect(subject.first).to eq(%w[AD AND Andorra])
1222
1254
  expect(subject.last).to eq(%w[ZW ZWE Zimbabwe])
1223
1255
  end
1224
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
1225
1326
  end
1226
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.4.0
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Robinson
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-04-12 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
17
  name: unaccent
@@ -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,15 +93,16 @@ executables: []
79
93
  extensions: []
80
94
  extra_rdoc_files: []
81
95
  files:
96
+ - ".codeclimate.yml"
82
97
  - ".github/FUNDING.yml"
83
98
  - ".github/workflows/codeql-analysis.yml"
84
99
  - ".github/workflows/tests.yml"
85
100
  - ".gitignore"
86
101
  - ".rspec"
87
102
  - ".rubocop.yml"
88
- - ".rubocop_todo.yml"
89
103
  - CHANGELOG.md
90
104
  - Gemfile
105
+ - Gemfile.lock
91
106
  - LICENSE
92
107
  - README.md
93
108
  - Rakefile
@@ -230,6 +245,7 @@ files:
230
245
  - lib/countries/configuration.rb
231
246
  - lib/countries/country.rb
232
247
  - lib/countries/country/class_methods.rb
248
+ - lib/countries/country/country_subdivision_methods.rb
233
249
  - lib/countries/country/currency_methods.rb
234
250
  - lib/countries/country/emoji.rb
235
251
  - lib/countries/country/finder_methods.rb
@@ -483,6 +499,8 @@ files:
483
499
  - lib/countries/data/countries/ZA.yaml
484
500
  - lib/countries/data/countries/ZM.yaml
485
501
  - lib/countries/data/countries/ZW.yaml
502
+ - lib/countries/data/locales_methods.rb
503
+ - lib/countries/data/subdivision_methods.rb
486
504
  - lib/countries/data/subdivisions/AD.yaml
487
505
  - lib/countries/data/subdivisions/AE.yaml
488
506
  - lib/countries/data/subdivisions/AF.yaml
@@ -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.4.10
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,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'geocoder'
4
- require 'retryable'
5
-
6
- Geocoder.configure(
7
- lookup: :google,
8
- timeout: 10,
9
- api_key: GOOGLE_API_KEY
10
- )
11
-
12
- # raise on geocoding errors such as query limit exceeded
13
- Geocoder.configure(always_raise: :all)
14
- # Try to geocode a given query, on exceptions it retries up to 3 times then gives up.
15
- # @param [String] query string to geocode
16
- # @return [Hash] first valid result or nil
17
- def geocode(query, params)
18
- Retryable.retryable(tries: 3, sleep: ->(n) { 2**n }) do
19
- Geocoder.search(query, params: params).first
20
- end
21
- rescue Geocoder::Error, Geocoder::LookupTimeout => e
22
- warn "Attempts exceeded for query #{query}, last error was #{e.message}"
23
- nil
24
- end
25
-
26
- def load_country_yaml(alpha2)
27
- YAML.load_file(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"))
28
- end
29
-
30
- def save_country_yaml(alpha2, data)
31
- File.write(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"), data.to_yaml)
32
- end
33
-
34
- def country_codes
35
- @country_codes ||= Dir['lib/countries/data/countries/*.yaml'].map { |x| File.basename(x, File.extname(x)) }.uniq
36
- end
37
-
38
- namespace :geocode do
39
- desc 'Retrieve and store countries coordinates'
40
- task :fetch_countries do
41
- require 'countries'
42
- # Iterate over countries
43
- ISO3166::Country.all.each do |country|
44
- code = country.alpha2
45
- # Load unmutated yaml file.
46
- data = load_country_yaml(country.alpha2)
47
-
48
- next unless (result = geocode(country.iso_short_name, {region: country.alpha2}))
49
-
50
- unless result.types.include?('country')
51
- puts "WARNING:: Geocoder returned something that was not a country for #{country.alpha2}"
52
- end
53
- geometry = result.geometry
54
-
55
- # Extract center point data
56
- if geometry['location']
57
- data[code]['geo']['latitude'] = geometry['location']['lat']
58
- data[code]['geo']['longitude'] = geometry['location']['lng']
59
- end
60
-
61
- # Extract bounding box data
62
- next unless geometry['bounds']
63
-
64
- data[code]['geo']['bounds'] = geometry['bounds']
65
- data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
66
- data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
67
- data[code]['geo']['max_latitude'] = geometry['bounds']['northeast']['lat']
68
- data[code]['geo']['max_longitude'] = geometry['bounds']['northeast']['lng']
69
-
70
- # Persist
71
- save_country_yaml(code, data)
72
- end
73
- end
74
-
75
- desc 'Retrieve and store subdivisions coordinates'
76
- task :fetch_subdivisions do
77
- require_relative '../../countries'
78
- # Iterate all countries with subdivisions
79
- ISO3166::Country.all.select(&:subdivisions?).each do |c|
80
- # Iterate subdivisions
81
- state_data = c.subdivisions.dup
82
- state_data.reject { |_, data| data['geo'] }.each do |code, _|
83
- location = "#{c.alpha2}-#{code}"
84
-
85
- next unless (result = geocode(location, { region: c.alpha2 }))
86
-
87
- geometry = result.geometry
88
- if geometry['location']
89
- state_data[code]['geo'] ||= {}
90
- state_data[code]['geo']['latitude'] = geometry['location']['lat']
91
- state_data[code]['geo']['longitude'] = geometry['location']['lng']
92
- end
93
-
94
- next unless geometry['bounds']
95
-
96
- state_data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
97
- state_data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
98
- state_data[code]['geo']['max_latitude'] = geometry['bounds']['northeast']['lat']
99
- state_data[code]['geo']['max_longitude'] = geometry['bounds']['northeast']['lng']
100
- end
101
- # Write updated YAML for current country
102
- out = File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'subdivisions', "#{c.alpha2}.yaml")
103
- File.write(out, state_data.to_yaml)
104
- end
105
- end
106
- end