countries 1.2.2 → 4.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/tests.yml +39 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +52 -0
- data/CHANGELOG.md +570 -1
- data/Gemfile +7 -0
- data/LICENSE +3 -1
- data/README.markdown +261 -136
- data/Rakefile +44 -74
- data/bin/console +14 -0
- data/countries.gemspec +15 -9
- data/lib/countries/cache/countries.json +1 -0
- data/lib/countries/cache/locales/ab.json +1 -0
- data/lib/countries/cache/locales/af.json +1 -0
- data/lib/countries/cache/locales/ak.json +1 -0
- data/lib/countries/cache/locales/am.json +1 -0
- data/lib/countries/cache/locales/an.json +1 -0
- data/lib/countries/cache/locales/ar.json +1 -0
- data/lib/countries/cache/locales/as.json +1 -0
- data/lib/countries/cache/locales/ay.json +1 -0
- data/lib/countries/cache/locales/az.json +1 -0
- data/lib/countries/cache/locales/ba.json +1 -0
- data/lib/countries/cache/locales/be.json +1 -0
- data/lib/countries/cache/locales/bg.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/br.json +1 -0
- data/lib/countries/cache/locales/bs.json +1 -0
- data/lib/countries/cache/locales/ca.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/cv.json +1 -0
- data/lib/countries/cache/locales/cy.json +1 -0
- data/lib/countries/cache/locales/da.json +1 -0
- data/lib/countries/cache/locales/de.json +1 -0
- data/lib/countries/cache/locales/dv.json +1 -0
- data/lib/countries/cache/locales/dz.json +1 -0
- data/lib/countries/cache/locales/ee.json +1 -0
- data/lib/countries/cache/locales/el.json +1 -0
- data/lib/countries/cache/locales/en.json +1 -0
- data/lib/countries/cache/locales/eo.json +1 -0
- data/lib/countries/cache/locales/es.json +1 -0
- data/lib/countries/cache/locales/et.json +1 -0
- data/lib/countries/cache/locales/eu.json +1 -0
- data/lib/countries/cache/locales/fa.json +1 -0
- data/lib/countries/cache/locales/ff.json +1 -0
- data/lib/countries/cache/locales/fi.json +1 -0
- data/lib/countries/cache/locales/fo.json +1 -0
- data/lib/countries/cache/locales/fr.json +1 -0
- data/lib/countries/cache/locales/fy.json +1 -0
- data/lib/countries/cache/locales/ga.json +1 -0
- data/lib/countries/cache/locales/gl.json +1 -0
- data/lib/countries/cache/locales/gn.json +1 -0
- data/lib/countries/cache/locales/gu.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/hi.json +1 -0
- data/lib/countries/cache/locales/hr.json +1 -0
- data/lib/countries/cache/locales/ht.json +1 -0
- data/lib/countries/cache/locales/hu.json +1 -0
- data/lib/countries/cache/locales/hy.json +1 -0
- data/lib/countries/cache/locales/ia.json +1 -0
- data/lib/countries/cache/locales/id.json +1 -0
- data/lib/countries/cache/locales/io.json +1 -0
- data/lib/countries/cache/locales/is.json +1 -0
- data/lib/countries/cache/locales/it.json +1 -0
- data/lib/countries/cache/locales/iu.json +1 -0
- data/lib/countries/cache/locales/ja.json +1 -0
- data/lib/countries/cache/locales/ka.json +1 -0
- data/lib/countries/cache/locales/ki.json +1 -0
- data/lib/countries/cache/locales/kk.json +1 -0
- data/lib/countries/cache/locales/kl.json +1 -0
- data/lib/countries/cache/locales/km.json +1 -0
- data/lib/countries/cache/locales/kn.json +1 -0
- data/lib/countries/cache/locales/ko.json +1 -0
- data/lib/countries/cache/locales/ku.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/lv.json +1 -0
- data/lib/countries/cache/locales/mi.json +1 -0
- data/lib/countries/cache/locales/mk.json +1 -0
- data/lib/countries/cache/locales/ml.json +1 -0
- data/lib/countries/cache/locales/mn.json +1 -0
- data/lib/countries/cache/locales/mr.json +1 -0
- data/lib/countries/cache/locales/ms.json +1 -0
- data/lib/countries/cache/locales/mt.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/ne.json +1 -0
- data/lib/countries/cache/locales/nl.json +1 -0
- data/lib/countries/cache/locales/nn.json +1 -0
- data/lib/countries/cache/locales/nv.json +1 -0
- data/lib/countries/cache/locales/oc.json +1 -0
- data/lib/countries/cache/locales/or.json +1 -0
- data/lib/countries/cache/locales/pa.json +1 -0
- data/lib/countries/cache/locales/pi.json +1 -0
- data/lib/countries/cache/locales/pl.json +1 -0
- data/lib/countries/cache/locales/ps.json +1 -0
- data/lib/countries/cache/locales/pt-br.json +1 -0
- data/lib/countries/cache/locales/pt.json +1 -0
- data/lib/countries/cache/locales/ro.json +1 -0
- data/lib/countries/cache/locales/ru.json +1 -0
- data/lib/countries/cache/locales/rw.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/sk.json +1 -0
- data/lib/countries/cache/locales/sl.json +1 -0
- data/lib/countries/cache/locales/so.json +1 -0
- data/lib/countries/cache/locales/sq.json +1 -0
- data/lib/countries/cache/locales/sr.json +1 -0
- data/lib/countries/cache/locales/sv.json +1 -0
- data/lib/countries/cache/locales/sw.json +1 -0
- data/lib/countries/cache/locales/ta.json +1 -0
- data/lib/countries/cache/locales/te.json +1 -0
- data/lib/countries/cache/locales/tg.json +1 -0
- data/lib/countries/cache/locales/th.json +1 -0
- data/lib/countries/cache/locales/ti.json +1 -0
- data/lib/countries/cache/locales/tk.json +1 -0
- data/lib/countries/cache/locales/tl.json +1 -0
- data/lib/countries/cache/locales/tr.json +1 -0
- data/lib/countries/cache/locales/tt.json +1 -0
- data/lib/countries/cache/locales/ug.json +1 -0
- data/lib/countries/cache/locales/uk.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/vi.json +1 -0
- data/lib/countries/cache/locales/wa.json +1 -0
- data/lib/countries/cache/locales/wo.json +1 -0
- data/lib/countries/cache/locales/xh.json +1 -0
- 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 -0
- data/lib/countries/cache/locales/zu.json +1 -0
- data/lib/countries/configuration.rb +57 -0
- data/lib/countries/country/class_methods.rb +196 -0
- data/lib/countries/country/currency_methods.rb +13 -0
- data/lib/countries/country/emoji.rb +42 -0
- data/lib/countries/country.rb +214 -158
- data/lib/countries/data/countries/AD.yaml +32 -21
- data/lib/countries/data/countries/AE.yaml +40 -25
- data/lib/countries/data/countries/AF.yaml +36 -23
- data/lib/countries/data/countries/AG.yaml +36 -25
- data/lib/countries/data/countries/AI.yaml +33 -21
- data/lib/countries/data/countries/AL.yaml +35 -24
- data/lib/countries/data/countries/AM.yaml +36 -24
- data/lib/countries/data/countries/AO.yaml +30 -20
- data/lib/countries/data/countries/AQ.yaml +31 -22
- data/lib/countries/data/countries/AR.yaml +36 -24
- data/lib/countries/data/countries/AS.yaml +38 -25
- data/lib/countries/data/countries/AT.yaml +37 -25
- data/lib/countries/data/countries/AU.yaml +39 -23
- data/lib/countries/data/countries/AW.yaml +30 -20
- data/lib/countries/data/countries/AX.yaml +33 -22
- data/lib/countries/data/countries/AZ.yaml +37 -25
- data/lib/countries/data/countries/BA.yaml +40 -27
- data/lib/countries/data/countries/BB.yaml +33 -21
- data/lib/countries/data/countries/BD.yaml +32 -21
- data/lib/countries/data/countries/BE.yaml +42 -28
- data/lib/countries/data/countries/BF.yaml +32 -21
- data/lib/countries/data/countries/BG.yaml +38 -26
- data/lib/countries/data/countries/BH.yaml +35 -24
- data/lib/countries/data/countries/BI.yaml +32 -21
- data/lib/countries/data/countries/BJ.yaml +31 -21
- data/lib/countries/data/countries/BL.yaml +33 -22
- data/lib/countries/data/countries/BM.yaml +34 -22
- data/lib/countries/data/countries/BN.yaml +32 -21
- data/lib/countries/data/countries/BO.yaml +37 -25
- data/lib/countries/data/countries/BQ.yaml +33 -22
- data/lib/countries/data/countries/BR.yaml +42 -24
- data/lib/countries/data/countries/BS.yaml +32 -21
- data/lib/countries/data/countries/BT.yaml +33 -22
- data/lib/countries/data/countries/BV.yaml +32 -23
- data/lib/countries/data/countries/BW.yaml +32 -21
- data/lib/countries/data/countries/BY.yaml +38 -26
- data/lib/countries/data/countries/BZ.yaml +34 -23
- data/lib/countries/data/countries/CA.yaml +35 -23
- data/lib/countries/data/countries/CC.yaml +34 -23
- data/lib/countries/data/countries/CD.yaml +44 -28
- data/lib/countries/data/countries/CF.yaml +36 -25
- data/lib/countries/data/countries/CG.yaml +35 -23
- data/lib/countries/data/countries/CH.yaml +47 -26
- data/lib/countries/data/countries/CI.yaml +35 -24
- data/lib/countries/data/countries/CK.yaml +34 -24
- data/lib/countries/data/countries/CL.yaml +37 -21
- data/lib/countries/data/countries/CM.yaml +36 -25
- data/lib/countries/data/countries/CN.yaml +32 -21
- data/lib/countries/data/countries/CO.yaml +33 -22
- data/lib/countries/data/countries/CR.yaml +31 -20
- data/lib/countries/data/countries/CU.yaml +32 -21
- data/lib/countries/data/countries/CV.yaml +35 -24
- data/lib/countries/data/countries/CW.yaml +31 -21
- data/lib/countries/data/countries/CX.yaml +38 -25
- data/lib/countries/data/countries/CY.yaml +42 -28
- data/lib/countries/data/countries/CZ.yaml +42 -28
- data/lib/countries/data/countries/DE.yaml +39 -27
- data/lib/countries/data/countries/DJ.yaml +34 -23
- data/lib/countries/data/countries/DK.yaml +39 -27
- data/lib/countries/data/countries/DM.yaml +31 -20
- data/lib/countries/data/countries/DO.yaml +35 -24
- data/lib/countries/data/countries/DZ.yaml +36 -25
- data/lib/countries/data/countries/EC.yaml +32 -21
- data/lib/countries/data/countries/EE.yaml +37 -26
- data/lib/countries/data/countries/EG.yaml +36 -25
- data/lib/countries/data/countries/EH.yaml +38 -26
- data/lib/countries/data/countries/ER.yaml +36 -24
- data/lib/countries/data/countries/ES.yaml +38 -26
- data/lib/countries/data/countries/ET.yaml +35 -24
- data/lib/countries/data/countries/FI.yaml +40 -27
- data/lib/countries/data/countries/FJ.yaml +38 -25
- data/lib/countries/data/countries/FK.yaml +36 -25
- data/lib/countries/data/countries/FM.yaml +34 -23
- data/lib/countries/data/countries/FO.yaml +35 -24
- data/lib/countries/data/countries/FR.yaml +38 -26
- data/lib/countries/data/countries/GA.yaml +32 -22
- data/lib/countries/data/countries/GB.yaml +46 -28
- data/lib/countries/data/countries/GD.yaml +31 -20
- data/lib/countries/data/countries/GE.yaml +34 -23
- data/lib/countries/data/countries/GF.yaml +35 -23
- data/lib/countries/data/countries/GG.yaml +38 -26
- data/lib/countries/data/countries/GH.yaml +30 -20
- data/lib/countries/data/countries/GI.yaml +32 -21
- data/lib/countries/data/countries/GL.yaml +35 -24
- data/lib/countries/data/countries/GM.yaml +30 -20
- data/lib/countries/data/countries/GN.yaml +35 -23
- data/lib/countries/data/countries/GP.yaml +33 -22
- data/lib/countries/data/countries/GQ.yaml +36 -25
- data/lib/countries/data/countries/GR.yaml +41 -29
- data/lib/countries/data/countries/GS.yaml +34 -22
- data/lib/countries/data/countries/GT.yaml +31 -20
- data/lib/countries/data/countries/GU.yaml +36 -22
- data/lib/countries/data/countries/GW.yaml +34 -22
- data/lib/countries/data/countries/GY.yaml +30 -20
- data/lib/countries/data/countries/HK.yaml +33 -22
- data/lib/countries/data/countries/HM.yaml +35 -24
- data/lib/countries/data/countries/HN.yaml +31 -20
- data/lib/countries/data/countries/HR.yaml +40 -28
- data/lib/countries/data/countries/HT.yaml +34 -22
- data/lib/countries/data/countries/HU.yaml +39 -27
- data/lib/countries/data/countries/ID.yaml +34 -23
- data/lib/countries/data/countries/IE.yaml +39 -26
- data/lib/countries/data/countries/IL.yaml +39 -22
- data/lib/countries/data/countries/IM.yaml +37 -25
- data/lib/countries/data/countries/IN.yaml +35 -23
- data/lib/countries/data/countries/IO.yaml +35 -24
- data/lib/countries/data/countries/IQ.yaml +33 -22
- data/lib/countries/data/countries/IR.yaml +34 -23
- data/lib/countries/data/countries/IS.yaml +42 -24
- data/lib/countries/data/countries/IT.yaml +38 -26
- data/lib/countries/data/countries/JE.yaml +34 -22
- data/lib/countries/data/countries/JM.yaml +33 -22
- data/lib/countries/data/countries/JO.yaml +36 -25
- data/lib/countries/data/countries/JP.yaml +33 -22
- data/lib/countries/data/countries/KE.yaml +34 -22
- data/lib/countries/data/countries/KG.yaml +38 -26
- data/lib/countries/data/countries/KH.yaml +35 -24
- data/lib/countries/data/countries/KI.yaml +30 -20
- data/lib/countries/data/countries/KM.yaml +35 -24
- data/lib/countries/data/countries/KN.yaml +38 -25
- data/lib/countries/data/countries/KP.yaml +37 -26
- data/lib/countries/data/countries/KR.yaml +37 -26
- data/lib/countries/data/countries/KW.yaml +34 -23
- data/lib/countries/data/countries/KY.yaml +36 -24
- data/lib/countries/data/countries/KZ.yaml +36 -24
- data/lib/countries/data/countries/LA.yaml +32 -21
- data/lib/countries/data/countries/LB.yaml +37 -25
- data/lib/countries/data/countries/LC.yaml +35 -22
- data/lib/countries/data/countries/LI.yaml +32 -20
- data/lib/countries/data/countries/LK.yaml +33 -21
- data/lib/countries/data/countries/LR.yaml +31 -20
- data/lib/countries/data/countries/LS.yaml +33 -21
- data/lib/countries/data/countries/LT.yaml +41 -28
- data/lib/countries/data/countries/LU.yaml +39 -25
- data/lib/countries/data/countries/LV.yaml +45 -27
- data/lib/countries/data/countries/LY.yaml +36 -26
- data/lib/countries/data/countries/MA.yaml +35 -24
- data/lib/countries/data/countries/MC.yaml +32 -21
- data/lib/countries/data/countries/MD.yaml +36 -25
- data/lib/countries/data/countries/ME.yaml +38 -24
- data/lib/countries/data/countries/MF.yaml +37 -24
- data/lib/countries/data/countries/MG.yaml +35 -23
- data/lib/countries/data/countries/MH.yaml +37 -25
- data/lib/countries/data/countries/MK.yaml +37 -25
- data/lib/countries/data/countries/ML.yaml +30 -20
- data/lib/countries/data/countries/MM.yaml +31 -20
- data/lib/countries/data/countries/MN.yaml +34 -23
- data/lib/countries/data/countries/MO.yaml +33 -22
- data/lib/countries/data/countries/MP.yaml +38 -26
- data/lib/countries/data/countries/MQ.yaml +33 -22
- data/lib/countries/data/countries/MR.yaml +36 -25
- data/lib/countries/data/countries/MS.yaml +32 -21
- data/lib/countries/data/countries/MT.yaml +38 -25
- data/lib/countries/data/countries/MU.yaml +33 -22
- data/lib/countries/data/countries/MV.yaml +34 -23
- data/lib/countries/data/countries/MW.yaml +32 -21
- data/lib/countries/data/countries/MX.yaml +39 -23
- data/lib/countries/data/countries/MY.yaml +36 -24
- data/lib/countries/data/countries/MZ.yaml +32 -21
- data/lib/countries/data/countries/NA.yaml +35 -23
- data/lib/countries/data/countries/NC.yaml +36 -25
- data/lib/countries/data/countries/NE.yaml +32 -21
- data/lib/countries/data/countries/NF.yaml +36 -25
- data/lib/countries/data/countries/NG.yaml +39 -23
- data/lib/countries/data/countries/NI.yaml +31 -20
- data/lib/countries/data/countries/NL.yaml +41 -28
- data/lib/countries/data/countries/NO.yaml +43 -25
- data/lib/countries/data/countries/NP.yaml +43 -22
- data/lib/countries/data/countries/NR.yaml +32 -21
- data/lib/countries/data/countries/NU.yaml +30 -20
- data/lib/countries/data/countries/NZ.yaml +41 -24
- data/lib/countries/data/countries/OM.yaml +33 -22
- data/lib/countries/data/countries/PA.yaml +31 -21
- data/lib/countries/data/countries/PE.yaml +33 -22
- data/lib/countries/data/countries/PF.yaml +36 -25
- data/lib/countries/data/countries/PG.yaml +35 -24
- data/lib/countries/data/countries/PH.yaml +41 -24
- data/lib/countries/data/countries/PK.yaml +34 -22
- data/lib/countries/data/countries/PL.yaml +38 -26
- data/lib/countries/data/countries/PM.yaml +36 -25
- data/lib/countries/data/countries/PN.yaml +35 -23
- data/lib/countries/data/countries/PR.yaml +33 -21
- data/lib/countries/data/countries/PS.yaml +41 -28
- data/lib/countries/data/countries/PT.yaml +34 -22
- data/lib/countries/data/countries/PW.yaml +31 -20
- data/lib/countries/data/countries/PY.yaml +33 -21
- data/lib/countries/data/countries/QA.yaml +32 -22
- data/lib/countries/data/countries/RE.yaml +34 -23
- data/lib/countries/data/countries/RO.yaml +40 -28
- data/lib/countries/data/countries/RS.yaml +34 -23
- data/lib/countries/data/countries/RU.yaml +37 -26
- data/lib/countries/data/countries/RW.yaml +35 -23
- data/lib/countries/data/countries/SA.yaml +42 -25
- data/lib/countries/data/countries/SB.yaml +35 -25
- data/lib/countries/data/countries/SC.yaml +33 -22
- data/lib/countries/data/countries/SD.yaml +37 -25
- data/lib/countries/data/countries/SE.yaml +39 -27
- data/lib/countries/data/countries/SG.yaml +38 -25
- data/lib/countries/data/countries/SH.yaml +37 -25
- data/lib/countries/data/countries/SI.yaml +39 -27
- data/lib/countries/data/countries/SJ.yaml +36 -25
- data/lib/countries/data/countries/SK.yaml +39 -27
- data/lib/countries/data/countries/SL.yaml +30 -20
- data/lib/countries/data/countries/SM.yaml +32 -21
- data/lib/countries/data/countries/SN.yaml +32 -21
- data/lib/countries/data/countries/SO.yaml +35 -23
- data/lib/countries/data/countries/SR.yaml +31 -21
- data/lib/countries/data/countries/SS.yaml +35 -23
- data/lib/countries/data/countries/ST.yaml +34 -24
- data/lib/countries/data/countries/SV.yaml +32 -21
- data/lib/countries/data/countries/SX.yaml +34 -22
- data/lib/countries/data/countries/SY.yaml +36 -26
- data/lib/countries/data/countries/SZ.yaml +35 -23
- data/lib/countries/data/countries/TC.yaml +38 -25
- data/lib/countries/data/countries/TD.yaml +36 -25
- data/lib/countries/data/countries/TF.yaml +39 -28
- data/lib/countries/data/countries/TG.yaml +30 -20
- data/lib/countries/data/countries/TH.yaml +39 -22
- data/lib/countries/data/countries/TJ.yaml +37 -25
- data/lib/countries/data/countries/TK.yaml +33 -23
- data/lib/countries/data/countries/TL.yaml +34 -24
- data/lib/countries/data/countries/TM.yaml +35 -23
- data/lib/countries/data/countries/TN.yaml +38 -26
- data/lib/countries/data/countries/TO.yaml +32 -21
- data/lib/countries/data/countries/TR.yaml +35 -24
- data/lib/countries/data/countries/TT.yaml +35 -24
- data/lib/countries/data/countries/TV.yaml +30 -20
- data/lib/countries/data/countries/TW.yaml +33 -22
- data/lib/countries/data/countries/TZ.yaml +36 -24
- data/lib/countries/data/countries/UA.yaml +42 -25
- data/lib/countries/data/countries/UG.yaml +33 -22
- data/lib/countries/data/countries/UM.yaml +37 -26
- data/lib/countries/data/countries/US.yaml +37 -24
- data/lib/countries/data/countries/UY.yaml +31 -20
- data/lib/countries/data/countries/UZ.yaml +37 -25
- data/lib/countries/data/countries/VA.yaml +39 -27
- data/lib/countries/data/countries/VC.yaml +38 -24
- data/lib/countries/data/countries/VE.yaml +31 -20
- data/lib/countries/data/countries/VG.yaml +38 -26
- data/lib/countries/data/countries/VI.yaml +37 -25
- data/lib/countries/data/countries/VN.yaml +38 -21
- data/lib/countries/data/countries/VU.yaml +34 -22
- data/lib/countries/data/countries/WF.yaml +36 -25
- data/lib/countries/data/countries/WS.yaml +32 -21
- data/lib/countries/data/countries/YE.yaml +33 -23
- data/lib/countries/data/countries/YT.yaml +32 -21
- data/lib/countries/data/countries/ZA.yaml +52 -32
- data/lib/countries/data/countries/ZM.yaml +33 -22
- data/lib/countries/data/countries/ZW.yaml +36 -24
- data/lib/countries/data/subdivisions/AD.yaml +85 -50
- data/lib/countries/data/subdivisions/AE.yaml +513 -55
- data/lib/countries/data/subdivisions/AF.yaml +2239 -234
- data/lib/countries/data/subdivisions/AG.yaml +451 -57
- data/lib/countries/data/subdivisions/AI.yaml +197 -0
- data/lib/countries/data/subdivisions/AL.yaml +746 -316
- data/lib/countries/data/subdivisions/AM.yaml +788 -68
- data/lib/countries/data/subdivisions/AO.yaml +1145 -126
- data/lib/countries/data/subdivisions/AR.yaml +1668 -168
- data/lib/countries/data/subdivisions/AT.yaml +714 -63
- data/lib/countries/data/subdivisions/AU.yaml +673 -56
- data/lib/countries/data/subdivisions/AZ.yaml +4508 -536
- data/lib/countries/data/subdivisions/BA.yaml +359 -14
- data/lib/countries/data/subdivisions/BB.yaml +589 -79
- data/lib/countries/data/subdivisions/BD.yaml +2593 -400
- data/lib/countries/data/subdivisions/BE.yaml +943 -77
- data/lib/countries/data/subdivisions/BF.yaml +2917 -311
- data/lib/countries/data/subdivisions/BG.yaml +1965 -199
- data/lib/countries/data/subdivisions/BH.yaml +184 -31
- data/lib/countries/data/subdivisions/BI.yaml +982 -112
- data/lib/countries/data/subdivisions/BJ.yaml +691 -84
- data/lib/countries/data/subdivisions/BM.yaml +155 -0
- data/lib/countries/data/subdivisions/BN.yaml +225 -24
- data/lib/countries/data/subdivisions/BO.yaml +561 -63
- data/lib/countries/data/subdivisions/BQ.yaml +217 -21
- data/lib/countries/data/subdivisions/BR.yaml +2154 -185
- data/lib/countries/data/subdivisions/BS.yaml +1821 -143
- data/lib/countries/data/subdivisions/BT.yaml +1087 -140
- data/lib/countries/data/subdivisions/BW.yaml +923 -63
- data/lib/countries/data/subdivisions/BY.yaml +528 -31
- data/lib/countries/data/subdivisions/BZ.yaml +309 -42
- data/lib/countries/data/subdivisions/CA.yaml +1105 -92
- data/lib/countries/data/subdivisions/CD.yaml +1187 -78
- data/lib/countries/data/subdivisions/CF.yaml +961 -119
- data/lib/countries/data/subdivisions/CG.yaml +640 -77
- data/lib/countries/data/subdivisions/CH.yaml +1946 -182
- data/lib/countries/data/subdivisions/CI.yaml +859 -125
- data/lib/countries/data/subdivisions/CK.yaml +155 -0
- data/lib/countries/data/subdivisions/CL.yaml +968 -105
- data/lib/countries/data/subdivisions/CM.yaml +582 -70
- data/lib/countries/data/subdivisions/CN.yaml +2618 -274
- data/lib/countries/data/subdivisions/CO.yaml +2102 -227
- data/lib/countries/data/subdivisions/CR.yaml +393 -49
- data/lib/countries/data/subdivisions/CU.yaml +926 -119
- data/lib/countries/data/subdivisions/CV.yaml +1198 -119
- data/lib/countries/data/subdivisions/CY.yaml +328 -42
- data/lib/countries/data/subdivisions/CZ.yaml +2892 -129
- data/lib/countries/data/subdivisions/DE.yaml +1420 -112
- data/lib/countries/data/subdivisions/DJ.yaml +375 -42
- data/lib/countries/data/subdivisions/DK.yaml +344 -180
- data/lib/countries/data/subdivisions/DM.yaml +512 -72
- data/lib/countries/data/subdivisions/DO.yaml +1763 -219
- data/lib/countries/data/subdivisions/DZ.yaml +2869 -334
- data/lib/countries/data/subdivisions/EC.yaml +1348 -168
- data/lib/countries/data/subdivisions/EE.yaml +1368 -118
- data/lib/countries/data/subdivisions/EG.yaml +1628 -190
- data/lib/countries/data/subdivisions/EH.yaml +48 -28
- data/lib/countries/data/subdivisions/ER.yaml +348 -42
- data/lib/countries/data/subdivisions/ES.yaml +4875 -375
- data/lib/countries/data/subdivisions/ET.yaml +735 -77
- data/lib/countries/data/subdivisions/FI.yaml +890 -36
- data/lib/countries/data/subdivisions/FJ.yaml +720 -35
- data/lib/countries/data/subdivisions/FM.yaml +202 -24
- data/lib/countries/data/subdivisions/FR.yaml +8250 -684
- data/lib/countries/data/subdivisions/GA.yaml +526 -63
- data/lib/countries/data/subdivisions/GB.yaml +12522 -1516
- data/lib/countries/data/subdivisions/GD.yaml +354 -49
- data/lib/countries/data/subdivisions/GE.yaml +833 -85
- data/lib/countries/data/subdivisions/GH.yaml +658 -70
- data/lib/countries/data/subdivisions/GL.yaml +262 -0
- data/lib/countries/data/subdivisions/GM.yaml +381 -42
- data/lib/countries/data/subdivisions/GN.yaml +1919 -234
- data/lib/countries/data/subdivisions/GQ.yaml +459 -59
- data/lib/countries/data/subdivisions/GR.yaml +871 -527
- data/lib/countries/data/subdivisions/GT.yaml +1270 -150
- data/lib/countries/data/subdivisions/GW.yaml +563 -59
- data/lib/countries/data/subdivisions/GY.yaml +498 -70
- data/lib/countries/data/subdivisions/HN.yaml +1019 -126
- data/lib/countries/data/subdivisions/HR.yaml +1419 -151
- data/lib/countries/data/subdivisions/HT.yaml +525 -63
- data/lib/countries/data/subdivisions/HU.yaml +2949 -302
- data/lib/countries/data/subdivisions/ID.yaml +2679 -243
- data/lib/countries/data/subdivisions/IE.yaml +2027 -177
- data/lib/countries/data/subdivisions/IL.yaml +376 -42
- data/lib/countries/data/subdivisions/IN.yaml +3110 -252
- data/lib/countries/data/subdivisions/IQ.yaml +1105 -126
- data/lib/countries/data/subdivisions/IR.yaml +2092 -215
- data/lib/countries/data/subdivisions/IS.yaml +830 -59
- data/lib/countries/data/subdivisions/IT.yaml +8525 -790
- data/lib/countries/data/subdivisions/JM.yaml +732 -100
- data/lib/countries/data/subdivisions/JO.yaml +662 -48
- data/lib/countries/data/subdivisions/JP.yaml +3562 -327
- data/lib/countries/data/subdivisions/KE.yaml +1449 -56
- data/lib/countries/data/subdivisions/KG.yaml +624 -57
- data/lib/countries/data/subdivisions/KH.yaml +1332 -147
- data/lib/countries/data/subdivisions/KI.yaml +163 -17
- data/lib/countries/data/subdivisions/KM.yaml +189 -21
- data/lib/countries/data/subdivisions/KN.yaml +835 -100
- data/lib/countries/data/subdivisions/KP.yaml +922 -80
- data/lib/countries/data/subdivisions/KR.yaml +1225 -88
- data/lib/countries/data/subdivisions/KW.yaml +280 -42
- data/lib/countries/data/subdivisions/KZ.yaml +1213 -122
- data/lib/countries/data/subdivisions/LA.yaml +947 -120
- data/lib/countries/data/subdivisions/LB.yaml +386 -22
- data/lib/countries/data/subdivisions/LC.yaml +470 -0
- data/lib/countries/data/subdivisions/LI.yaml +557 -39
- data/lib/countries/data/subdivisions/LK.yaml +1546 -175
- data/lib/countries/data/subdivisions/LR.yaml +857 -105
- data/lib/countries/data/subdivisions/LS.yaml +529 -70
- data/lib/countries/data/subdivisions/LT.yaml +2616 -71
- data/lib/countries/data/subdivisions/LU.yaml +490 -24
- data/lib/countries/data/subdivisions/LV.yaml +2501 -178
- data/lib/countries/data/subdivisions/LY.yaml +1188 -262
- data/lib/countries/data/subdivisions/MA.yaml +3375 -437
- data/lib/countries/data/subdivisions/MC.yaml +484 -0
- data/lib/countries/data/subdivisions/MD.yaml +2240 -71
- data/lib/countries/data/subdivisions/ME.yaml +1136 -151
- data/lib/countries/data/subdivisions/MG.yaml +253 -42
- data/lib/countries/data/subdivisions/MH.yaml +995 -151
- data/lib/countries/data/subdivisions/MK.yaml +3964 -752
- data/lib/countries/data/subdivisions/ML.yaml +569 -63
- data/lib/countries/data/subdivisions/MM.yaml +849 -98
- data/lib/countries/data/subdivisions/MN.yaml +1389 -160
- data/lib/countries/data/subdivisions/MR.yaml +702 -94
- data/lib/countries/data/subdivisions/MT.yaml +3726 -478
- data/lib/countries/data/subdivisions/MU.yaml +923 -115
- data/lib/countries/data/subdivisions/MV.yaml +1219 -148
- data/lib/countries/data/subdivisions/MW.yaml +1646 -189
- data/lib/countries/data/subdivisions/MX.yaml +2414 -222
- data/lib/countries/data/subdivisions/MY.yaml +1071 -114
- data/lib/countries/data/subdivisions/MZ.yaml +665 -77
- data/lib/countries/data/subdivisions/NA.yaml +736 -98
- data/lib/countries/data/subdivisions/NE.yaml +475 -56
- data/lib/countries/data/subdivisions/NG.yaml +2370 -259
- data/lib/countries/data/subdivisions/NI.yaml +952 -119
- data/lib/countries/data/subdivisions/NL.yaml +1205 -84
- data/lib/countries/data/subdivisions/NO.yaml +856 -164
- data/lib/countries/data/subdivisions/NP.yaml +982 -90
- data/lib/countries/data/subdivisions/NR.yaml +827 -100
- data/lib/countries/data/subdivisions/NZ.yaml +946 -122
- data/lib/countries/data/subdivisions/OM.yaml +633 -63
- data/lib/countries/data/subdivisions/PA.yaml +708 -69
- data/lib/countries/data/subdivisions/PE.yaml +1489 -179
- data/lib/countries/data/subdivisions/PG.yaml +1211 -140
- data/lib/countries/data/subdivisions/PH.yaml +5089 -572
- data/lib/countries/data/subdivisions/PK.yaml +566 -56
- data/lib/countries/data/subdivisions/PL.yaml +1042 -150
- data/lib/countries/data/subdivisions/PS.yaml +747 -0
- data/lib/countries/data/subdivisions/PT.yaml +1124 -145
- data/lib/countries/data/subdivisions/PW.yaml +832 -108
- data/lib/countries/data/subdivisions/PY.yaml +1045 -127
- data/lib/countries/data/subdivisions/QA.yaml +469 -64
- data/lib/countries/data/subdivisions/RO.yaml +2746 -294
- data/lib/countries/data/subdivisions/RS.yaml +1786 -195
- data/lib/countries/data/subdivisions/RU.yaml +6570 -655
- data/lib/countries/data/subdivisions/RW.yaml +327 -35
- data/lib/countries/data/subdivisions/SA.yaml +768 -102
- data/lib/countries/data/subdivisions/SB.yaml +550 -70
- data/lib/countries/data/subdivisions/SC.yaml +1286 -163
- data/lib/countries/data/subdivisions/SD.yaml +1002 -254
- data/lib/countries/data/subdivisions/SE.yaml +1416 -149
- data/lib/countries/data/subdivisions/SG.yaml +108 -31
- data/lib/countries/data/subdivisions/SH.yaml +197 -21
- data/lib/countries/data/subdivisions/SI.yaml +10997 -1403
- data/lib/countries/data/subdivisions/SJ.yaml +29 -0
- data/lib/countries/data/subdivisions/SK.yaml +533 -57
- data/lib/countries/data/subdivisions/SL.yaml +231 -28
- data/lib/countries/data/subdivisions/SM.yaml +577 -65
- data/lib/countries/data/subdivisions/SN.yaml +761 -77
- data/lib/countries/data/subdivisions/SO.yaml +914 -126
- data/lib/countries/data/subdivisions/SR.yaml +512 -70
- data/lib/countries/data/subdivisions/SS.yaml +624 -0
- data/lib/countries/data/subdivisions/ST.yaml +73 -14
- data/lib/countries/data/subdivisions/SV.yaml +747 -98
- data/lib/countries/data/subdivisions/SY.yaml +806 -91
- data/lib/countries/data/subdivisions/SZ.yaml +217 -28
- data/lib/countries/data/subdivisions/TD.yaml +1242 -126
- data/lib/countries/data/subdivisions/TG.yaml +264 -35
- data/lib/countries/data/subdivisions/TH.yaml +4535 -539
- data/lib/countries/data/subdivisions/TJ.yaml +356 -0
- data/lib/countries/data/subdivisions/TK.yaml +43 -0
- data/lib/countries/data/subdivisions/TL.yaml +682 -91
- data/lib/countries/data/subdivisions/TM.yaml +390 -46
- data/lib/countries/data/subdivisions/TN.yaml +1301 -168
- data/lib/countries/data/subdivisions/TO.yaml +260 -36
- data/lib/countries/data/subdivisions/TR.yaml +5858 -624
- data/lib/countries/data/subdivisions/TT.yaml +865 -112
- data/lib/countries/data/subdivisions/TV.yaml +382 -44
- data/lib/countries/data/subdivisions/TW.yaml +1281 -145
- data/lib/countries/data/subdivisions/TZ.yaml +1868 -184
- data/lib/countries/data/subdivisions/UA.yaml +1988 -192
- data/lib/countries/data/subdivisions/UG.yaml +6150 -544
- data/lib/countries/data/subdivisions/UM.yaml +710 -59
- data/lib/countries/data/subdivisions/US.yaml +4789 -404
- data/lib/countries/data/subdivisions/UY.yaml +1163 -112
- data/lib/countries/data/subdivisions/UZ.yaml +902 -99
- data/lib/countries/data/subdivisions/VC.yaml +289 -38
- data/lib/countries/data/subdivisions/VE.yaml +1559 -175
- data/lib/countries/data/subdivisions/VN.yaml +3799 -550
- data/lib/countries/data/subdivisions/VU.yaml +333 -43
- data/lib/countries/data/subdivisions/WF.yaml +201 -0
- data/lib/countries/data/subdivisions/WS.yaml +587 -77
- data/lib/countries/data/subdivisions/YE.yaml +1262 -135
- data/lib/countries/data/subdivisions/ZA.yaml +712 -63
- data/lib/countries/data/subdivisions/ZM.yaml +568 -65
- data/lib/countries/data/subdivisions/ZW.yaml +520 -70
- data/lib/countries/data/translation_corrections.yaml +38 -1
- data/lib/countries/data.rb +161 -16
- data/lib/countries/global.rb +13 -3
- data/lib/countries/iso3166.rb +9 -2
- data/lib/countries/kwarg_struct.rb +12 -0
- data/lib/countries/mongoid.rb +25 -22
- data/lib/countries/setup.rb +7 -7
- data/lib/countries/sources/cldr/downloader.rb +37 -0
- data/lib/countries/sources/cldr/subdivision.rb +35 -0
- data/lib/countries/sources/cldr/subdivision_updater.rb +35 -0
- data/lib/countries/sources/local/cached_loader.rb +29 -0
- data/lib/countries/sources/local/subdivision.rb +33 -0
- data/lib/countries/sources.rb +6 -0
- data/lib/countries/structure.rb +72 -0
- data/lib/countries/subdivision.rb +10 -0
- data/lib/countries/tasks/geocoding.rake +97 -0
- data/lib/countries/tasks/postal_codes.rake +48 -0
- data/lib/countries/timezones.rb +13 -0
- data/lib/countries/translations.rb +11 -0
- data/lib/countries/version.rb +1 -1
- data/lib/countries.rb +2 -0
- data/spec/00_global_spec.rb +56 -0
- data/spec/configuration_spec.rb +54 -0
- data/spec/country_spec.rb +473 -87
- data/spec/data_spec.rb +181 -0
- data/spec/mongoid_spec.rb +2 -2
- data/spec/perf_spec.rb +74 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/subdivision_spec.rb +32 -0
- data/spec/thread_safety_spec.rb +46 -0
- data/spec/timezone_spec.rb +32 -0
- metadata +206 -30
- data/.travis.yml +0 -6
- data/lib/countries/cache/countries +0 -0
- data/lib/countries/data/countries/AN.yaml +0 -42
- data/lib/countries/data/countries.yaml +0 -251
- data/lib/countries/data/subdivisions/Ky.yaml +0 -55
- data/lib/countries/data/subdivisions/TF.yaml +0 -27
- data/lib/countries/data/subdivisions/Tj.yaml +0 -38
- data/spec/setup_spec.rb +0 -14
data/lib/countries/data.rb
CHANGED
@@ -1,33 +1,178 @@
|
|
1
1
|
module ISO3166
|
2
|
-
##
|
3
2
|
# Handles building the in memory store of countries data
|
4
3
|
class Data
|
5
|
-
@@
|
4
|
+
@@cache_dir = [File.dirname(__FILE__), 'cache']
|
5
|
+
@@cache = {}
|
6
|
+
@@registered_data = {}
|
7
|
+
@@mutex = Mutex.new
|
8
|
+
|
6
9
|
def initialize(alpha2)
|
7
10
|
@alpha2 = alpha2.to_s.upcase
|
8
|
-
Data.load_cache unless @@cache
|
9
11
|
end
|
10
12
|
|
11
13
|
def call
|
12
|
-
|
14
|
+
self.class.update_cache[@alpha2]
|
13
15
|
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
class << self
|
18
|
+
def cache_dir
|
19
|
+
@@cache_dir
|
20
|
+
end
|
18
21
|
|
19
|
-
|
22
|
+
def cache_dir=(value)
|
23
|
+
@@cache_dir = value
|
24
|
+
end
|
20
25
|
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
# Registers a new Country with custom data.
|
27
|
+
# If you are overriding an existing country, this does not perform a deep merge so you will need to __bring in all data you wish to be available__.
|
28
|
+
# Overriding an existing country will also remove it from the internal management of translations.
|
29
|
+
def register(data)
|
30
|
+
alpha2 = data[:alpha2].upcase
|
31
|
+
@@registered_data[alpha2] = deep_stringify_keys(data)
|
32
|
+
@@registered_data[alpha2]['translations'] = \
|
33
|
+
Translations.new.merge(data['translations'] || {})
|
34
|
+
@@cache = cache.merge(@@registered_data)
|
35
|
+
end
|
24
36
|
|
25
|
-
|
26
|
-
|
27
|
-
|
37
|
+
# Removes a country from the loaded data
|
38
|
+
def unregister(alpha2)
|
39
|
+
alpha2 = alpha2.to_s.upcase
|
40
|
+
@@cache.delete(alpha2)
|
41
|
+
@@registered_data.delete(alpha2)
|
42
|
+
end
|
43
|
+
|
44
|
+
def cache
|
45
|
+
update_cache
|
46
|
+
end
|
47
|
+
|
48
|
+
# Resets the loaded data and cache
|
49
|
+
def reset
|
50
|
+
@@cache = {}
|
51
|
+
@@registered_data = {}
|
52
|
+
ISO3166.configuration.loaded_locales = []
|
53
|
+
end
|
54
|
+
|
55
|
+
def codes
|
56
|
+
load_data!
|
57
|
+
loaded_codes
|
58
|
+
end
|
59
|
+
|
60
|
+
def update_cache
|
61
|
+
load_data!
|
62
|
+
sync_translations!
|
63
|
+
@@cache
|
64
|
+
end
|
65
|
+
|
66
|
+
def load_data!
|
67
|
+
return @@cache unless load_required?
|
68
|
+
synchronized do
|
69
|
+
@@cache = load_cache %w(countries.json)
|
70
|
+
@@_country_codes = @@cache.keys
|
71
|
+
@@cache = @@cache.merge(@@registered_data)
|
72
|
+
@@cache
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def sync_translations!
|
77
|
+
return unless cache_flush_required?
|
78
|
+
|
79
|
+
locales_to_remove.each do |locale|
|
80
|
+
unload_translations(locale)
|
81
|
+
end
|
82
|
+
|
83
|
+
locales_to_load.each do |locale|
|
84
|
+
load_translations(locale)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def synchronized(&block)
|
91
|
+
if use_mutex?
|
92
|
+
@@mutex.synchronize(&block)
|
93
|
+
else
|
94
|
+
block.call
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def use_mutex?
|
99
|
+
# Stubbed in testing
|
100
|
+
true
|
101
|
+
end
|
102
|
+
|
103
|
+
def load_required?
|
104
|
+
synchronized do
|
105
|
+
@@cache.empty?
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def loaded_codes
|
110
|
+
@@cache.keys
|
111
|
+
end
|
112
|
+
|
113
|
+
# Codes that we have translations for in dataset
|
114
|
+
def internal_codes
|
115
|
+
@@_country_codes - @@registered_data.keys
|
116
|
+
end
|
117
|
+
|
118
|
+
def cache_flush_required?
|
119
|
+
!locales_to_load.empty? || !locales_to_remove.empty?
|
120
|
+
end
|
121
|
+
|
122
|
+
def locales_to_load
|
123
|
+
requested_locales - loaded_locales
|
124
|
+
end
|
125
|
+
|
126
|
+
def locales_to_remove
|
127
|
+
loaded_locales - requested_locales
|
128
|
+
end
|
129
|
+
|
130
|
+
def requested_locales
|
131
|
+
ISO3166.configuration.locales.map { |l| l.to_s.downcase }
|
132
|
+
end
|
133
|
+
|
134
|
+
def loaded_locales
|
135
|
+
ISO3166.configuration.loaded_locales.map { |l| l.to_s.downcase }
|
136
|
+
end
|
137
|
+
|
138
|
+
def load_translations(locale)
|
139
|
+
synchronized do
|
140
|
+
locale_names = load_cache(['locales', "#{locale}.json"])
|
141
|
+
internal_codes.each do |alpha2|
|
142
|
+
@@cache[alpha2]['translations'] ||= Translations.new
|
143
|
+
@@cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
|
144
|
+
@@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
|
145
|
+
end
|
146
|
+
ISO3166.configuration.loaded_locales << locale
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def unload_translations(locale)
|
151
|
+
synchronized do
|
152
|
+
internal_codes.each do |alpha2|
|
153
|
+
@@cache[alpha2]['translations'].delete(locale)
|
154
|
+
@@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
|
155
|
+
end
|
156
|
+
ISO3166.configuration.loaded_locales.delete(locale)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def load_cache(file_array)
|
161
|
+
file_path = datafile_path(file_array)
|
162
|
+
File.exist?(file_path) ? JSON.parse(File.binread(file_path)) : {}
|
163
|
+
end
|
164
|
+
|
165
|
+
def datafile_path(file_array)
|
166
|
+
File.join([@@cache_dir] + file_array)
|
167
|
+
end
|
28
168
|
|
29
|
-
|
30
|
-
|
169
|
+
def deep_stringify_keys(data)
|
170
|
+
data.transform_keys!(&:to_s)
|
171
|
+
data.transform_values! do |v|
|
172
|
+
v.is_a?(Hash) ? deep_stringify_keys(v) : v
|
173
|
+
end
|
174
|
+
return data
|
175
|
+
end
|
31
176
|
end
|
32
177
|
end
|
33
178
|
end
|
data/lib/countries/global.rb
CHANGED
@@ -1,7 +1,17 @@
|
|
1
1
|
require 'countries'
|
2
2
|
|
3
|
+
# Some apps might not want to constantly call +ISO3166::Country+. This gem has a helper that can provide a Country class
|
4
|
+
#
|
5
|
+
# With global Country Helper enabled
|
6
|
+
#
|
7
|
+
# c = Country['US']
|
8
|
+
#
|
9
|
+
# This will conflict with any existing Country constant
|
10
|
+
#
|
11
|
+
# To Use
|
12
|
+
#
|
13
|
+
# gem 'countries', require: 'countries/global'
|
14
|
+
#
|
3
15
|
class Country < ISO3166::Country
|
4
|
-
|
5
|
-
name
|
6
|
-
end
|
16
|
+
|
7
17
|
end
|
data/lib/countries/iso3166.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require '
|
2
|
+
require 'json'
|
3
3
|
require 'i18n_data'
|
4
4
|
|
5
|
-
require 'countries/
|
5
|
+
require 'countries/kwarg_struct'
|
6
|
+
require 'countries/configuration'
|
6
7
|
require 'countries/data'
|
8
|
+
require 'countries/structure'
|
9
|
+
require 'countries/translations'
|
10
|
+
require 'countries/country/class_methods'
|
11
|
+
require 'countries/country/emoji'
|
7
12
|
require 'countries/country'
|
13
|
+
require 'countries/subdivision'
|
14
|
+
require 'countries/timezones'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ISO3166
|
2
|
+
class KwargStruct < Struct
|
3
|
+
# Override the initialize to handle hashes of named parameters
|
4
|
+
def initialize(*args)
|
5
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
6
|
+
super(*args)
|
7
|
+
opts.each_pair do |k, v|
|
8
|
+
send "#{k}=", v
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/countries/mongoid.rb
CHANGED
@@ -1,31 +1,34 @@
|
|
1
|
-
module ISO3166
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
module ISO3166
|
2
|
+
class Country
|
3
|
+
def mongoize
|
4
|
+
ISO3166::Country.mongoize(self)
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
country.
|
12
|
-
|
13
|
-
|
7
|
+
class << self
|
8
|
+
# Convert an +ISO3166::Country+ to the data that is stored by Mongoid.
|
9
|
+
def mongoize(country)
|
10
|
+
if country.is_a?(self) && !country.data.nil?
|
11
|
+
country.alpha2
|
12
|
+
elsif send(:valid_alpha2?, country)
|
13
|
+
new(country).alpha2
|
14
|
+
end
|
14
15
|
end
|
15
|
-
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
# Get the object as it was stored with Mongoid, and instantiate an +ISO3166::Country+.
|
18
|
+
def demongoize(alpha2)
|
19
|
+
new(alpha2)
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
# Convert an +ISO3166::Country+ to the data that is stored by Mongoid.
|
23
|
+
def evolve(country)
|
24
|
+
mongoize(country)
|
25
|
+
end
|
24
26
|
|
25
|
-
|
27
|
+
private
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
+
def valid_alpha2?(country)
|
30
|
+
country.is_a?(String) && !ISO3166::Country.new(country).nil?
|
31
|
+
end
|
29
32
|
end
|
30
33
|
end
|
31
34
|
end
|
data/lib/countries/setup.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module ISO3166
|
2
2
|
##
|
3
|
+
# <b>DEPRECATED:</b> Please use <tt>Data</tt> instead.
|
4
|
+
# TODO: Remove at version 2.1
|
3
5
|
# Handles building the in memory store of countries data
|
4
6
|
class Setup
|
7
|
+
# <b>DEPRECATED:</b> Please use <tt>Data.codes</tt> instead.
|
5
8
|
def codes
|
6
|
-
|
9
|
+
warn '[DEPRECATION] `Setup.codes` is deprecated. Please use `Data.codes` instead.'
|
10
|
+
Data.codes
|
7
11
|
end
|
8
12
|
|
9
13
|
def data
|
10
|
-
|
11
|
-
|
12
|
-
codes.each do |alpha2|
|
13
|
-
@data[alpha2] = Data.new(alpha2).call
|
14
|
-
end
|
15
|
-
@data.freeze
|
14
|
+
warn "[DEPRECATION] `Setup.new.data` is deprecated without replacement
|
15
|
+
data is now loaded per locale Data.new(:en).call"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
# Support code to allow updating subdivision data from the Unicode CLDR repository
|
8
|
+
module Sources
|
9
|
+
# Support code to allow updating subdivision data from the Unicode CLDR repository
|
10
|
+
module CLDR
|
11
|
+
# Downloads data from the Unicode CLDR repository
|
12
|
+
module Downloader
|
13
|
+
module_function
|
14
|
+
|
15
|
+
def subdivisions
|
16
|
+
download_folder('subdivisions')
|
17
|
+
end
|
18
|
+
|
19
|
+
def download_folder(type)
|
20
|
+
folder = File.join(ISO3166_ROOT_PATH, 'tmp', 'cldr', 'trunk', 'common', type)
|
21
|
+
FileUtils.mkdir_p(folder)
|
22
|
+
url = URI.parse("https://api.github.com/repos/unicode-org/cldr/contents/common/" + type)
|
23
|
+
path_listing = JSON.parse(Net::HTTP.get_response(url).body)
|
24
|
+
path_listing.each do |path|
|
25
|
+
if path['name'] =~ /\.xml$/
|
26
|
+
File.open(File.join(folder, path['name']), 'w') do |f|
|
27
|
+
raw_url = URI.parse(path['download_url'])
|
28
|
+
f.write(Net::HTTP.get_response(raw_url).body)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Sources
|
2
|
+
module CLDR
|
3
|
+
# Auxiliary Subdivision class to support loading Unicode CLDR data to update local files
|
4
|
+
class Subdivision
|
5
|
+
attr_reader :xml, :language_code
|
6
|
+
def initialize(language_code:, xml:)
|
7
|
+
@language_code = language_code
|
8
|
+
@xml = xml
|
9
|
+
end
|
10
|
+
|
11
|
+
def text
|
12
|
+
xml.text
|
13
|
+
end
|
14
|
+
|
15
|
+
def country_code
|
16
|
+
type[0..1].upcase
|
17
|
+
end
|
18
|
+
|
19
|
+
def code
|
20
|
+
type[2..-1].upcase
|
21
|
+
end
|
22
|
+
|
23
|
+
def type
|
24
|
+
xml.attributes['type'].value.delete('-')
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_h
|
28
|
+
data = {}
|
29
|
+
data['translations'] ||= {}
|
30
|
+
data['translations'][language_code] = text
|
31
|
+
data
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
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
|
+
# Updates local subdivision files with data from the Unicode CLDR repository
|
9
|
+
class SubdivisionUpdater
|
10
|
+
def call
|
11
|
+
d = Dir['./tmp/cldr/trunk/common/subdivisions/*.xml']
|
12
|
+
loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
|
13
|
+
d.each do |file_path|
|
14
|
+
language_data = Nokogiri::XML(File.read(file_path))
|
15
|
+
language_code = File.basename(file_path, '.*')
|
16
|
+
subdivisions = language_data.css('subdivision')
|
17
|
+
next if subdivisions.empty?
|
18
|
+
last_country_code_seen = nil
|
19
|
+
|
20
|
+
subdivisions.each_with_index do |subdivision, index|
|
21
|
+
subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
|
22
|
+
data = loader.load(subdivision.country_code)
|
23
|
+
data[subdivision.code] ||= {}
|
24
|
+
data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
|
25
|
+
if (last_country_code_seen && last_country_code_seen != subdivision.country_code) || index == subdivisions.size - 1
|
26
|
+
puts "Updated #{subdivision.country_code} with language_code #{language_code}"
|
27
|
+
loader.save(subdivision.country_code, data)
|
28
|
+
end
|
29
|
+
last_country_code_seen = subdivision.country_code
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Sources
|
2
|
+
# Support code to allow updating subdivision data from the Unicode CLDR repository
|
3
|
+
module Local
|
4
|
+
# Loader for locally-cached data, to allow merging Unicode CLDR data with existing local data
|
5
|
+
class CachedLoader
|
6
|
+
attr_reader :klass
|
7
|
+
def initialize(klass)
|
8
|
+
@klass = klass
|
9
|
+
@loaded_countries = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def from_cache(country_code)
|
13
|
+
@loaded_countries[country_code]
|
14
|
+
end
|
15
|
+
|
16
|
+
def load(country_code)
|
17
|
+
if (data = from_cache(country_code))
|
18
|
+
data
|
19
|
+
else
|
20
|
+
@loaded_countries[country_code] = klass.load(country_code)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def save(country_code, data)
|
25
|
+
klass.new(country_code).save(data)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Sources
|
2
|
+
module Local
|
3
|
+
# Auxiliary Subdivision class to support loading the local subdivision data to be updated with Unicode CLDR data
|
4
|
+
class Subdivision
|
5
|
+
attr_reader :code
|
6
|
+
def initialize(code)
|
7
|
+
@code = code
|
8
|
+
end
|
9
|
+
|
10
|
+
def load
|
11
|
+
if File.exist?(file_path)
|
12
|
+
YAML.load_file(file_path) || {}
|
13
|
+
else
|
14
|
+
{}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def save(data)
|
19
|
+
File.open(file_path, 'w') { |f| f.write data.to_yaml }
|
20
|
+
rescue
|
21
|
+
puts "failed to read #{file}: #{$ERROR_INFO}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def file_path
|
25
|
+
"lib/countries/data/subdivisions/#{code}.yaml"
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.load(code)
|
29
|
+
new(code).load
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
module ISO3166
|
4
|
+
DEFAULT_COUNTRY_HASH = {
|
5
|
+
'address_format' => nil,
|
6
|
+
'alpha2' => nil,
|
7
|
+
'alpha3' => nil,
|
8
|
+
'continent' => nil,
|
9
|
+
'country_code' => nil,
|
10
|
+
'currency_code' => nil,
|
11
|
+
'gec' => nil,
|
12
|
+
'geo' => {
|
13
|
+
'latitude' => nil,
|
14
|
+
'longitude' => nil,
|
15
|
+
'max_latitude' => nil,
|
16
|
+
'max_longitude' => nil,
|
17
|
+
'min_latitude' => nil,
|
18
|
+
'min_longitude' => nil,
|
19
|
+
'bounds' => {
|
20
|
+
'northeast' => {
|
21
|
+
'lat' => nil,
|
22
|
+
'lng' => nil
|
23
|
+
},
|
24
|
+
'southwest' => {
|
25
|
+
'lat' => nil,
|
26
|
+
'lng' => nil
|
27
|
+
}
|
28
|
+
}
|
29
|
+
},
|
30
|
+
'international_prefix' => nil,
|
31
|
+
'ioc' => nil,
|
32
|
+
'iso_long_name' => nil,
|
33
|
+
'iso_short_name' => nil,
|
34
|
+
'national_destination_code_lengths' => [],
|
35
|
+
'national_number_lengths' => [],
|
36
|
+
'national_prefix' => nil,
|
37
|
+
'nanp_prefix' => nil,
|
38
|
+
'nationality' => nil,
|
39
|
+
'number' => nil,
|
40
|
+
'languages_official' => [],
|
41
|
+
'languages_spoken' => [],
|
42
|
+
'translations' => {},
|
43
|
+
'postal_code' => nil,
|
44
|
+
'postal_code_format' => nil,
|
45
|
+
'region' => nil,
|
46
|
+
'unofficial_names' => [],
|
47
|
+
'start_of_week' => 'monday',
|
48
|
+
'subregion' => nil,
|
49
|
+
'un_locode' => nil,
|
50
|
+
'vat_rates' => {
|
51
|
+
'standard' => nil,
|
52
|
+
'reduced' => [nil, nil],
|
53
|
+
'super_reduced' => nil,
|
54
|
+
'parking' => nil
|
55
|
+
},
|
56
|
+
'world_region' => nil
|
57
|
+
}.freeze
|
58
|
+
|
59
|
+
DEFAULT_SUBDIVISION_HASH = {
|
60
|
+
'name' => nil,
|
61
|
+
'unofficial_names' => [],
|
62
|
+
'translations' => {},
|
63
|
+
'geo' => {
|
64
|
+
'latitude' => nil,
|
65
|
+
'longitude' => nil,
|
66
|
+
'max_latitude' => nil,
|
67
|
+
'max_longitude' => nil,
|
68
|
+
'min_latitude' => nil,
|
69
|
+
'min_longitude' => nil
|
70
|
+
}
|
71
|
+
}.freeze
|
72
|
+
end
|