countries 2.1.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +3 -4
- data/CHANGELOG.md +271 -0
- data/Gemfile +1 -0
- data/README.markdown +36 -18
- data/Rakefile +12 -3
- data/countries.gemspec +2 -3
- data/lib/countries/cache/countries.json +1 -1
- data/lib/countries/cache/locales/ab.json +1 -0
- data/lib/countries/cache/locales/af.json +1 -1
- data/lib/countries/cache/locales/ak.json +1 -0
- data/lib/countries/cache/locales/am.json +1 -1
- data/lib/countries/cache/locales/an.json +1 -0
- data/lib/countries/cache/locales/ar.json +1 -1
- data/lib/countries/cache/locales/as.json +1 -1
- data/lib/countries/cache/locales/ay.json +1 -0
- data/lib/countries/cache/locales/az.json +1 -1
- data/lib/countries/cache/locales/ba.json +1 -0
- data/lib/countries/cache/locales/be.json +1 -1
- data/lib/countries/cache/locales/bg.json +1 -1
- data/lib/countries/cache/locales/bi.json +1 -0
- data/lib/countries/cache/locales/bn-in.json +1 -0
- data/lib/countries/cache/locales/bn.json +1 -1
- data/lib/countries/cache/locales/br.json +1 -1
- data/lib/countries/cache/locales/bs.json +1 -1
- data/lib/countries/cache/locales/ca.json +1 -1
- data/lib/countries/cache/locales/ce.json +1 -0
- data/lib/countries/cache/locales/ch.json +1 -0
- data/lib/countries/cache/locales/cs.json +1 -1
- data/lib/countries/cache/locales/cv.json +1 -0
- data/lib/countries/cache/locales/cy.json +1 -1
- data/lib/countries/cache/locales/da.json +1 -1
- data/lib/countries/cache/locales/de.json +1 -1
- data/lib/countries/cache/locales/dv.json +1 -0
- data/lib/countries/cache/locales/dz.json +1 -1
- data/lib/countries/cache/locales/ee.json +1 -0
- data/lib/countries/cache/locales/el.json +1 -1
- data/lib/countries/cache/locales/en.json +1 -1
- data/lib/countries/cache/locales/eo.json +1 -1
- data/lib/countries/cache/locales/es.json +1 -1
- data/lib/countries/cache/locales/et.json +1 -1
- data/lib/countries/cache/locales/eu.json +1 -1
- data/lib/countries/cache/locales/fa.json +1 -1
- data/lib/countries/cache/locales/ff.json +1 -0
- data/lib/countries/cache/locales/fi.json +1 -1
- data/lib/countries/cache/locales/fo.json +1 -1
- data/lib/countries/cache/locales/fr.json +1 -1
- data/lib/countries/cache/locales/fy.json +1 -0
- data/lib/countries/cache/locales/ga.json +1 -1
- data/lib/countries/cache/locales/gl.json +1 -1
- data/lib/countries/cache/locales/gn.json +1 -0
- data/lib/countries/cache/locales/gu.json +1 -1
- data/lib/countries/cache/locales/gv.json +1 -0
- data/lib/countries/cache/locales/ha.json +1 -0
- data/lib/countries/cache/locales/he.json +1 -1
- data/lib/countries/cache/locales/hi.json +1 -1
- data/lib/countries/cache/locales/hr.json +1 -1
- data/lib/countries/cache/locales/ht.json +1 -0
- data/lib/countries/cache/locales/hu.json +1 -1
- data/lib/countries/cache/locales/hy.json +1 -1
- data/lib/countries/cache/locales/ia.json +1 -1
- data/lib/countries/cache/locales/id.json +1 -1
- data/lib/countries/cache/locales/io.json +1 -0
- data/lib/countries/cache/locales/is.json +1 -1
- data/lib/countries/cache/locales/it.json +1 -1
- data/lib/countries/cache/locales/iu.json +1 -0
- data/lib/countries/cache/locales/ja.json +1 -1
- data/lib/countries/cache/locales/ka.json +1 -1
- data/lib/countries/cache/locales/ki.json +1 -0
- data/lib/countries/cache/locales/kk.json +1 -1
- data/lib/countries/cache/locales/kl.json +1 -0
- data/lib/countries/cache/locales/km.json +1 -1
- data/lib/countries/cache/locales/kn.json +1 -1
- data/lib/countries/cache/locales/ko.json +1 -1
- data/lib/countries/cache/locales/ku.json +1 -1
- data/lib/countries/cache/locales/kv.json +1 -0
- data/lib/countries/cache/locales/kw.json +1 -0
- data/lib/countries/cache/locales/ky.json +1 -0
- data/lib/countries/cache/locales/lo.json +1 -0
- data/lib/countries/cache/locales/lt.json +1 -1
- data/lib/countries/cache/locales/lv.json +1 -1
- data/lib/countries/cache/locales/mi.json +1 -1
- data/lib/countries/cache/locales/mk.json +1 -1
- data/lib/countries/cache/locales/ml.json +1 -1
- data/lib/countries/cache/locales/mn.json +1 -1
- data/lib/countries/cache/locales/mr.json +1 -1
- data/lib/countries/cache/locales/ms.json +1 -1
- data/lib/countries/cache/locales/mt.json +1 -1
- data/lib/countries/cache/locales/my.json +1 -0
- data/lib/countries/cache/locales/na.json +1 -0
- data/lib/countries/cache/locales/nb.json +1 -1
- data/lib/countries/cache/locales/ne.json +1 -1
- data/lib/countries/cache/locales/nl.json +1 -1
- data/lib/countries/cache/locales/nn.json +1 -1
- data/lib/countries/cache/locales/nv.json +1 -0
- data/lib/countries/cache/locales/oc.json +1 -1
- data/lib/countries/cache/locales/or.json +1 -1
- data/lib/countries/cache/locales/pa.json +1 -1
- data/lib/countries/cache/locales/pi.json +1 -0
- data/lib/countries/cache/locales/pl.json +1 -1
- data/lib/countries/cache/locales/ps.json +1 -1
- data/lib/countries/cache/locales/pt-br.json +1 -0
- data/lib/countries/cache/locales/pt.json +1 -1
- data/lib/countries/cache/locales/ro.json +1 -1
- data/lib/countries/cache/locales/ru.json +1 -1
- data/lib/countries/cache/locales/rw.json +1 -1
- data/lib/countries/cache/locales/sc.json +1 -0
- data/lib/countries/cache/locales/sd.json +1 -0
- data/lib/countries/cache/locales/si.json +1 -1
- data/lib/countries/cache/locales/sk.json +1 -1
- data/lib/countries/cache/locales/sl.json +1 -1
- data/lib/countries/cache/locales/so.json +1 -1
- data/lib/countries/cache/locales/sq.json +1 -1
- data/lib/countries/cache/locales/sr.json +1 -1
- data/lib/countries/cache/locales/sv.json +1 -1
- data/lib/countries/cache/locales/sw.json +1 -1
- data/lib/countries/cache/locales/ta.json +1 -1
- data/lib/countries/cache/locales/te.json +1 -1
- data/lib/countries/cache/locales/tg.json +1 -0
- data/lib/countries/cache/locales/th.json +1 -1
- data/lib/countries/cache/locales/ti.json +1 -1
- data/lib/countries/cache/locales/tk.json +1 -1
- data/lib/countries/cache/locales/tl.json +1 -1
- data/lib/countries/cache/locales/tr.json +1 -1
- data/lib/countries/cache/locales/tt.json +1 -1
- data/lib/countries/cache/locales/ug.json +1 -1
- data/lib/countries/cache/locales/uk.json +1 -1
- data/lib/countries/cache/locales/ur.json +1 -0
- data/lib/countries/cache/locales/uz.json +1 -0
- data/lib/countries/cache/locales/ve.json +1 -1
- data/lib/countries/cache/locales/vi.json +1 -1
- data/lib/countries/cache/locales/wa.json +1 -1
- data/lib/countries/cache/locales/wo.json +1 -1
- data/lib/countries/cache/locales/xh.json +1 -1
- data/lib/countries/cache/locales/yo.json +1 -0
- data/lib/countries/cache/locales/zh-cn.json +1 -0
- data/lib/countries/cache/locales/zh-hk.json +1 -0
- data/lib/countries/cache/locales/zh-tw.json +1 -0
- data/lib/countries/cache/locales/zh.json +1 -1
- data/lib/countries/cache/locales/zu.json +1 -1
- data/lib/countries/configuration.rb +5 -0
- data/lib/countries/country.rb +11 -22
- data/lib/countries/country/class_methods.rb +51 -5
- data/lib/countries/country/currency_methods.rb +10 -0
- data/lib/countries/data.rb +4 -1
- data/lib/countries/data/countries/AD.yaml +1 -0
- data/lib/countries/data/countries/AE.yaml +5 -0
- data/lib/countries/data/countries/AF.yaml +1 -0
- data/lib/countries/data/countries/AG.yaml +1 -1
- data/lib/countries/data/countries/AI.yaml +1 -0
- data/lib/countries/data/countries/AL.yaml +2 -1
- data/lib/countries/data/countries/AM.yaml +1 -0
- data/lib/countries/data/countries/AQ.yaml +1 -1
- data/lib/countries/data/countries/AR.yaml +1 -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 +6 -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/BG.yaml +1 -0
- data/lib/countries/data/countries/BH.yaml +2 -1
- 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 +2 -1
- data/lib/countries/data/countries/BO.yaml +1 -1
- data/lib/countries/data/countries/BQ.yaml +1 -1
- data/lib/countries/data/countries/BR.yaml +8 -0
- data/lib/countries/data/countries/BT.yaml +1 -0
- data/lib/countries/data/countries/BV.yaml +1 -1
- data/lib/countries/data/countries/BY.yaml +2 -1
- data/lib/countries/data/countries/BZ.yaml +1 -1
- data/lib/countries/data/countries/CA.yaml +1 -0
- data/lib/countries/data/countries/CC.yaml +1 -0
- data/lib/countries/data/countries/CH.yaml +3 -2
- data/lib/countries/data/countries/CL.yaml +6 -0
- data/lib/countries/data/countries/CN.yaml +1 -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 -1
- 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 +3 -1
- data/lib/countries/data/countries/DE.yaml +1 -0
- data/lib/countries/data/countries/DK.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/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/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 +1 -0
- data/lib/countries/data/countries/GA.yaml +1 -1
- data/lib/countries/data/countries/GB.yaml +6 -2
- 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/GI.yaml +1 -0
- data/lib/countries/data/countries/GL.yaml +2 -1
- data/lib/countries/data/countries/GN.yaml +2 -1
- data/lib/countries/data/countries/GP.yaml +1 -0
- data/lib/countries/data/countries/GR.yaml +3 -2
- 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/HM.yaml +2 -1
- 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 +2 -1
- data/lib/countries/data/countries/HU.yaml +1 -0
- data/lib/countries/data/countries/ID.yaml +1 -0
- data/lib/countries/data/countries/IE.yaml +2 -1
- 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 +1 -0
- data/lib/countries/data/countries/IO.yaml +2 -1
- 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 +7 -0
- data/lib/countries/data/countries/IT.yaml +1 -0
- data/lib/countries/data/countries/JE.yaml +1 -0
- data/lib/countries/data/countries/JO.yaml +1 -0
- data/lib/countries/data/countries/JP.yaml +1 -0
- data/lib/countries/data/countries/KE.yaml +2 -1
- data/lib/countries/data/countries/KG.yaml +1 -0
- data/lib/countries/data/countries/KH.yaml +1 -0
- data/lib/countries/data/countries/KR.yaml +1 -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/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 +2 -0
- data/lib/countries/data/countries/LU.yaml +1 -0
- data/lib/countries/data/countries/LV.yaml +7 -0
- data/lib/countries/data/countries/LY.yaml +1 -1
- 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 +3 -1
- data/lib/countries/data/countries/MM.yaml +1 -0
- data/lib/countries/data/countries/MN.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 -1
- data/lib/countries/data/countries/MT.yaml +1 -0
- data/lib/countries/data/countries/MU.yaml +2 -1
- data/lib/countries/data/countries/MV.yaml +1 -0
- data/lib/countries/data/countries/MX.yaml +6 -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 +2 -1
- 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 +7 -1
- data/lib/countries/data/countries/NI.yaml +1 -0
- data/lib/countries/data/countries/NL.yaml +2 -0
- data/lib/countries/data/countries/NO.yaml +6 -0
- data/lib/countries/data/countries/NP.yaml +2 -1
- data/lib/countries/data/countries/NZ.yaml +8 -1
- data/lib/countries/data/countries/OM.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 +6 -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 +2 -1
- data/lib/countries/data/countries/PR.yaml +1 -0
- data/lib/countries/data/countries/PS.yaml +1 -1
- 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/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 +1 -0
- data/lib/countries/data/countries/SA.yaml +2 -1
- data/lib/countries/data/countries/SB.yaml +1 -1
- 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 +2 -1
- 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/SM.yaml +1 -0
- data/lib/countries/data/countries/SN.yaml +1 -0
- data/lib/countries/data/countries/SO.yaml +2 -1
- data/lib/countries/data/countries/SS.yaml +2 -2
- data/lib/countries/data/countries/SV.yaml +1 -0
- data/lib/countries/data/countries/SX.yaml +1 -1
- data/lib/countries/data/countries/SZ.yaml +2 -1
- data/lib/countries/data/countries/TC.yaml +1 -0
- data/lib/countries/data/countries/TD.yaml +1 -1
- data/lib/countries/data/countries/TG.yaml +1 -1
- data/lib/countries/data/countries/TH.yaml +7 -0
- data/lib/countries/data/countries/TJ.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/TR.yaml +1 -0
- data/lib/countries/data/countries/TV.yaml +1 -1
- data/lib/countries/data/countries/TW.yaml +2 -1
- data/lib/countries/data/countries/TZ.yaml +2 -1
- data/lib/countries/data/countries/UA.yaml +7 -0
- data/lib/countries/data/countries/UM.yaml +2 -1
- data/lib/countries/data/countries/US.yaml +2 -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 +2 -1
- data/lib/countries/data/countries/VG.yaml +2 -1
- data/lib/countries/data/countries/VI.yaml +1 -0
- data/lib/countries/data/countries/VN.yaml +7 -0
- data/lib/countries/data/countries/WF.yaml +1 -0
- data/lib/countries/data/countries/WS.yaml +2 -2
- data/lib/countries/data/countries/YT.yaml +1 -0
- data/lib/countries/data/countries/ZA.yaml +3 -2
- data/lib/countries/data/countries/ZM.yaml +1 -0
- data/lib/countries/data/subdivisions/AD.yaml +1 -1
- data/lib/countries/data/subdivisions/AE.yaml +346 -7
- data/lib/countries/data/subdivisions/AF.yaml +1571 -11
- data/lib/countries/data/subdivisions/AG.yaml +282 -2
- data/lib/countries/data/subdivisions/AI.yaml +183 -0
- data/lib/countries/data/subdivisions/AL.yaml +503 -1
- data/lib/countries/data/subdivisions/AM.yaml +539 -12
- data/lib/countries/data/subdivisions/AO.yaml +767 -2
- data/lib/countries/data/subdivisions/AR.yaml +1167 -2
- data/lib/countries/data/subdivisions/AS.yaml +66 -0
- data/lib/countries/data/subdivisions/AT.yaml +500 -6
- data/lib/countries/data/subdivisions/AU.yaml +445 -0
- data/lib/countries/data/subdivisions/AX.yaml +40 -0
- data/lib/countries/data/subdivisions/AZ.yaml +2836 -57
- data/lib/countries/data/subdivisions/BA.yaml +167 -1
- data/lib/countries/data/subdivisions/BB.yaml +377 -2
- data/lib/countries/data/subdivisions/BD.yaml +1344 -66
- data/lib/countries/data/subdivisions/BE.yaml +653 -10
- data/lib/countries/data/subdivisions/BF.yaml +1841 -1
- data/lib/countries/data/subdivisions/BG.yaml +1307 -6
- data/lib/countries/data/subdivisions/BH.yaml +102 -5
- data/lib/countries/data/subdivisions/BI.yaml +647 -0
- data/lib/countries/data/subdivisions/BJ.yaml +441 -0
- data/lib/countries/data/subdivisions/BM.yaml +144 -0
- data/lib/countries/data/subdivisions/BN.yaml +154 -0
- data/lib/countries/data/subdivisions/BO.yaml +387 -1
- data/lib/countries/data/subdivisions/BQ.yaml +148 -0
- data/lib/countries/data/subdivisions/BR.yaml +1412 -1
- data/lib/countries/data/subdivisions/BS.yaml +1094 -0
- data/lib/countries/data/subdivisions/BT.yaml +707 -6
- data/lib/countries/data/subdivisions/BW.yaml +614 -3
- data/lib/countries/data/subdivisions/BY.yaml +375 -6
- data/lib/countries/data/subdivisions/BZ.yaml +200 -0
- data/lib/countries/data/subdivisions/CA.yaml +721 -0
- data/lib/countries/data/subdivisions/CD.yaml +697 -4
- data/lib/countries/data/subdivisions/CF.yaml +637 -1
- data/lib/countries/data/subdivisions/CG.yaml +401 -0
- data/lib/countries/data/subdivisions/CH.yaml +1327 -26
- data/lib/countries/data/subdivisions/CI.yaml +323 -21
- data/lib/countries/data/subdivisions/CK.yaml +144 -0
- data/lib/countries/data/subdivisions/CL.yaml +693 -5
- data/lib/countries/data/subdivisions/CM.yaml +375 -3
- data/lib/countries/data/subdivisions/CN.yaml +1703 -39
- data/lib/countries/data/subdivisions/CO.yaml +1395 -2
- data/lib/countries/data/subdivisions/CR.yaml +260 -0
- data/lib/countries/data/subdivisions/CU.yaml +627 -15
- data/lib/countries/data/subdivisions/CV.yaml +741 -1
- data/lib/countries/data/subdivisions/CY.yaml +220 -6
- data/lib/countries/data/subdivisions/CZ.yaml +3049 -14
- data/lib/countries/data/subdivisions/DE.yaml +928 -8
- data/lib/countries/data/subdivisions/DJ.yaml +253 -0
- data/lib/countries/data/subdivisions/DK.yaml +230 -6
- data/lib/countries/data/subdivisions/DM.yaml +333 -2
- data/lib/countries/data/subdivisions/DO.yaml +1047 -8
- data/lib/countries/data/subdivisions/DZ.yaml +1968 -6
- data/lib/countries/data/subdivisions/EC.yaml +929 -24
- data/lib/countries/data/subdivisions/EE.yaml +713 -15
- data/lib/countries/data/subdivisions/EG.yaml +1126 -25
- data/lib/countries/data/subdivisions/ER.yaml +230 -3
- data/lib/countries/data/subdivisions/ES.yaml +3158 -94
- data/lib/countries/data/subdivisions/ET.yaml +514 -8
- data/lib/countries/data/subdivisions/FI.yaml +827 -0
- data/lib/countries/data/subdivisions/FJ.yaml +396 -0
- data/lib/countries/data/subdivisions/FM.yaml +131 -0
- data/lib/countries/data/subdivisions/FO.yaml +79 -0
- data/lib/countries/data/subdivisions/FR.yaml +5591 -97
- data/lib/countries/data/subdivisions/GA.yaml +349 -0
- data/lib/countries/data/subdivisions/GB.yaml +7050 -34
- data/lib/countries/data/subdivisions/GD.yaml +227 -1
- data/lib/countries/data/subdivisions/GE.yaml +572 -2
- data/lib/countries/data/subdivisions/GG.yaml +144 -0
- data/lib/countries/data/subdivisions/GH.yaml +371 -0
- data/lib/countries/data/subdivisions/GL.yaml +173 -0
- data/lib/countries/data/subdivisions/GM.yaml +250 -5
- data/lib/countries/data/subdivisions/GN.yaml +1143 -1
- data/lib/countries/data/subdivisions/GQ.yaml +301 -4
- data/lib/countries/data/subdivisions/GR.yaml +654 -28
- data/lib/countries/data/subdivisions/GT.yaml +875 -0
- data/lib/countries/data/subdivisions/GU.yaml +248 -0
- data/lib/countries/data/subdivisions/GW.yaml +353 -0
- data/lib/countries/data/subdivisions/GY.yaml +315 -0
- data/lib/countries/data/subdivisions/HK.yaml +235 -0
- data/lib/countries/data/subdivisions/HN.yaml +710 -1
- data/lib/countries/data/subdivisions/HR.yaml +967 -23
- data/lib/countries/data/subdivisions/HT.yaml +329 -1
- data/lib/countries/data/subdivisions/HU.yaml +2067 -1
- data/lib/countries/data/subdivisions/ID.yaml +1840 -21
- data/lib/countries/data/subdivisions/IE.yaml +1424 -51
- data/lib/countries/data/subdivisions/IL.yaml +256 -6
- data/lib/countries/data/subdivisions/IM.yaml +313 -0
- data/lib/countries/data/subdivisions/IN.yaml +2044 -2
- data/lib/countries/data/subdivisions/IQ.yaml +760 -12
- data/lib/countries/data/subdivisions/IR.yaml +1434 -12
- data/lib/countries/data/subdivisions/IS.yaml +370 -8
- data/lib/countries/data/subdivisions/IT.yaml +6197 -16
- data/lib/countries/data/subdivisions/JE.yaml +157 -0
- data/lib/countries/data/subdivisions/JM.yaml +461 -2
- data/lib/countries/data/subdivisions/JO.yaml +453 -8
- data/lib/countries/data/subdivisions/JP.yaml +2523 -54
- data/lib/countries/data/subdivisions/KE.yaml +698 -0
- data/lib/countries/data/subdivisions/KG.yaml +422 -3
- data/lib/countries/data/subdivisions/KH.yaml +871 -25
- data/lib/countries/data/subdivisions/KI.yaml +100 -0
- data/lib/countries/data/subdivisions/KM.yaml +134 -0
- data/lib/countries/data/subdivisions/KN.yaml +499 -2
- data/lib/countries/data/subdivisions/KP.yaml +474 -0
- data/lib/countries/data/subdivisions/KR.yaml +816 -16
- data/lib/countries/data/subdivisions/KW.yaml +184 -3
- data/lib/countries/data/subdivisions/KZ.yaml +827 -14
- data/lib/countries/data/subdivisions/LA.yaml +630 -18
- data/lib/countries/data/subdivisions/LB.yaml +245 -5
- data/lib/countries/data/subdivisions/LC.yaml +304 -0
- data/lib/countries/data/subdivisions/LI.yaml +349 -2
- data/lib/countries/data/subdivisions/LK.yaml +955 -3
- data/lib/countries/data/subdivisions/LR.yaml +565 -0
- data/lib/countries/data/subdivisions/LS.yaml +362 -2
- data/lib/countries/data/subdivisions/LT.yaml +1563 -10
- data/lib/countries/data/subdivisions/LU.yaml +322 -3
- data/lib/countries/data/subdivisions/LV.yaml +4937 -3
- data/lib/countries/data/subdivisions/LY.yaml +836 -203
- data/lib/countries/data/subdivisions/MA.yaml +1803 -17
- data/lib/countries/data/subdivisions/MC.yaml +234 -0
- data/lib/countries/data/subdivisions/MD.yaml +1570 -5
- data/lib/countries/data/subdivisions/ME.yaml +669 -4
- data/lib/countries/data/subdivisions/MG.yaml +148 -0
- data/lib/countries/data/subdivisions/MH.yaml +543 -21
- data/lib/countries/data/subdivisions/MK.yaml +2548 -0
- data/lib/countries/data/subdivisions/ML.yaml +363 -0
- data/lib/countries/data/subdivisions/MM.yaml +534 -0
- data/lib/countries/data/subdivisions/MN.yaml +935 -17
- data/lib/countries/data/subdivisions/MP.yaml +53 -0
- data/lib/countries/data/subdivisions/MR.yaml +428 -5
- data/lib/countries/data/subdivisions/MS.yaml +40 -0
- data/lib/countries/data/subdivisions/MT.yaml +2534 -13
- data/lib/countries/data/subdivisions/MU.yaml +574 -7
- data/lib/countries/data/subdivisions/MV.yaml +719 -5
- data/lib/countries/data/subdivisions/MW.yaml +1056 -1
- data/lib/countries/data/subdivisions/MX.yaml +1641 -2
- data/lib/countries/data/subdivisions/MY.yaml +708 -7
- data/lib/countries/data/subdivisions/MZ.yaml +450 -3
- data/lib/countries/data/subdivisions/NA.yaml +483 -0
- data/lib/countries/data/subdivisions/NC.yaml +40 -0
- data/lib/countries/data/subdivisions/NE.yaml +289 -0
- data/lib/countries/data/subdivisions/NG.yaml +1428 -2
- data/lib/countries/data/subdivisions/NI.yaml +660 -2
- data/lib/countries/data/subdivisions/NL.yaml +803 -3
- data/lib/countries/data/subdivisions/NO.yaml +1075 -0
- data/lib/countries/data/subdivisions/NP.yaml +572 -1
- data/lib/countries/data/subdivisions/NR.yaml +539 -2
- data/lib/countries/data/subdivisions/NZ.yaml +632 -2
- data/lib/countries/data/subdivisions/OM.yaml +396 -3
- data/lib/countries/data/subdivisions/PA.yaml +514 -13
- data/lib/countries/data/subdivisions/PE.yaml +1022 -4
- data/lib/countries/data/subdivisions/PF.yaml +66 -0
- data/lib/countries/data/subdivisions/PG.yaml +788 -3
- data/lib/countries/data/subdivisions/PH.yaml +3055 -7
- data/lib/countries/data/subdivisions/PK.yaml +357 -2
- data/lib/countries/data/subdivisions/PL.yaml +807 -14
- data/lib/countries/data/subdivisions/PM.yaml +27 -0
- data/lib/countries/data/subdivisions/PS.yaml +490 -0
- data/lib/countries/data/subdivisions/PT.yaml +741 -4
- data/lib/countries/data/subdivisions/PW.yaml +532 -1
- data/lib/countries/data/subdivisions/PY.yaml +687 -0
- data/lib/countries/data/subdivisions/QA.yaml +269 -3
- data/lib/countries/data/subdivisions/RO.yaml +1954 -21
- data/lib/countries/data/subdivisions/RS.yaml +1148 -14
- data/lib/countries/data/subdivisions/RU.yaml +4535 -20
- data/lib/countries/data/subdivisions/RW.yaml +220 -5
- data/lib/countries/data/subdivisions/SA.yaml +516 -19
- data/lib/countries/data/subdivisions/SB.yaml +363 -2
- data/lib/countries/data/subdivisions/SC.yaml +780 -6
- data/lib/countries/data/subdivisions/SD.yaml +805 -302
- data/lib/countries/data/subdivisions/SE.yaml +1027 -21
- data/lib/countries/data/subdivisions/SG.yaml +36 -0
- data/lib/countries/data/subdivisions/SH.yaml +115 -1
- data/lib/countries/data/subdivisions/SI.yaml +7067 -77
- data/lib/countries/data/subdivisions/SJ.yaml +27 -0
- data/lib/countries/data/subdivisions/SK.yaml +395 -8
- data/lib/countries/data/subdivisions/SL.yaml +143 -1
- data/lib/countries/data/subdivisions/SM.yaml +400 -2
- data/lib/countries/data/subdivisions/SN.yaml +506 -0
- data/lib/countries/data/subdivisions/SO.yaml +574 -7
- data/lib/countries/data/subdivisions/SR.yaml +334 -0
- data/lib/countries/data/subdivisions/SS.yaml +428 -0
- data/lib/countries/data/subdivisions/ST.yaml +14 -0
- data/lib/countries/data/subdivisions/SV.yaml +488 -0
- data/lib/countries/data/subdivisions/SY.yaml +569 -16
- data/lib/countries/data/subdivisions/SZ.yaml +144 -0
- data/lib/countries/data/subdivisions/TD.yaml +798 -6
- data/lib/countries/data/subdivisions/TG.yaml +182 -3
- data/lib/countries/data/subdivisions/TH.yaml +2935 -5
- data/lib/countries/data/subdivisions/TJ.yaml +233 -0
- data/lib/countries/data/subdivisions/TK.yaml +40 -0
- data/lib/countries/data/subdivisions/TL.yaml +450 -3
- data/lib/countries/data/subdivisions/TM.yaml +265 -1
- data/lib/countries/data/subdivisions/TN.yaml +844 -3
- data/lib/countries/data/subdivisions/TO.yaml +177 -3
- data/lib/countries/data/subdivisions/TR.yaml +3829 -6
- data/lib/countries/data/subdivisions/TT.yaml +522 -0
- data/lib/countries/data/subdivisions/TV.yaml +228 -0
- data/lib/countries/data/subdivisions/TW.yaml +761 -13
- data/lib/countries/data/subdivisions/TZ.yaml +1160 -7
- data/lib/countries/data/subdivisions/UA.yaml +1454 -28
- data/lib/countries/data/subdivisions/UG.yaml +3741 -20
- data/lib/countries/data/subdivisions/UM.yaml +486 -1
- data/lib/countries/data/subdivisions/US.yaml +3028 -3
- data/lib/countries/data/subdivisions/UY.yaml +754 -2
- data/lib/countries/data/subdivisions/UZ.yaml +592 -7
- data/lib/countries/data/subdivisions/VC.yaml +176 -0
- data/lib/countries/data/subdivisions/VE.yaml +1055 -2
- data/lib/countries/data/subdivisions/VI.yaml +40 -0
- data/lib/countries/data/subdivisions/VN.yaml +2444 -55
- data/lib/countries/data/subdivisions/VU.yaml +225 -3
- data/lib/countries/data/subdivisions/WF.yaml +138 -0
- data/lib/countries/data/subdivisions/WS.yaml +371 -6
- data/lib/countries/data/subdivisions/YE.yaml +857 -14
- data/lib/countries/data/subdivisions/YT.yaml +222 -0
- data/lib/countries/data/subdivisions/ZA.yaml +459 -3
- data/lib/countries/data/subdivisions/ZM.yaml +393 -2
- data/lib/countries/data/subdivisions/ZW.yaml +341 -0
- data/lib/countries/data/translation_corrections.yaml +8 -0
- data/lib/countries/iso3166.rb +1 -1
- data/lib/countries/sources.rb +6 -0
- data/lib/countries/sources/cldr/downloader.rb +35 -0
- data/lib/countries/sources/cldr/subdivision.rb +34 -0
- data/lib/countries/sources/cldr/subdivision_updater.rb +34 -0
- data/lib/countries/sources/local/cached_loader.rb +27 -0
- data/lib/countries/sources/local/subdivision.rb +32 -0
- data/lib/countries/structure.rb +1 -0
- data/lib/countries/tasks/geocoding.rake +4 -3
- data/lib/countries/tasks/postal_codes.rake +48 -0
- data/lib/countries/version.rb +1 -1
- data/spec/00_global_spec.rb +56 -0
- data/spec/configuration_spec.rb +1 -0
- data/spec/country_spec.rb +104 -9
- data/spec/perf_spec.rb +1 -1
- data/spec/subdivision_spec.rb +14 -0
- metadata +99 -27
- data/spec/global_spec.rb +0 -29
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Sources
|
|
2
|
+
module CLDR
|
|
3
|
+
class Subdivision
|
|
4
|
+
attr_reader :xml, :language_code
|
|
5
|
+
def initialize(language_code:, xml:)
|
|
6
|
+
@language_code = language_code
|
|
7
|
+
@xml = xml
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def text
|
|
11
|
+
xml.text
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def country_code
|
|
15
|
+
type[0..1].upcase
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def code
|
|
19
|
+
type[2..-1].upcase
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def type
|
|
23
|
+
xml.attributes['type'].value.delete('-')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_h
|
|
27
|
+
data = {}
|
|
28
|
+
data['translations'] ||= {}
|
|
29
|
+
data['translations'][language_code] = text
|
|
30
|
+
data
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'active_support/core_ext/hash/deep_merge'
|
|
3
|
+
require 'nokogiri'
|
|
4
|
+
require 'pry'
|
|
5
|
+
|
|
6
|
+
module Sources
|
|
7
|
+
module CLDR
|
|
8
|
+
class SubdivisionUpdater
|
|
9
|
+
def call
|
|
10
|
+
d = Dir['./tmp/cldr/trunk/common/subdivisions/*.xml']
|
|
11
|
+
loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
|
|
12
|
+
d.each do |file_path|
|
|
13
|
+
language_data = Nokogiri::XML(File.read(file_path))
|
|
14
|
+
language_code = File.basename(file_path, '.*')
|
|
15
|
+
subdivisions = language_data.css('subdivision')
|
|
16
|
+
next if subdivisions.empty?
|
|
17
|
+
last_country_code_seen = nil
|
|
18
|
+
|
|
19
|
+
subdivisions.each_with_index do |subdivision, index|
|
|
20
|
+
subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
|
|
21
|
+
data = loader.load(subdivision.country_code)
|
|
22
|
+
data[subdivision.code] ||= {}
|
|
23
|
+
data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
|
|
24
|
+
if (last_country_code_seen && last_country_code_seen != subdivision.country_code) || index == subdivisions.size - 1
|
|
25
|
+
puts "Updated #{subdivision.country_code} with language_code #{language_code}"
|
|
26
|
+
loader.save(subdivision.country_code, data)
|
|
27
|
+
end
|
|
28
|
+
last_country_code_seen = subdivision.country_code
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Sources
|
|
2
|
+
module Local
|
|
3
|
+
class CachedLoader
|
|
4
|
+
attr_reader :klass
|
|
5
|
+
def initialize(klass)
|
|
6
|
+
@klass = klass
|
|
7
|
+
@loaded_countries = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def from_cache(country_code)
|
|
11
|
+
@loaded_countries[country_code]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load(country_code)
|
|
15
|
+
if (data = from_cache(country_code))
|
|
16
|
+
data
|
|
17
|
+
else
|
|
18
|
+
@loaded_countries[country_code] = klass.load(country_code)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def save(country_code, data)
|
|
23
|
+
klass.new(country_code).save(data)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Sources
|
|
2
|
+
module Local
|
|
3
|
+
class Subdivision
|
|
4
|
+
attr_reader :code
|
|
5
|
+
def initialize(code)
|
|
6
|
+
@code = code
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def load
|
|
10
|
+
if File.exist?(file_path)
|
|
11
|
+
YAML.load_file(file_path) || {}
|
|
12
|
+
else
|
|
13
|
+
{}
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def save(data)
|
|
18
|
+
File.open(file_path, 'w') { |f| f.write data.to_yaml }
|
|
19
|
+
rescue
|
|
20
|
+
puts "failed to read #{file}: #{$ERROR_INFO}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def file_path
|
|
24
|
+
"lib/countries/data/subdivisions/#{code}.yaml"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.load(code)
|
|
28
|
+
new(code).load
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/countries/structure.rb
CHANGED
|
@@ -32,7 +32,7 @@ def country_codes
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
namespace :geocode do
|
|
35
|
-
desc 'Retrieve and store
|
|
35
|
+
desc 'Retrieve and store countries coordinates'
|
|
36
36
|
task :fetch_countries do
|
|
37
37
|
require 'countries'
|
|
38
38
|
# Iterate over countries
|
|
@@ -70,12 +70,12 @@ namespace :geocode do
|
|
|
70
70
|
|
|
71
71
|
desc 'Retrieve and store subdivisions coordinates'
|
|
72
72
|
task :fetch_subdivisions do
|
|
73
|
-
|
|
73
|
+
require_relative '../../countries'
|
|
74
74
|
# Iterate all countries with subdivisions
|
|
75
75
|
ISO3166::Country.all.select(&:subdivisions?).each do |c|
|
|
76
76
|
# Iterate subdivisions
|
|
77
77
|
state_data = c.subdivisions.dup
|
|
78
|
-
state_data.reject { |_, data| data['
|
|
78
|
+
state_data.reject { |_, data| data['geo'] }.each do |code, data|
|
|
79
79
|
location = "#{data['name']}, #{c.name}"
|
|
80
80
|
|
|
81
81
|
# Handle special geocoding cases where Google defaults to well known
|
|
@@ -87,6 +87,7 @@ namespace :geocode do
|
|
|
87
87
|
next unless (result = geocode(location))
|
|
88
88
|
geometry = result.geometry
|
|
89
89
|
if geometry['location']
|
|
90
|
+
state_data[code]['geo'] ||= {}
|
|
90
91
|
state_data[code]['geo']['latitude'] = geometry['location']['lat']
|
|
91
92
|
state_data[code]['geo']['longitude'] = geometry['location']['lng']
|
|
92
93
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
namespace :postal_codes do
|
|
2
|
+
desc 'Retrieve and update postal codes and their format'
|
|
3
|
+
task :update do
|
|
4
|
+
require 'json'
|
|
5
|
+
require 'open-uri'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
|
|
8
|
+
country_files = Dir['lib/countries/data/countries/*.yaml'].sort
|
|
9
|
+
|
|
10
|
+
country_files.each do |country_file|
|
|
11
|
+
yaml = YAML.load_file(country_file)
|
|
12
|
+
country_code = File.basename(country_file, File.extname(country_file))
|
|
13
|
+
print "\rUpdating #{country_code}"
|
|
14
|
+
|
|
15
|
+
data = yaml[country_code].to_a
|
|
16
|
+
postal_code_index = data.find_index { |d| d[0] == 'postal_code' }
|
|
17
|
+
postal_code_format_index = data.find_index { |d| d[0] == 'postal_code_format' }
|
|
18
|
+
|
|
19
|
+
response = URI.open("https://chromium-i18n.appspot.com/ssl-address/data/#{country_code}").read
|
|
20
|
+
json = JSON.parse(response) rescue {}
|
|
21
|
+
puts ' - Returned empty data. Skipping ' and next if json.empty?
|
|
22
|
+
|
|
23
|
+
postal_code = ['postal_code', !!json['zip']]
|
|
24
|
+
postal_code_format = ['postal_code_format', json['zip']]
|
|
25
|
+
|
|
26
|
+
if postal_code_index
|
|
27
|
+
data[postal_code_index] = postal_code
|
|
28
|
+
else
|
|
29
|
+
postal_code_index = data.find_index { |d| d[0] == 'nationality' } + 1 || data.size
|
|
30
|
+
data.insert(postal_code_index, postal_code)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if json['zip']
|
|
34
|
+
if postal_code_format_index
|
|
35
|
+
data[postal_code_format_index] = postal_code_format
|
|
36
|
+
else
|
|
37
|
+
data.insert(postal_code_index + 1, postal_code_format)
|
|
38
|
+
end
|
|
39
|
+
elsif postal_code_format_index
|
|
40
|
+
data.delete_at(postal_code_format_index)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
yaml[country_code] = data.to_h
|
|
44
|
+
|
|
45
|
+
File.open(country_file, 'w') { |file| file.write(yaml.to_yaml) }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/countries/version.rb
CHANGED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
describe 'global Country class', order: :defined do
|
|
2
|
+
context "when loaded via 'iso3166' existence" do
|
|
3
|
+
subject { defined?(Country) }
|
|
4
|
+
|
|
5
|
+
it { is_expected.to be_falsey }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "when loaded via 'global'" do
|
|
9
|
+
before { require 'countries/global' }
|
|
10
|
+
|
|
11
|
+
it 'does not pollute global namespace with Money gem' do
|
|
12
|
+
expect(defined?(Money)).not_to be
|
|
13
|
+
expect(ISO3166::Country.new('DE').respond_to?(:currency)).not_to be
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe 'existence' do
|
|
17
|
+
subject { defined?(Country) }
|
|
18
|
+
|
|
19
|
+
it { is_expected.to be_truthy }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe 'superclass' do
|
|
23
|
+
subject { Country.superclass }
|
|
24
|
+
|
|
25
|
+
it { is_expected.to eq(ISO3166::Country) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe 'to_s' do
|
|
29
|
+
it 'should return the country name' do
|
|
30
|
+
expect(Country.new('GB').to_s).to eq('United Kingdom of Great Britain and Northern Ireland')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe 'currency' do
|
|
35
|
+
it { expect(Country.new('GB').respond_to?(:currency)).not_to be }
|
|
36
|
+
|
|
37
|
+
context 'I enable currency extension via config' do
|
|
38
|
+
before { ISO3166.configuration.enable_currency_extension! }
|
|
39
|
+
|
|
40
|
+
it 'should add currency to global country' do
|
|
41
|
+
expect(Country.new('GB').currency).to be
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context 'I enable currency extension via config' do
|
|
47
|
+
before { ISO3166.configuration.enable_currency_extension! }
|
|
48
|
+
|
|
49
|
+
it 'should add currency to global country' do
|
|
50
|
+
expect(Country.new('GB').currency).to be
|
|
51
|
+
expect(defined?(Money)).to be
|
|
52
|
+
expect(ISO3166::Country.new('DE').currency).to be
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
data/spec/configuration_spec.rb
CHANGED
data/spec/country_spec.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
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
7
|
let(:country) { ISO3166::Country.search('US') }
|
|
7
8
|
|
|
8
9
|
it 'allows to create a country object from a symbol representation of the alpha2 code' do
|
|
@@ -47,7 +48,7 @@ describe ISO3166::Country do
|
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
it 'should return alternate names' do
|
|
50
|
-
expect(country.names).to eq(['United States', 'Vereinigte Staaten von Amerika', 'États-Unis', 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
|
|
51
|
+
expect(country.names).to eq(['United States', 'Murica', 'Vereinigte Staaten von Amerika', 'États-Unis', 'Estados Unidos', 'アメリカ合衆国', 'Verenigde Staten'])
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
it 'should return translations' do
|
|
@@ -84,8 +85,18 @@ describe ISO3166::Country do
|
|
|
84
85
|
end
|
|
85
86
|
|
|
86
87
|
it 'knows when a country does not require postal codes' do
|
|
87
|
-
|
|
88
|
-
expect(
|
|
88
|
+
antarctica = ISO3166::Country.search('AQ')
|
|
89
|
+
expect(antarctica.postal_code).to eq(false)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'knows about the country postal code format' do
|
|
93
|
+
expect(country.postal_code_format).to_not be_nil
|
|
94
|
+
|
|
95
|
+
regex = Regexp.new(country.postal_code_format)
|
|
96
|
+
expect(regex).to match("12345-6789")
|
|
97
|
+
|
|
98
|
+
antarctica = ISO3166::Country.search('AQ')
|
|
99
|
+
expect(antarctica.postal_code_format).to be_nil
|
|
89
100
|
end
|
|
90
101
|
|
|
91
102
|
it 'should return region' do
|
|
@@ -242,6 +253,26 @@ describe ISO3166::Country do
|
|
|
242
253
|
end
|
|
243
254
|
end
|
|
244
255
|
|
|
256
|
+
describe 'subdivision_names_with_codes' do
|
|
257
|
+
it 'should return an alphabetized list of all subdivisions names with codes' do
|
|
258
|
+
subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
|
|
259
|
+
expect(subdivisions).to be_an(Array)
|
|
260
|
+
expect(subdivisions.first[0]).to be_a(String)
|
|
261
|
+
expect(subdivisions.size).to eq(27)
|
|
262
|
+
expect(subdivisions.first[0]).to eq('Alexandria')
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
|
|
266
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
267
|
+
|
|
268
|
+
subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes(:es)
|
|
269
|
+
expect(subdivisions).to be_an(Array)
|
|
270
|
+
expect(subdivisions.first[0]).to be_a(String)
|
|
271
|
+
expect(subdivisions.size).to eq(27)
|
|
272
|
+
expect(subdivisions.first[0]).to eq('Al Iskandariyah')
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
245
276
|
describe 'valid?' do
|
|
246
277
|
it 'should return true if country is valid' do
|
|
247
278
|
expect(ISO3166::Country.new('US')).to be_valid
|
|
@@ -301,7 +332,7 @@ describe ISO3166::Country do
|
|
|
301
332
|
countries = ISO3166::Country.all_translated('fr')
|
|
302
333
|
expect(countries).to be_an(Array)
|
|
303
334
|
expect(countries.first).to be_a(String)
|
|
304
|
-
expect(countries.first).to eq('
|
|
335
|
+
expect(countries.first).to eq('Aruba')
|
|
305
336
|
# countries missing the desired locale will not be added to the list
|
|
306
337
|
# so all 250 countries may not be returned, 'fr' returns 249, for example
|
|
307
338
|
expect(countries.size).to eq(NUM_OF_COUNTRIES)
|
|
@@ -311,7 +342,7 @@ describe ISO3166::Country do
|
|
|
311
342
|
countries = ISO3166::Country.all_translated
|
|
312
343
|
expect(countries).to be_an(Array)
|
|
313
344
|
expect(countries.first).to be_a(String)
|
|
314
|
-
expect(countries.first).to eq('
|
|
345
|
+
expect(countries.first).to eq('Aruba')
|
|
315
346
|
expect(countries.size).to eq(NUM_OF_COUNTRIES)
|
|
316
347
|
end
|
|
317
348
|
end
|
|
@@ -376,14 +407,31 @@ describe ISO3166::Country do
|
|
|
376
407
|
countries = ISO3166::Country.new(:de).translation('xxx')
|
|
377
408
|
expect(countries).to be_nil
|
|
378
409
|
end
|
|
410
|
+
|
|
411
|
+
context 'should return variant locales' do
|
|
412
|
+
it 'should return different value for Chinese variants' do
|
|
413
|
+
ISO3166.configuration.locales = [:'zh-cn', :'zh-hk', :'zh-tw']
|
|
414
|
+
name_cn = ISO3166::Country['TW'].translation('zh-cn')
|
|
415
|
+
name_hk = ISO3166::Country['TW'].translation('zh-hk')
|
|
416
|
+
name_tw = ISO3166::Country['TW'].translation('zh-tw')
|
|
417
|
+
expect([name_cn, name_hk, name_tw].uniq.size).to eql 3
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
it 'should return different value for Portuguese variants' do
|
|
421
|
+
ISO3166.configuration.locales = [:pt, :'pt-br']
|
|
422
|
+
name_pt = ISO3166::Country['SG'].translation('pt')
|
|
423
|
+
name_br = ISO3166::Country['SG'].translation('pt-br')
|
|
424
|
+
expect([name_pt, name_br].uniq.size).to eql 2
|
|
425
|
+
end
|
|
426
|
+
end
|
|
379
427
|
end
|
|
380
428
|
|
|
381
429
|
describe 'translations' do
|
|
382
430
|
it 'should return an hash of all country names translated to the selected locale' do
|
|
383
431
|
countries = ISO3166::Country.translations('fr')
|
|
384
432
|
expect(countries).to be_an(Hash)
|
|
385
|
-
expect(countries.first[0]).to eq('
|
|
386
|
-
expect(countries.first).to eq(%w(
|
|
433
|
+
expect(countries.first[0]).to eq('AW')
|
|
434
|
+
expect(countries.first).to eq(%w(AW Aruba))
|
|
387
435
|
# countries missing the desired locale will not be added to the list
|
|
388
436
|
# so all 250 countries may not be returned, 'fr' returns 249, for example
|
|
389
437
|
expect(countries.size).to eq(NUM_OF_COUNTRIES)
|
|
@@ -392,8 +440,8 @@ describe ISO3166::Country do
|
|
|
392
440
|
it 'should return an hash of all country names in English if no locale is passed' do
|
|
393
441
|
countries = ISO3166::Country.translations
|
|
394
442
|
expect(countries).to be_an(Hash)
|
|
395
|
-
expect(countries.first[0]).to eq('
|
|
396
|
-
expect(countries.first).to eq(%w(
|
|
443
|
+
expect(countries.first[0]).to eq('AW')
|
|
444
|
+
expect(countries.first).to eq(%w(AW Aruba))
|
|
397
445
|
expect(countries.size).to eq(NUM_OF_COUNTRIES)
|
|
398
446
|
end
|
|
399
447
|
end
|
|
@@ -481,6 +529,19 @@ describe ISO3166::Country do
|
|
|
481
529
|
expect(spain_data).to be_a Hash
|
|
482
530
|
expect(spain_data.keys).to eq(['ES'])
|
|
483
531
|
end
|
|
532
|
+
|
|
533
|
+
it 'performs reasonably' do
|
|
534
|
+
start = Time.now
|
|
535
|
+
250.times do
|
|
536
|
+
lookup = ['ZM', 'ZMB', 'Zambia', 'US', 'USA', 'United States'].sample
|
|
537
|
+
case lookup.length
|
|
538
|
+
when 2 then ISO3166::Country.find_all_by(:alpha2, lookup)
|
|
539
|
+
when 3 then ISO3166::Country.find_all_by(:alpha3, lookup)
|
|
540
|
+
else ISO3166::Country.find_all_by(:name, lookup)
|
|
541
|
+
end
|
|
542
|
+
end
|
|
543
|
+
expect(Time.now - start).to be < 1
|
|
544
|
+
end
|
|
484
545
|
end
|
|
485
546
|
|
|
486
547
|
describe 'hash finder methods' do
|
|
@@ -498,6 +559,31 @@ describe ISO3166::Country do
|
|
|
498
559
|
end
|
|
499
560
|
end
|
|
500
561
|
|
|
562
|
+
context "when search name with comma in 'name'" do
|
|
563
|
+
subject { ISO3166::Country.find_by_name(country_name) }
|
|
564
|
+
|
|
565
|
+
context 'with Republic of Korea' do
|
|
566
|
+
let(:country_name) { 'Korea, Republic of' }
|
|
567
|
+
it 'should return' do
|
|
568
|
+
expect(subject.first).to eq('KR')
|
|
569
|
+
end
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
context 'with Bolivia' do
|
|
573
|
+
let(:country_name) { 'Bolivia, Plurinational State of' }
|
|
574
|
+
it 'should return' do
|
|
575
|
+
expect(subject.first).to eq('BO')
|
|
576
|
+
end
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
context 'with Bonaire' do
|
|
580
|
+
let(:country_name) { 'Bonaire, Sint Eustatius and Saba' }
|
|
581
|
+
it 'should return' do
|
|
582
|
+
expect(subject.first).to eq('BQ')
|
|
583
|
+
end
|
|
584
|
+
end
|
|
585
|
+
end
|
|
586
|
+
|
|
501
587
|
context 'when search lowercase multibyte name found' do
|
|
502
588
|
subject { ISO3166::Country.find_country_by_name('россия') }
|
|
503
589
|
|
|
@@ -576,6 +662,15 @@ describe ISO3166::Country do
|
|
|
576
662
|
end
|
|
577
663
|
end
|
|
578
664
|
|
|
665
|
+
context 'when the search term contains comma' do
|
|
666
|
+
let(:korea) { ISO3166::Country.find_country_by_name('Korea, Republic of') }
|
|
667
|
+
|
|
668
|
+
it 'should be a country instance' do
|
|
669
|
+
expect(korea).to be_a(ISO3166::Country)
|
|
670
|
+
expect(korea.alpha2).to eq('KR')
|
|
671
|
+
end
|
|
672
|
+
end
|
|
673
|
+
|
|
579
674
|
context 'when search translation found' do
|
|
580
675
|
before do
|
|
581
676
|
ISO3166.configure do |config|
|