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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +61 -0
- data/.github/workflows/codeql-analysis.yml +3 -3
- data/.github/workflows/tests.yml +4 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +17 -8
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -2
- data/Gemfile.lock +102 -0
- data/README.md +47 -1
- data/Rakefile +2 -3
- data/countries.gemspec +1 -1
- data/lib/countries/cache/countries.json +1 -1
- data/lib/countries/cache/locales/lt.json +1 -1
- data/lib/countries/cache/locales/pt-br.json +1 -1
- data/lib/countries/country/class_methods.rb +22 -3
- data/lib/countries/country/country_subdivision_methods.rb +82 -0
- data/lib/countries/country/currency_methods.rb +0 -1
- data/lib/countries/country/finder_methods.rb +2 -4
- data/lib/countries/country.rb +21 -56
- data/lib/countries/data/countries/AD.yaml +1 -0
- data/lib/countries/data/countries/AE.yaml +1 -0
- data/lib/countries/data/countries/AF.yaml +1 -0
- data/lib/countries/data/countries/AG.yaml +1 -0
- data/lib/countries/data/countries/AI.yaml +1 -0
- data/lib/countries/data/countries/AL.yaml +1 -0
- data/lib/countries/data/countries/AM.yaml +1 -0
- data/lib/countries/data/countries/AO.yaml +1 -0
- data/lib/countries/data/countries/AQ.yaml +1 -0
- data/lib/countries/data/countries/AR.yaml +2 -0
- data/lib/countries/data/countries/AS.yaml +1 -0
- data/lib/countries/data/countries/AT.yaml +1 -0
- data/lib/countries/data/countries/AU.yaml +2 -0
- data/lib/countries/data/countries/AW.yaml +1 -0
- data/lib/countries/data/countries/AX.yaml +1 -0
- data/lib/countries/data/countries/AZ.yaml +1 -0
- data/lib/countries/data/countries/BA.yaml +1 -0
- data/lib/countries/data/countries/BB.yaml +1 -0
- data/lib/countries/data/countries/BD.yaml +1 -0
- data/lib/countries/data/countries/BE.yaml +1 -0
- data/lib/countries/data/countries/BF.yaml +1 -0
- data/lib/countries/data/countries/BG.yaml +1 -0
- data/lib/countries/data/countries/BH.yaml +1 -0
- data/lib/countries/data/countries/BI.yaml +1 -0
- data/lib/countries/data/countries/BJ.yaml +1 -0
- data/lib/countries/data/countries/BL.yaml +1 -0
- data/lib/countries/data/countries/BM.yaml +1 -0
- data/lib/countries/data/countries/BN.yaml +1 -0
- data/lib/countries/data/countries/BO.yaml +1 -0
- data/lib/countries/data/countries/BQ.yaml +1 -0
- data/lib/countries/data/countries/BR.yaml +2 -0
- data/lib/countries/data/countries/BS.yaml +1 -0
- data/lib/countries/data/countries/BT.yaml +1 -0
- data/lib/countries/data/countries/BV.yaml +1 -0
- data/lib/countries/data/countries/BW.yaml +1 -0
- data/lib/countries/data/countries/BY.yaml +1 -0
- data/lib/countries/data/countries/BZ.yaml +1 -0
- data/lib/countries/data/countries/CA.yaml +3 -0
- data/lib/countries/data/countries/CC.yaml +1 -0
- data/lib/countries/data/countries/CD.yaml +1 -0
- data/lib/countries/data/countries/CF.yaml +1 -0
- data/lib/countries/data/countries/CG.yaml +1 -0
- data/lib/countries/data/countries/CH.yaml +1 -0
- data/lib/countries/data/countries/CI.yaml +1 -0
- data/lib/countries/data/countries/CK.yaml +1 -0
- data/lib/countries/data/countries/CL.yaml +1 -0
- data/lib/countries/data/countries/CM.yaml +1 -0
- data/lib/countries/data/countries/CN.yaml +2 -0
- data/lib/countries/data/countries/CO.yaml +1 -0
- data/lib/countries/data/countries/CR.yaml +1 -0
- data/lib/countries/data/countries/CU.yaml +1 -0
- data/lib/countries/data/countries/CV.yaml +1 -0
- data/lib/countries/data/countries/CW.yaml +1 -0
- data/lib/countries/data/countries/CX.yaml +1 -0
- data/lib/countries/data/countries/CY.yaml +1 -0
- data/lib/countries/data/countries/CZ.yaml +1 -0
- data/lib/countries/data/countries/DE.yaml +3 -0
- data/lib/countries/data/countries/DJ.yaml +1 -0
- data/lib/countries/data/countries/DK.yaml +1 -0
- data/lib/countries/data/countries/DM.yaml +1 -0
- data/lib/countries/data/countries/DO.yaml +1 -0
- data/lib/countries/data/countries/DZ.yaml +1 -0
- data/lib/countries/data/countries/EC.yaml +1 -0
- data/lib/countries/data/countries/EE.yaml +1 -0
- data/lib/countries/data/countries/EG.yaml +1 -0
- data/lib/countries/data/countries/EH.yaml +1 -0
- data/lib/countries/data/countries/ER.yaml +1 -0
- data/lib/countries/data/countries/ES.yaml +1 -0
- data/lib/countries/data/countries/ET.yaml +1 -0
- data/lib/countries/data/countries/FI.yaml +1 -0
- data/lib/countries/data/countries/FJ.yaml +1 -0
- data/lib/countries/data/countries/FK.yaml +1 -0
- data/lib/countries/data/countries/FM.yaml +1 -0
- data/lib/countries/data/countries/FO.yaml +1 -0
- data/lib/countries/data/countries/FR.yaml +3 -0
- data/lib/countries/data/countries/GA.yaml +1 -0
- data/lib/countries/data/countries/GB.yaml +3 -0
- data/lib/countries/data/countries/GD.yaml +1 -0
- data/lib/countries/data/countries/GE.yaml +1 -0
- data/lib/countries/data/countries/GF.yaml +1 -0
- data/lib/countries/data/countries/GG.yaml +1 -0
- data/lib/countries/data/countries/GH.yaml +1 -0
- data/lib/countries/data/countries/GI.yaml +1 -0
- data/lib/countries/data/countries/GL.yaml +1 -0
- data/lib/countries/data/countries/GM.yaml +1 -0
- data/lib/countries/data/countries/GN.yaml +1 -0
- data/lib/countries/data/countries/GP.yaml +1 -0
- data/lib/countries/data/countries/GQ.yaml +1 -0
- data/lib/countries/data/countries/GR.yaml +1 -0
- data/lib/countries/data/countries/GS.yaml +1 -0
- data/lib/countries/data/countries/GT.yaml +1 -0
- data/lib/countries/data/countries/GU.yaml +1 -0
- data/lib/countries/data/countries/GW.yaml +1 -0
- data/lib/countries/data/countries/GY.yaml +1 -0
- data/lib/countries/data/countries/HK.yaml +1 -0
- data/lib/countries/data/countries/HM.yaml +1 -0
- data/lib/countries/data/countries/HN.yaml +1 -0
- data/lib/countries/data/countries/HR.yaml +1 -0
- data/lib/countries/data/countries/HT.yaml +1 -0
- data/lib/countries/data/countries/HU.yaml +1 -0
- data/lib/countries/data/countries/ID.yaml +2 -0
- data/lib/countries/data/countries/IE.yaml +1 -0
- data/lib/countries/data/countries/IL.yaml +1 -0
- data/lib/countries/data/countries/IM.yaml +1 -0
- data/lib/countries/data/countries/IN.yaml +2 -0
- data/lib/countries/data/countries/IO.yaml +1 -0
- data/lib/countries/data/countries/IQ.yaml +1 -0
- data/lib/countries/data/countries/IR.yaml +1 -0
- data/lib/countries/data/countries/IS.yaml +1 -0
- data/lib/countries/data/countries/IT.yaml +3 -0
- data/lib/countries/data/countries/JE.yaml +1 -0
- data/lib/countries/data/countries/JM.yaml +1 -0
- data/lib/countries/data/countries/JO.yaml +1 -0
- data/lib/countries/data/countries/JP.yaml +3 -0
- data/lib/countries/data/countries/KE.yaml +1 -0
- data/lib/countries/data/countries/KG.yaml +1 -0
- data/lib/countries/data/countries/KH.yaml +1 -0
- data/lib/countries/data/countries/KI.yaml +1 -0
- data/lib/countries/data/countries/KM.yaml +1 -0
- data/lib/countries/data/countries/KN.yaml +1 -0
- data/lib/countries/data/countries/KP.yaml +1 -0
- data/lib/countries/data/countries/KR.yaml +2 -0
- data/lib/countries/data/countries/KW.yaml +1 -0
- data/lib/countries/data/countries/KY.yaml +1 -0
- data/lib/countries/data/countries/KZ.yaml +1 -0
- data/lib/countries/data/countries/LA.yaml +1 -0
- data/lib/countries/data/countries/LB.yaml +1 -0
- data/lib/countries/data/countries/LC.yaml +1 -0
- data/lib/countries/data/countries/LI.yaml +1 -0
- data/lib/countries/data/countries/LK.yaml +1 -0
- data/lib/countries/data/countries/LR.yaml +1 -0
- data/lib/countries/data/countries/LS.yaml +1 -0
- data/lib/countries/data/countries/LT.yaml +1 -0
- data/lib/countries/data/countries/LU.yaml +1 -0
- data/lib/countries/data/countries/LV.yaml +1 -0
- data/lib/countries/data/countries/LY.yaml +1 -0
- data/lib/countries/data/countries/MA.yaml +1 -0
- data/lib/countries/data/countries/MC.yaml +1 -0
- data/lib/countries/data/countries/MD.yaml +1 -0
- data/lib/countries/data/countries/ME.yaml +1 -0
- data/lib/countries/data/countries/MF.yaml +1 -0
- data/lib/countries/data/countries/MG.yaml +1 -0
- data/lib/countries/data/countries/MH.yaml +1 -0
- data/lib/countries/data/countries/MK.yaml +1 -0
- data/lib/countries/data/countries/ML.yaml +1 -0
- data/lib/countries/data/countries/MM.yaml +1 -0
- data/lib/countries/data/countries/MN.yaml +1 -0
- data/lib/countries/data/countries/MO.yaml +1 -0
- data/lib/countries/data/countries/MP.yaml +1 -0
- data/lib/countries/data/countries/MQ.yaml +1 -0
- data/lib/countries/data/countries/MR.yaml +1 -0
- data/lib/countries/data/countries/MS.yaml +1 -0
- data/lib/countries/data/countries/MT.yaml +1 -0
- data/lib/countries/data/countries/MU.yaml +1 -0
- data/lib/countries/data/countries/MV.yaml +1 -0
- data/lib/countries/data/countries/MW.yaml +1 -0
- data/lib/countries/data/countries/MX.yaml +2 -0
- data/lib/countries/data/countries/MY.yaml +1 -0
- data/lib/countries/data/countries/MZ.yaml +1 -0
- data/lib/countries/data/countries/NA.yaml +1 -0
- data/lib/countries/data/countries/NC.yaml +1 -0
- data/lib/countries/data/countries/NE.yaml +1 -0
- data/lib/countries/data/countries/NF.yaml +1 -0
- data/lib/countries/data/countries/NG.yaml +1 -0
- data/lib/countries/data/countries/NI.yaml +1 -0
- data/lib/countries/data/countries/NL.yaml +1 -0
- data/lib/countries/data/countries/NO.yaml +1 -0
- data/lib/countries/data/countries/NP.yaml +1 -0
- data/lib/countries/data/countries/NR.yaml +1 -0
- data/lib/countries/data/countries/NU.yaml +1 -0
- data/lib/countries/data/countries/NZ.yaml +1 -0
- data/lib/countries/data/countries/OM.yaml +1 -0
- data/lib/countries/data/countries/PA.yaml +1 -0
- data/lib/countries/data/countries/PE.yaml +1 -0
- data/lib/countries/data/countries/PF.yaml +1 -0
- data/lib/countries/data/countries/PG.yaml +1 -0
- data/lib/countries/data/countries/PH.yaml +1 -0
- data/lib/countries/data/countries/PK.yaml +1 -0
- data/lib/countries/data/countries/PL.yaml +1 -0
- data/lib/countries/data/countries/PM.yaml +1 -0
- data/lib/countries/data/countries/PN.yaml +1 -0
- data/lib/countries/data/countries/PR.yaml +1 -0
- data/lib/countries/data/countries/PS.yaml +1 -0
- data/lib/countries/data/countries/PT.yaml +1 -0
- data/lib/countries/data/countries/PW.yaml +1 -0
- data/lib/countries/data/countries/PY.yaml +1 -0
- data/lib/countries/data/countries/QA.yaml +1 -0
- data/lib/countries/data/countries/RE.yaml +1 -0
- data/lib/countries/data/countries/RO.yaml +1 -0
- data/lib/countries/data/countries/RS.yaml +1 -0
- data/lib/countries/data/countries/RU.yaml +2 -0
- data/lib/countries/data/countries/RW.yaml +1 -0
- data/lib/countries/data/countries/SA.yaml +2 -0
- data/lib/countries/data/countries/SB.yaml +1 -0
- data/lib/countries/data/countries/SC.yaml +1 -0
- data/lib/countries/data/countries/SD.yaml +1 -0
- data/lib/countries/data/countries/SE.yaml +1 -0
- data/lib/countries/data/countries/SG.yaml +1 -0
- data/lib/countries/data/countries/SH.yaml +1 -0
- data/lib/countries/data/countries/SI.yaml +1 -0
- data/lib/countries/data/countries/SJ.yaml +1 -0
- data/lib/countries/data/countries/SK.yaml +1 -0
- data/lib/countries/data/countries/SL.yaml +1 -0
- data/lib/countries/data/countries/SM.yaml +1 -0
- data/lib/countries/data/countries/SN.yaml +1 -0
- data/lib/countries/data/countries/SO.yaml +1 -0
- data/lib/countries/data/countries/SR.yaml +1 -0
- data/lib/countries/data/countries/SS.yaml +1 -0
- data/lib/countries/data/countries/ST.yaml +1 -0
- data/lib/countries/data/countries/SV.yaml +1 -0
- data/lib/countries/data/countries/SX.yaml +1 -0
- data/lib/countries/data/countries/SY.yaml +1 -0
- data/lib/countries/data/countries/SZ.yaml +1 -0
- data/lib/countries/data/countries/TC.yaml +1 -0
- data/lib/countries/data/countries/TD.yaml +1 -0
- data/lib/countries/data/countries/TF.yaml +1 -0
- data/lib/countries/data/countries/TG.yaml +1 -0
- data/lib/countries/data/countries/TH.yaml +1 -0
- data/lib/countries/data/countries/TJ.yaml +1 -0
- data/lib/countries/data/countries/TK.yaml +1 -0
- data/lib/countries/data/countries/TL.yaml +1 -0
- data/lib/countries/data/countries/TM.yaml +1 -0
- data/lib/countries/data/countries/TN.yaml +1 -0
- data/lib/countries/data/countries/TO.yaml +1 -0
- data/lib/countries/data/countries/TR.yaml +2 -0
- data/lib/countries/data/countries/TT.yaml +1 -0
- data/lib/countries/data/countries/TV.yaml +1 -0
- data/lib/countries/data/countries/TW.yaml +2 -1
- data/lib/countries/data/countries/TZ.yaml +1 -0
- data/lib/countries/data/countries/UA.yaml +1 -0
- data/lib/countries/data/countries/UG.yaml +1 -0
- data/lib/countries/data/countries/UM.yaml +1 -0
- data/lib/countries/data/countries/US.yaml +3 -0
- data/lib/countries/data/countries/UY.yaml +1 -0
- data/lib/countries/data/countries/UZ.yaml +1 -0
- data/lib/countries/data/countries/VA.yaml +1 -0
- data/lib/countries/data/countries/VC.yaml +1 -0
- data/lib/countries/data/countries/VE.yaml +1 -0
- data/lib/countries/data/countries/VG.yaml +1 -0
- data/lib/countries/data/countries/VI.yaml +1 -0
- data/lib/countries/data/countries/VN.yaml +1 -0
- data/lib/countries/data/countries/VU.yaml +1 -0
- data/lib/countries/data/countries/WF.yaml +1 -0
- data/lib/countries/data/countries/WS.yaml +1 -0
- data/lib/countries/data/countries/YE.yaml +1 -0
- data/lib/countries/data/countries/YT.yaml +1 -0
- data/lib/countries/data/countries/ZA.yaml +2 -0
- data/lib/countries/data/countries/ZM.yaml +1 -0
- data/lib/countries/data/countries/ZW.yaml +1 -0
- data/lib/countries/data/locales_methods.rb +23 -0
- data/lib/countries/data/subdivision_methods.rb +30 -0
- data/lib/countries/data/subdivisions/AD.yaml +7 -0
- data/lib/countries/data/subdivisions/AE.yaml +18 -0
- data/lib/countries/data/subdivisions/AF.yaml +167 -2
- data/lib/countries/data/subdivisions/AG.yaml +9 -0
- data/lib/countries/data/subdivisions/AL.yaml +57 -0
- data/lib/countries/data/subdivisions/AM.yaml +34 -0
- data/lib/countries/data/subdivisions/AO.yaml +36 -0
- data/lib/countries/data/subdivisions/AR.yaml +46 -0
- data/lib/countries/data/subdivisions/AT.yaml +28 -0
- data/lib/countries/data/subdivisions/AU.yaml +29 -0
- data/lib/countries/data/subdivisions/AZ.yaml +239 -0
- data/lib/countries/data/subdivisions/BA.yaml +5 -0
- data/lib/countries/data/subdivisions/BB.yaml +4 -0
- data/lib/countries/data/subdivisions/BD.yaml +139 -0
- data/lib/countries/data/subdivisions/BE.yaml +34 -0
- data/lib/countries/data/subdivisions/BF.yaml +56 -0
- data/lib/countries/data/subdivisions/BG.yaml +30 -0
- data/lib/countries/data/subdivisions/BH.yaml +13 -0
- data/lib/countries/data/subdivisions/BI.yaml +54 -0
- data/lib/countries/data/subdivisions/BJ.yaml +22 -0
- data/lib/countries/data/subdivisions/BN.yaml +9 -0
- data/lib/countries/data/subdivisions/BO.yaml +35 -0
- data/lib/countries/data/subdivisions/BQ.yaml +4 -0
- data/lib/countries/data/subdivisions/BR.yaml +14 -0
- data/lib/countries/data/subdivisions/BS.yaml +24 -0
- data/lib/countries/data/subdivisions/BT.yaml +24 -0
- data/lib/countries/data/subdivisions/BW.yaml +24 -0
- data/lib/countries/data/subdivisions/BY.yaml +5 -0
- data/lib/countries/data/subdivisions/BZ.yaml +3 -0
- data/lib/countries/data/subdivisions/CA.yaml +24 -0
- data/lib/countries/data/subdivisions/CD.yaml +77 -0
- data/lib/countries/data/subdivisions/CF.yaml +15 -0
- data/lib/countries/data/subdivisions/CG.yaml +18 -0
- data/lib/countries/data/subdivisions/CH.yaml +92 -0
- data/lib/countries/data/subdivisions/CI.yaml +65 -0
- data/lib/countries/data/subdivisions/CL.yaml +45 -2
- data/lib/countries/data/subdivisions/CM.yaml +22 -0
- data/lib/countries/data/subdivisions/CN.yaml +98 -0
- data/lib/countries/data/subdivisions/CO.yaml +68 -0
- data/lib/countries/data/subdivisions/CR.yaml +14 -0
- data/lib/countries/data/subdivisions/CU.yaml +42 -0
- data/lib/countries/data/subdivisions/CV.yaml +32 -0
- data/lib/countries/data/subdivisions/CY.yaml +18 -0
- data/lib/countries/data/subdivisions/CZ.yaml +227 -0
- data/lib/countries/data/subdivisions/DE.yaml +31 -0
- data/lib/countries/data/subdivisions/DJ.yaml +16 -0
- data/lib/countries/data/subdivisions/DK.yaml +13 -0
- data/lib/countries/data/subdivisions/DM.yaml +1 -0
- data/lib/countries/data/subdivisions/DO.yaml +102 -0
- data/lib/countries/data/subdivisions/DZ.yaml +104 -0
- data/lib/countries/data/subdivisions/EC.yaml +72 -0
- data/lib/countries/data/subdivisions/EE.yaml +6 -0
- data/lib/countries/data/subdivisions/EG.yaml +54 -0
- data/lib/countries/data/subdivisions/ER.yaml +2 -0
- data/lib/countries/data/subdivisions/ES.yaml +252 -0
- data/lib/countries/data/subdivisions/ET.yaml +27 -0
- data/lib/countries/data/subdivisions/FI.yaml +78 -0
- data/lib/countries/data/subdivisions/FJ.yaml +30 -0
- data/lib/countries/data/subdivisions/FM.yaml +11 -0
- data/lib/countries/data/subdivisions/FR.yaml +332 -1
- data/lib/countries/data/subdivisions/GA.yaml +24 -0
- data/lib/countries/data/subdivisions/GB.yaml +488 -0
- data/lib/countries/data/subdivisions/GD.yaml +10 -0
- data/lib/countries/data/subdivisions/GE.yaml +34 -0
- data/lib/countries/data/subdivisions/GH.yaml +79 -0
- data/lib/countries/data/subdivisions/GL.yaml +58 -0
- data/lib/countries/data/subdivisions/GM.yaml +10 -0
- data/lib/countries/data/subdivisions/GN.yaml +65 -0
- data/lib/countries/data/subdivisions/GQ.yaml +36 -0
- data/lib/countries/data/subdivisions/GR.yaml +41 -0
- data/lib/countries/data/subdivisions/GW.yaml +24 -0
- data/lib/countries/data/subdivisions/GY.yaml +31 -0
- data/lib/countries/data/subdivisions/HN.yaml +21 -0
- data/lib/countries/data/subdivisions/HR.yaml +82 -0
- data/lib/countries/data/subdivisions/HT.yaml +14 -0
- data/lib/countries/data/subdivisions/HU.yaml +94 -0
- data/lib/countries/data/subdivisions/ID.yaml +99 -0
- data/lib/countries/data/subdivisions/IE.yaml +39 -0
- data/lib/countries/data/subdivisions/IL.yaml +15 -0
- data/lib/countries/data/subdivisions/IN.yaml +210 -0
- data/lib/countries/data/subdivisions/IQ.yaml +59 -0
- data/lib/countries/data/subdivisions/IR.yaml +2 -0
- data/lib/countries/data/subdivisions/IS.yaml +560 -0
- data/lib/countries/data/subdivisions/IT.yaml +321 -0
- data/lib/countries/data/subdivisions/JM.yaml +22 -0
- data/lib/countries/data/subdivisions/JO.yaml +16 -0
- data/lib/countries/data/subdivisions/JP.yaml +42 -0
- data/lib/countries/data/subdivisions/KE.yaml +298 -0
- data/lib/countries/data/subdivisions/KG.yaml +28 -0
- data/lib/countries/data/subdivisions/KH.yaml +108 -0
- data/lib/countries/data/subdivisions/KI.yaml +6 -0
- data/lib/countries/data/subdivisions/KM.yaml +4 -0
- data/lib/countries/data/subdivisions/KN.yaml +6 -0
- data/lib/countries/data/subdivisions/KP.yaml +42 -0
- data/lib/countries/data/subdivisions/KR.yaml +36 -0
- data/lib/countries/data/subdivisions/KW.yaml +5 -0
- data/lib/countries/data/subdivisions/KZ.yaml +113 -0
- data/lib/countries/data/subdivisions/LA.yaml +49 -0
- data/lib/countries/data/subdivisions/LB.yaml +28 -0
- data/lib/countries/data/subdivisions/LC.yaml +6 -0
- data/lib/countries/data/subdivisions/LI.yaml +37 -0
- data/lib/countries/data/subdivisions/LK.yaml +67 -0
- data/lib/countries/data/subdivisions/LR.yaml +16 -0
- data/lib/countries/data/subdivisions/LS.yaml +23 -0
- data/lib/countries/data/subdivisions/LT.yaml +315 -0
- data/lib/countries/data/subdivisions/LU.yaml +31 -0
- data/lib/countries/data/subdivisions/LV.yaml +83 -0
- data/lib/countries/data/subdivisions/LY.yaml +16 -0
- data/lib/countries/data/subdivisions/MA.yaml +827 -12
- data/lib/countries/data/subdivisions/MC.yaml +47 -0
- data/lib/countries/data/subdivisions/MD.yaml +41 -0
- data/lib/countries/data/subdivisions/ME.yaml +83 -0
- data/lib/countries/data/subdivisions/MG.yaml +21 -0
- data/lib/countries/data/subdivisions/MH.yaml +70 -0
- data/lib/countries/data/subdivisions/MK.yaml +505 -0
- data/lib/countries/data/subdivisions/ML.yaml +33 -0
- data/lib/countries/data/subdivisions/MM.yaml +51 -0
- data/lib/countries/data/subdivisions/MN.yaml +94 -0
- data/lib/countries/data/subdivisions/MR.yaml +32 -0
- data/lib/countries/data/subdivisions/MT.yaml +126 -0
- data/lib/countries/data/subdivisions/MU.yaml +21 -0
- data/lib/countries/data/subdivisions/MV.yaml +20 -0
- data/lib/countries/data/subdivisions/MW.yaml +52 -0
- data/lib/countries/data/subdivisions/MX.yaml +23 -0
- data/lib/countries/data/subdivisions/MY.yaml +24 -0
- data/lib/countries/data/subdivisions/MZ.yaml +20 -0
- data/lib/countries/data/subdivisions/NA.yaml +28 -0
- data/lib/countries/data/subdivisions/NE.yaml +9 -0
- data/lib/countries/data/subdivisions/NG.yaml +89 -0
- data/lib/countries/data/subdivisions/NI.yaml +25 -0
- data/lib/countries/data/subdivisions/NL.yaml +24 -0
- data/lib/countries/data/subdivisions/NO.yaml +138 -1
- data/lib/countries/data/subdivisions/NP.yaml +9 -0
- data/lib/countries/data/subdivisions/NR.yaml +19 -0
- data/lib/countries/data/subdivisions/NZ.yaml +34 -0
- data/lib/countries/data/subdivisions/OM.yaml +10 -0
- data/lib/countries/data/subdivisions/PA.yaml +27 -0
- data/lib/countries/data/subdivisions/PE.yaml +24 -0
- data/lib/countries/data/subdivisions/PG.yaml +46 -0
- data/lib/countries/data/subdivisions/PH.yaml +293 -0
- data/lib/countries/data/subdivisions/PK.yaml +22 -0
- data/lib/countries/data/subdivisions/PL.yaml +141 -0
- data/lib/countries/data/subdivisions/PS.yaml +41 -0
- data/lib/countries/data/subdivisions/PT.yaml +36 -0
- data/lib/countries/data/subdivisions/PW.yaml +24 -0
- data/lib/countries/data/subdivisions/PY.yaml +21 -0
- data/lib/countries/data/subdivisions/QA.yaml +26 -0
- data/lib/countries/data/subdivisions/RO.yaml +189 -0
- data/lib/countries/data/subdivisions/RS.yaml +112 -0
- data/lib/countries/data/subdivisions/RU.yaml +123 -0
- data/lib/countries/data/subdivisions/RW.yaml +7 -0
- data/lib/countries/data/subdivisions/SA.yaml +38 -0
- data/lib/countries/data/subdivisions/SB.yaml +11 -0
- data/lib/countries/data/subdivisions/SC.yaml +45 -0
- data/lib/countries/data/subdivisions/SD.yaml +15 -0
- data/lib/countries/data/subdivisions/SE.yaml +42 -0
- data/lib/countries/data/subdivisions/SG.yaml +8 -0
- data/lib/countries/data/subdivisions/SH.yaml +6 -0
- data/lib/countries/data/subdivisions/SI.yaml +735 -0
- data/lib/countries/data/subdivisions/SK.yaml +22 -0
- data/lib/countries/data/subdivisions/SL.yaml +7 -0
- data/lib/countries/data/subdivisions/SM.yaml +19 -0
- data/lib/countries/data/subdivisions/SN.yaml +43 -0
- data/lib/countries/data/subdivisions/SO.yaml +71 -0
- data/lib/countries/data/subdivisions/SR.yaml +17 -0
- data/lib/countries/data/subdivisions/SS.yaml +4 -0
- data/lib/countries/data/subdivisions/ST.yaml +127 -0
- data/lib/countries/data/subdivisions/SV.yaml +20 -0
- data/lib/countries/data/subdivisions/SY.yaml +53 -0
- data/lib/countries/data/subdivisions/SZ.yaml +18 -0
- data/lib/countries/data/subdivisions/TD.yaml +51 -0
- data/lib/countries/data/subdivisions/TG.yaml +13 -0
- data/lib/countries/data/subdivisions/TH.yaml +231 -0
- data/lib/countries/data/subdivisions/TJ.yaml +15 -0
- data/lib/countries/data/subdivisions/TL.yaml +38 -0
- data/lib/countries/data/subdivisions/TM.yaml +15 -0
- data/lib/countries/data/subdivisions/TN.yaml +25 -0
- data/lib/countries/data/subdivisions/TO.yaml +1 -0
- data/lib/countries/data/subdivisions/TR.yaml +93 -0
- data/lib/countries/data/subdivisions/TT.yaml +25 -0
- data/lib/countries/data/subdivisions/TV.yaml +25 -0
- data/lib/countries/data/subdivisions/TW.yaml +106 -0
- data/lib/countries/data/subdivisions/TZ.yaml +38 -0
- data/lib/countries/data/subdivisions/UA.yaml +86 -4
- data/lib/countries/data/subdivisions/UG.yaml +262 -0
- data/lib/countries/data/subdivisions/UM.yaml +4 -0
- data/lib/countries/data/subdivisions/US.yaml +118 -1
- data/lib/countries/data/subdivisions/UY.yaml +27 -0
- data/lib/countries/data/subdivisions/UZ.yaml +65 -0
- data/lib/countries/data/subdivisions/VC.yaml +6 -0
- data/lib/countries/data/subdivisions/VE.yaml +33 -0
- data/lib/countries/data/subdivisions/VN.yaml +131 -0
- data/lib/countries/data/subdivisions/VU.yaml +8 -0
- data/lib/countries/data/subdivisions/WS.yaml +18 -0
- data/lib/countries/data/subdivisions/YE.yaml +16 -0
- data/lib/countries/data/subdivisions/ZA.yaml +5 -0
- data/lib/countries/data/subdivisions/ZM.yaml +24 -0
- data/lib/countries/data/subdivisions/ZW.yaml +21 -0
- data/lib/countries/data/translations/countries-lt.yaml +1 -1
- data/lib/countries/data/translations/countries-pt_BR.yaml +1 -1
- data/lib/countries/data.rb +19 -50
- data/lib/countries/global.rb +0 -1
- data/lib/countries/iso3166.rb +3 -0
- data/lib/countries/sources/cldr/subdivision.rb +1 -1
- data/lib/countries/structure.rb +1 -0
- data/lib/countries/subdivision.rb +5 -0
- data/lib/countries/tasks/postal_codes.rake +5 -1
- data/lib/countries/version.rb +1 -1
- data/spec/country_spec.rb +123 -22
- data/spec/data_spec.rb +12 -8
- data/spec/spec_helper.rb +4 -0
- data/spec/subdivision_spec.rb +8 -0
- metadata +23 -16
- data/.rubocop_todo.yml +0 -19
- 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
|
|
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([
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 = [
|
|
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
|
|
1218
|
-
let(:args) { [
|
|
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 = [
|
|
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{|
|
|
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{|
|
|
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{|
|
|
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?
|
|
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?
|
|
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
data/spec/subdivision_spec.rb
CHANGED
|
@@ -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
|
+
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-
|
|
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.
|
|
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
|