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.
Files changed (581) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +3 -4
  3. data/CHANGELOG.md +271 -0
  4. data/Gemfile +1 -0
  5. data/README.markdown +36 -18
  6. data/Rakefile +12 -3
  7. data/countries.gemspec +2 -3
  8. data/lib/countries/cache/countries.json +1 -1
  9. data/lib/countries/cache/locales/ab.json +1 -0
  10. data/lib/countries/cache/locales/af.json +1 -1
  11. data/lib/countries/cache/locales/ak.json +1 -0
  12. data/lib/countries/cache/locales/am.json +1 -1
  13. data/lib/countries/cache/locales/an.json +1 -0
  14. data/lib/countries/cache/locales/ar.json +1 -1
  15. data/lib/countries/cache/locales/as.json +1 -1
  16. data/lib/countries/cache/locales/ay.json +1 -0
  17. data/lib/countries/cache/locales/az.json +1 -1
  18. data/lib/countries/cache/locales/ba.json +1 -0
  19. data/lib/countries/cache/locales/be.json +1 -1
  20. data/lib/countries/cache/locales/bg.json +1 -1
  21. data/lib/countries/cache/locales/bi.json +1 -0
  22. data/lib/countries/cache/locales/bn-in.json +1 -0
  23. data/lib/countries/cache/locales/bn.json +1 -1
  24. data/lib/countries/cache/locales/br.json +1 -1
  25. data/lib/countries/cache/locales/bs.json +1 -1
  26. data/lib/countries/cache/locales/ca.json +1 -1
  27. data/lib/countries/cache/locales/ce.json +1 -0
  28. data/lib/countries/cache/locales/ch.json +1 -0
  29. data/lib/countries/cache/locales/cs.json +1 -1
  30. data/lib/countries/cache/locales/cv.json +1 -0
  31. data/lib/countries/cache/locales/cy.json +1 -1
  32. data/lib/countries/cache/locales/da.json +1 -1
  33. data/lib/countries/cache/locales/de.json +1 -1
  34. data/lib/countries/cache/locales/dv.json +1 -0
  35. data/lib/countries/cache/locales/dz.json +1 -1
  36. data/lib/countries/cache/locales/ee.json +1 -0
  37. data/lib/countries/cache/locales/el.json +1 -1
  38. data/lib/countries/cache/locales/en.json +1 -1
  39. data/lib/countries/cache/locales/eo.json +1 -1
  40. data/lib/countries/cache/locales/es.json +1 -1
  41. data/lib/countries/cache/locales/et.json +1 -1
  42. data/lib/countries/cache/locales/eu.json +1 -1
  43. data/lib/countries/cache/locales/fa.json +1 -1
  44. data/lib/countries/cache/locales/ff.json +1 -0
  45. data/lib/countries/cache/locales/fi.json +1 -1
  46. data/lib/countries/cache/locales/fo.json +1 -1
  47. data/lib/countries/cache/locales/fr.json +1 -1
  48. data/lib/countries/cache/locales/fy.json +1 -0
  49. data/lib/countries/cache/locales/ga.json +1 -1
  50. data/lib/countries/cache/locales/gl.json +1 -1
  51. data/lib/countries/cache/locales/gn.json +1 -0
  52. data/lib/countries/cache/locales/gu.json +1 -1
  53. data/lib/countries/cache/locales/gv.json +1 -0
  54. data/lib/countries/cache/locales/ha.json +1 -0
  55. data/lib/countries/cache/locales/he.json +1 -1
  56. data/lib/countries/cache/locales/hi.json +1 -1
  57. data/lib/countries/cache/locales/hr.json +1 -1
  58. data/lib/countries/cache/locales/ht.json +1 -0
  59. data/lib/countries/cache/locales/hu.json +1 -1
  60. data/lib/countries/cache/locales/hy.json +1 -1
  61. data/lib/countries/cache/locales/ia.json +1 -1
  62. data/lib/countries/cache/locales/id.json +1 -1
  63. data/lib/countries/cache/locales/io.json +1 -0
  64. data/lib/countries/cache/locales/is.json +1 -1
  65. data/lib/countries/cache/locales/it.json +1 -1
  66. data/lib/countries/cache/locales/iu.json +1 -0
  67. data/lib/countries/cache/locales/ja.json +1 -1
  68. data/lib/countries/cache/locales/ka.json +1 -1
  69. data/lib/countries/cache/locales/ki.json +1 -0
  70. data/lib/countries/cache/locales/kk.json +1 -1
  71. data/lib/countries/cache/locales/kl.json +1 -0
  72. data/lib/countries/cache/locales/km.json +1 -1
  73. data/lib/countries/cache/locales/kn.json +1 -1
  74. data/lib/countries/cache/locales/ko.json +1 -1
  75. data/lib/countries/cache/locales/ku.json +1 -1
  76. data/lib/countries/cache/locales/kv.json +1 -0
  77. data/lib/countries/cache/locales/kw.json +1 -0
  78. data/lib/countries/cache/locales/ky.json +1 -0
  79. data/lib/countries/cache/locales/lo.json +1 -0
  80. data/lib/countries/cache/locales/lt.json +1 -1
  81. data/lib/countries/cache/locales/lv.json +1 -1
  82. data/lib/countries/cache/locales/mi.json +1 -1
  83. data/lib/countries/cache/locales/mk.json +1 -1
  84. data/lib/countries/cache/locales/ml.json +1 -1
  85. data/lib/countries/cache/locales/mn.json +1 -1
  86. data/lib/countries/cache/locales/mr.json +1 -1
  87. data/lib/countries/cache/locales/ms.json +1 -1
  88. data/lib/countries/cache/locales/mt.json +1 -1
  89. data/lib/countries/cache/locales/my.json +1 -0
  90. data/lib/countries/cache/locales/na.json +1 -0
  91. data/lib/countries/cache/locales/nb.json +1 -1
  92. data/lib/countries/cache/locales/ne.json +1 -1
  93. data/lib/countries/cache/locales/nl.json +1 -1
  94. data/lib/countries/cache/locales/nn.json +1 -1
  95. data/lib/countries/cache/locales/nv.json +1 -0
  96. data/lib/countries/cache/locales/oc.json +1 -1
  97. data/lib/countries/cache/locales/or.json +1 -1
  98. data/lib/countries/cache/locales/pa.json +1 -1
  99. data/lib/countries/cache/locales/pi.json +1 -0
  100. data/lib/countries/cache/locales/pl.json +1 -1
  101. data/lib/countries/cache/locales/ps.json +1 -1
  102. data/lib/countries/cache/locales/pt-br.json +1 -0
  103. data/lib/countries/cache/locales/pt.json +1 -1
  104. data/lib/countries/cache/locales/ro.json +1 -1
  105. data/lib/countries/cache/locales/ru.json +1 -1
  106. data/lib/countries/cache/locales/rw.json +1 -1
  107. data/lib/countries/cache/locales/sc.json +1 -0
  108. data/lib/countries/cache/locales/sd.json +1 -0
  109. data/lib/countries/cache/locales/si.json +1 -1
  110. data/lib/countries/cache/locales/sk.json +1 -1
  111. data/lib/countries/cache/locales/sl.json +1 -1
  112. data/lib/countries/cache/locales/so.json +1 -1
  113. data/lib/countries/cache/locales/sq.json +1 -1
  114. data/lib/countries/cache/locales/sr.json +1 -1
  115. data/lib/countries/cache/locales/sv.json +1 -1
  116. data/lib/countries/cache/locales/sw.json +1 -1
  117. data/lib/countries/cache/locales/ta.json +1 -1
  118. data/lib/countries/cache/locales/te.json +1 -1
  119. data/lib/countries/cache/locales/tg.json +1 -0
  120. data/lib/countries/cache/locales/th.json +1 -1
  121. data/lib/countries/cache/locales/ti.json +1 -1
  122. data/lib/countries/cache/locales/tk.json +1 -1
  123. data/lib/countries/cache/locales/tl.json +1 -1
  124. data/lib/countries/cache/locales/tr.json +1 -1
  125. data/lib/countries/cache/locales/tt.json +1 -1
  126. data/lib/countries/cache/locales/ug.json +1 -1
  127. data/lib/countries/cache/locales/uk.json +1 -1
  128. data/lib/countries/cache/locales/ur.json +1 -0
  129. data/lib/countries/cache/locales/uz.json +1 -0
  130. data/lib/countries/cache/locales/ve.json +1 -1
  131. data/lib/countries/cache/locales/vi.json +1 -1
  132. data/lib/countries/cache/locales/wa.json +1 -1
  133. data/lib/countries/cache/locales/wo.json +1 -1
  134. data/lib/countries/cache/locales/xh.json +1 -1
  135. data/lib/countries/cache/locales/yo.json +1 -0
  136. data/lib/countries/cache/locales/zh-cn.json +1 -0
  137. data/lib/countries/cache/locales/zh-hk.json +1 -0
  138. data/lib/countries/cache/locales/zh-tw.json +1 -0
  139. data/lib/countries/cache/locales/zh.json +1 -1
  140. data/lib/countries/cache/locales/zu.json +1 -1
  141. data/lib/countries/configuration.rb +5 -0
  142. data/lib/countries/country.rb +11 -22
  143. data/lib/countries/country/class_methods.rb +51 -5
  144. data/lib/countries/country/currency_methods.rb +10 -0
  145. data/lib/countries/data.rb +4 -1
  146. data/lib/countries/data/countries/AD.yaml +1 -0
  147. data/lib/countries/data/countries/AE.yaml +5 -0
  148. data/lib/countries/data/countries/AF.yaml +1 -0
  149. data/lib/countries/data/countries/AG.yaml +1 -1
  150. data/lib/countries/data/countries/AI.yaml +1 -0
  151. data/lib/countries/data/countries/AL.yaml +2 -1
  152. data/lib/countries/data/countries/AM.yaml +1 -0
  153. data/lib/countries/data/countries/AQ.yaml +1 -1
  154. data/lib/countries/data/countries/AR.yaml +1 -0
  155. data/lib/countries/data/countries/AS.yaml +1 -0
  156. data/lib/countries/data/countries/AT.yaml +1 -0
  157. data/lib/countries/data/countries/AU.yaml +6 -0
  158. data/lib/countries/data/countries/AX.yaml +1 -0
  159. data/lib/countries/data/countries/AZ.yaml +1 -0
  160. data/lib/countries/data/countries/BA.yaml +1 -0
  161. data/lib/countries/data/countries/BB.yaml +1 -0
  162. data/lib/countries/data/countries/BD.yaml +1 -0
  163. data/lib/countries/data/countries/BE.yaml +1 -0
  164. data/lib/countries/data/countries/BG.yaml +1 -0
  165. data/lib/countries/data/countries/BH.yaml +2 -1
  166. data/lib/countries/data/countries/BL.yaml +1 -0
  167. data/lib/countries/data/countries/BM.yaml +1 -0
  168. data/lib/countries/data/countries/BN.yaml +2 -1
  169. data/lib/countries/data/countries/BO.yaml +1 -1
  170. data/lib/countries/data/countries/BQ.yaml +1 -1
  171. data/lib/countries/data/countries/BR.yaml +8 -0
  172. data/lib/countries/data/countries/BT.yaml +1 -0
  173. data/lib/countries/data/countries/BV.yaml +1 -1
  174. data/lib/countries/data/countries/BY.yaml +2 -1
  175. data/lib/countries/data/countries/BZ.yaml +1 -1
  176. data/lib/countries/data/countries/CA.yaml +1 -0
  177. data/lib/countries/data/countries/CC.yaml +1 -0
  178. data/lib/countries/data/countries/CH.yaml +3 -2
  179. data/lib/countries/data/countries/CL.yaml +6 -0
  180. data/lib/countries/data/countries/CN.yaml +1 -0
  181. data/lib/countries/data/countries/CO.yaml +1 -0
  182. data/lib/countries/data/countries/CR.yaml +1 -0
  183. data/lib/countries/data/countries/CU.yaml +1 -0
  184. data/lib/countries/data/countries/CV.yaml +1 -0
  185. data/lib/countries/data/countries/CW.yaml +1 -1
  186. data/lib/countries/data/countries/CX.yaml +1 -0
  187. data/lib/countries/data/countries/CY.yaml +1 -0
  188. data/lib/countries/data/countries/CZ.yaml +3 -1
  189. data/lib/countries/data/countries/DE.yaml +1 -0
  190. data/lib/countries/data/countries/DK.yaml +1 -0
  191. data/lib/countries/data/countries/DO.yaml +1 -0
  192. data/lib/countries/data/countries/DZ.yaml +1 -0
  193. data/lib/countries/data/countries/EC.yaml +1 -0
  194. data/lib/countries/data/countries/EE.yaml +1 -0
  195. data/lib/countries/data/countries/EG.yaml +1 -0
  196. data/lib/countries/data/countries/EH.yaml +1 -0
  197. data/lib/countries/data/countries/ES.yaml +1 -0
  198. data/lib/countries/data/countries/ET.yaml +1 -0
  199. data/lib/countries/data/countries/FI.yaml +1 -0
  200. data/lib/countries/data/countries/FK.yaml +1 -0
  201. data/lib/countries/data/countries/FM.yaml +1 -0
  202. data/lib/countries/data/countries/FO.yaml +1 -0
  203. data/lib/countries/data/countries/FR.yaml +1 -0
  204. data/lib/countries/data/countries/GA.yaml +1 -1
  205. data/lib/countries/data/countries/GB.yaml +6 -2
  206. data/lib/countries/data/countries/GE.yaml +1 -0
  207. data/lib/countries/data/countries/GF.yaml +1 -0
  208. data/lib/countries/data/countries/GG.yaml +1 -0
  209. data/lib/countries/data/countries/GI.yaml +1 -0
  210. data/lib/countries/data/countries/GL.yaml +2 -1
  211. data/lib/countries/data/countries/GN.yaml +2 -1
  212. data/lib/countries/data/countries/GP.yaml +1 -0
  213. data/lib/countries/data/countries/GR.yaml +3 -2
  214. data/lib/countries/data/countries/GS.yaml +1 -0
  215. data/lib/countries/data/countries/GT.yaml +1 -0
  216. data/lib/countries/data/countries/GU.yaml +1 -0
  217. data/lib/countries/data/countries/GW.yaml +1 -0
  218. data/lib/countries/data/countries/HM.yaml +2 -1
  219. data/lib/countries/data/countries/HN.yaml +1 -0
  220. data/lib/countries/data/countries/HR.yaml +1 -0
  221. data/lib/countries/data/countries/HT.yaml +2 -1
  222. data/lib/countries/data/countries/HU.yaml +1 -0
  223. data/lib/countries/data/countries/ID.yaml +1 -0
  224. data/lib/countries/data/countries/IE.yaml +2 -1
  225. data/lib/countries/data/countries/IL.yaml +1 -0
  226. data/lib/countries/data/countries/IM.yaml +1 -0
  227. data/lib/countries/data/countries/IN.yaml +1 -0
  228. data/lib/countries/data/countries/IO.yaml +2 -1
  229. data/lib/countries/data/countries/IQ.yaml +1 -0
  230. data/lib/countries/data/countries/IR.yaml +1 -0
  231. data/lib/countries/data/countries/IS.yaml +7 -0
  232. data/lib/countries/data/countries/IT.yaml +1 -0
  233. data/lib/countries/data/countries/JE.yaml +1 -0
  234. data/lib/countries/data/countries/JO.yaml +1 -0
  235. data/lib/countries/data/countries/JP.yaml +1 -0
  236. data/lib/countries/data/countries/KE.yaml +2 -1
  237. data/lib/countries/data/countries/KG.yaml +1 -0
  238. data/lib/countries/data/countries/KH.yaml +1 -0
  239. data/lib/countries/data/countries/KR.yaml +1 -0
  240. data/lib/countries/data/countries/KW.yaml +1 -0
  241. data/lib/countries/data/countries/KY.yaml +1 -0
  242. data/lib/countries/data/countries/KZ.yaml +1 -0
  243. data/lib/countries/data/countries/LA.yaml +1 -0
  244. data/lib/countries/data/countries/LB.yaml +1 -0
  245. data/lib/countries/data/countries/LI.yaml +1 -0
  246. data/lib/countries/data/countries/LK.yaml +1 -0
  247. data/lib/countries/data/countries/LR.yaml +1 -0
  248. data/lib/countries/data/countries/LS.yaml +1 -0
  249. data/lib/countries/data/countries/LT.yaml +2 -0
  250. data/lib/countries/data/countries/LU.yaml +1 -0
  251. data/lib/countries/data/countries/LV.yaml +7 -0
  252. data/lib/countries/data/countries/LY.yaml +1 -1
  253. data/lib/countries/data/countries/MA.yaml +1 -0
  254. data/lib/countries/data/countries/MC.yaml +1 -0
  255. data/lib/countries/data/countries/MD.yaml +1 -0
  256. data/lib/countries/data/countries/ME.yaml +1 -0
  257. data/lib/countries/data/countries/MF.yaml +1 -0
  258. data/lib/countries/data/countries/MG.yaml +1 -0
  259. data/lib/countries/data/countries/MH.yaml +1 -0
  260. data/lib/countries/data/countries/MK.yaml +3 -1
  261. data/lib/countries/data/countries/MM.yaml +1 -0
  262. data/lib/countries/data/countries/MN.yaml +1 -0
  263. data/lib/countries/data/countries/MP.yaml +1 -0
  264. data/lib/countries/data/countries/MQ.yaml +1 -0
  265. data/lib/countries/data/countries/MR.yaml +1 -1
  266. data/lib/countries/data/countries/MT.yaml +1 -0
  267. data/lib/countries/data/countries/MU.yaml +2 -1
  268. data/lib/countries/data/countries/MV.yaml +1 -0
  269. data/lib/countries/data/countries/MX.yaml +6 -0
  270. data/lib/countries/data/countries/MY.yaml +1 -0
  271. data/lib/countries/data/countries/MZ.yaml +1 -0
  272. data/lib/countries/data/countries/NA.yaml +1 -0
  273. data/lib/countries/data/countries/NC.yaml +2 -1
  274. data/lib/countries/data/countries/NE.yaml +1 -0
  275. data/lib/countries/data/countries/NF.yaml +1 -0
  276. data/lib/countries/data/countries/NG.yaml +7 -1
  277. data/lib/countries/data/countries/NI.yaml +1 -0
  278. data/lib/countries/data/countries/NL.yaml +2 -0
  279. data/lib/countries/data/countries/NO.yaml +6 -0
  280. data/lib/countries/data/countries/NP.yaml +2 -1
  281. data/lib/countries/data/countries/NZ.yaml +8 -1
  282. data/lib/countries/data/countries/OM.yaml +1 -0
  283. data/lib/countries/data/countries/PE.yaml +1 -0
  284. data/lib/countries/data/countries/PF.yaml +1 -0
  285. data/lib/countries/data/countries/PG.yaml +1 -0
  286. data/lib/countries/data/countries/PH.yaml +6 -0
  287. data/lib/countries/data/countries/PK.yaml +1 -0
  288. data/lib/countries/data/countries/PL.yaml +1 -0
  289. data/lib/countries/data/countries/PM.yaml +1 -0
  290. data/lib/countries/data/countries/PN.yaml +2 -1
  291. data/lib/countries/data/countries/PR.yaml +1 -0
  292. data/lib/countries/data/countries/PS.yaml +1 -1
  293. data/lib/countries/data/countries/PT.yaml +1 -0
  294. data/lib/countries/data/countries/PW.yaml +1 -0
  295. data/lib/countries/data/countries/PY.yaml +1 -0
  296. data/lib/countries/data/countries/RE.yaml +1 -0
  297. data/lib/countries/data/countries/RO.yaml +1 -0
  298. data/lib/countries/data/countries/RS.yaml +1 -0
  299. data/lib/countries/data/countries/RU.yaml +1 -0
  300. data/lib/countries/data/countries/SA.yaml +2 -1
  301. data/lib/countries/data/countries/SB.yaml +1 -1
  302. data/lib/countries/data/countries/SD.yaml +1 -0
  303. data/lib/countries/data/countries/SE.yaml +1 -0
  304. data/lib/countries/data/countries/SG.yaml +2 -1
  305. data/lib/countries/data/countries/SH.yaml +1 -0
  306. data/lib/countries/data/countries/SI.yaml +1 -0
  307. data/lib/countries/data/countries/SJ.yaml +1 -0
  308. data/lib/countries/data/countries/SK.yaml +1 -0
  309. data/lib/countries/data/countries/SM.yaml +1 -0
  310. data/lib/countries/data/countries/SN.yaml +1 -0
  311. data/lib/countries/data/countries/SO.yaml +2 -1
  312. data/lib/countries/data/countries/SS.yaml +2 -2
  313. data/lib/countries/data/countries/SV.yaml +1 -0
  314. data/lib/countries/data/countries/SX.yaml +1 -1
  315. data/lib/countries/data/countries/SZ.yaml +2 -1
  316. data/lib/countries/data/countries/TC.yaml +1 -0
  317. data/lib/countries/data/countries/TD.yaml +1 -1
  318. data/lib/countries/data/countries/TG.yaml +1 -1
  319. data/lib/countries/data/countries/TH.yaml +7 -0
  320. data/lib/countries/data/countries/TJ.yaml +1 -0
  321. data/lib/countries/data/countries/TM.yaml +1 -0
  322. data/lib/countries/data/countries/TN.yaml +1 -0
  323. data/lib/countries/data/countries/TR.yaml +1 -0
  324. data/lib/countries/data/countries/TV.yaml +1 -1
  325. data/lib/countries/data/countries/TW.yaml +2 -1
  326. data/lib/countries/data/countries/TZ.yaml +2 -1
  327. data/lib/countries/data/countries/UA.yaml +7 -0
  328. data/lib/countries/data/countries/UM.yaml +2 -1
  329. data/lib/countries/data/countries/US.yaml +2 -0
  330. data/lib/countries/data/countries/UY.yaml +1 -0
  331. data/lib/countries/data/countries/UZ.yaml +1 -0
  332. data/lib/countries/data/countries/VA.yaml +1 -0
  333. data/lib/countries/data/countries/VC.yaml +1 -0
  334. data/lib/countries/data/countries/VE.yaml +2 -1
  335. data/lib/countries/data/countries/VG.yaml +2 -1
  336. data/lib/countries/data/countries/VI.yaml +1 -0
  337. data/lib/countries/data/countries/VN.yaml +7 -0
  338. data/lib/countries/data/countries/WF.yaml +1 -0
  339. data/lib/countries/data/countries/WS.yaml +2 -2
  340. data/lib/countries/data/countries/YT.yaml +1 -0
  341. data/lib/countries/data/countries/ZA.yaml +3 -2
  342. data/lib/countries/data/countries/ZM.yaml +1 -0
  343. data/lib/countries/data/subdivisions/AD.yaml +1 -1
  344. data/lib/countries/data/subdivisions/AE.yaml +346 -7
  345. data/lib/countries/data/subdivisions/AF.yaml +1571 -11
  346. data/lib/countries/data/subdivisions/AG.yaml +282 -2
  347. data/lib/countries/data/subdivisions/AI.yaml +183 -0
  348. data/lib/countries/data/subdivisions/AL.yaml +503 -1
  349. data/lib/countries/data/subdivisions/AM.yaml +539 -12
  350. data/lib/countries/data/subdivisions/AO.yaml +767 -2
  351. data/lib/countries/data/subdivisions/AR.yaml +1167 -2
  352. data/lib/countries/data/subdivisions/AS.yaml +66 -0
  353. data/lib/countries/data/subdivisions/AT.yaml +500 -6
  354. data/lib/countries/data/subdivisions/AU.yaml +445 -0
  355. data/lib/countries/data/subdivisions/AX.yaml +40 -0
  356. data/lib/countries/data/subdivisions/AZ.yaml +2836 -57
  357. data/lib/countries/data/subdivisions/BA.yaml +167 -1
  358. data/lib/countries/data/subdivisions/BB.yaml +377 -2
  359. data/lib/countries/data/subdivisions/BD.yaml +1344 -66
  360. data/lib/countries/data/subdivisions/BE.yaml +653 -10
  361. data/lib/countries/data/subdivisions/BF.yaml +1841 -1
  362. data/lib/countries/data/subdivisions/BG.yaml +1307 -6
  363. data/lib/countries/data/subdivisions/BH.yaml +102 -5
  364. data/lib/countries/data/subdivisions/BI.yaml +647 -0
  365. data/lib/countries/data/subdivisions/BJ.yaml +441 -0
  366. data/lib/countries/data/subdivisions/BM.yaml +144 -0
  367. data/lib/countries/data/subdivisions/BN.yaml +154 -0
  368. data/lib/countries/data/subdivisions/BO.yaml +387 -1
  369. data/lib/countries/data/subdivisions/BQ.yaml +148 -0
  370. data/lib/countries/data/subdivisions/BR.yaml +1412 -1
  371. data/lib/countries/data/subdivisions/BS.yaml +1094 -0
  372. data/lib/countries/data/subdivisions/BT.yaml +707 -6
  373. data/lib/countries/data/subdivisions/BW.yaml +614 -3
  374. data/lib/countries/data/subdivisions/BY.yaml +375 -6
  375. data/lib/countries/data/subdivisions/BZ.yaml +200 -0
  376. data/lib/countries/data/subdivisions/CA.yaml +721 -0
  377. data/lib/countries/data/subdivisions/CD.yaml +697 -4
  378. data/lib/countries/data/subdivisions/CF.yaml +637 -1
  379. data/lib/countries/data/subdivisions/CG.yaml +401 -0
  380. data/lib/countries/data/subdivisions/CH.yaml +1327 -26
  381. data/lib/countries/data/subdivisions/CI.yaml +323 -21
  382. data/lib/countries/data/subdivisions/CK.yaml +144 -0
  383. data/lib/countries/data/subdivisions/CL.yaml +693 -5
  384. data/lib/countries/data/subdivisions/CM.yaml +375 -3
  385. data/lib/countries/data/subdivisions/CN.yaml +1703 -39
  386. data/lib/countries/data/subdivisions/CO.yaml +1395 -2
  387. data/lib/countries/data/subdivisions/CR.yaml +260 -0
  388. data/lib/countries/data/subdivisions/CU.yaml +627 -15
  389. data/lib/countries/data/subdivisions/CV.yaml +741 -1
  390. data/lib/countries/data/subdivisions/CY.yaml +220 -6
  391. data/lib/countries/data/subdivisions/CZ.yaml +3049 -14
  392. data/lib/countries/data/subdivisions/DE.yaml +928 -8
  393. data/lib/countries/data/subdivisions/DJ.yaml +253 -0
  394. data/lib/countries/data/subdivisions/DK.yaml +230 -6
  395. data/lib/countries/data/subdivisions/DM.yaml +333 -2
  396. data/lib/countries/data/subdivisions/DO.yaml +1047 -8
  397. data/lib/countries/data/subdivisions/DZ.yaml +1968 -6
  398. data/lib/countries/data/subdivisions/EC.yaml +929 -24
  399. data/lib/countries/data/subdivisions/EE.yaml +713 -15
  400. data/lib/countries/data/subdivisions/EG.yaml +1126 -25
  401. data/lib/countries/data/subdivisions/ER.yaml +230 -3
  402. data/lib/countries/data/subdivisions/ES.yaml +3158 -94
  403. data/lib/countries/data/subdivisions/ET.yaml +514 -8
  404. data/lib/countries/data/subdivisions/FI.yaml +827 -0
  405. data/lib/countries/data/subdivisions/FJ.yaml +396 -0
  406. data/lib/countries/data/subdivisions/FM.yaml +131 -0
  407. data/lib/countries/data/subdivisions/FO.yaml +79 -0
  408. data/lib/countries/data/subdivisions/FR.yaml +5591 -97
  409. data/lib/countries/data/subdivisions/GA.yaml +349 -0
  410. data/lib/countries/data/subdivisions/GB.yaml +7050 -34
  411. data/lib/countries/data/subdivisions/GD.yaml +227 -1
  412. data/lib/countries/data/subdivisions/GE.yaml +572 -2
  413. data/lib/countries/data/subdivisions/GG.yaml +144 -0
  414. data/lib/countries/data/subdivisions/GH.yaml +371 -0
  415. data/lib/countries/data/subdivisions/GL.yaml +173 -0
  416. data/lib/countries/data/subdivisions/GM.yaml +250 -5
  417. data/lib/countries/data/subdivisions/GN.yaml +1143 -1
  418. data/lib/countries/data/subdivisions/GQ.yaml +301 -4
  419. data/lib/countries/data/subdivisions/GR.yaml +654 -28
  420. data/lib/countries/data/subdivisions/GT.yaml +875 -0
  421. data/lib/countries/data/subdivisions/GU.yaml +248 -0
  422. data/lib/countries/data/subdivisions/GW.yaml +353 -0
  423. data/lib/countries/data/subdivisions/GY.yaml +315 -0
  424. data/lib/countries/data/subdivisions/HK.yaml +235 -0
  425. data/lib/countries/data/subdivisions/HN.yaml +710 -1
  426. data/lib/countries/data/subdivisions/HR.yaml +967 -23
  427. data/lib/countries/data/subdivisions/HT.yaml +329 -1
  428. data/lib/countries/data/subdivisions/HU.yaml +2067 -1
  429. data/lib/countries/data/subdivisions/ID.yaml +1840 -21
  430. data/lib/countries/data/subdivisions/IE.yaml +1424 -51
  431. data/lib/countries/data/subdivisions/IL.yaml +256 -6
  432. data/lib/countries/data/subdivisions/IM.yaml +313 -0
  433. data/lib/countries/data/subdivisions/IN.yaml +2044 -2
  434. data/lib/countries/data/subdivisions/IQ.yaml +760 -12
  435. data/lib/countries/data/subdivisions/IR.yaml +1434 -12
  436. data/lib/countries/data/subdivisions/IS.yaml +370 -8
  437. data/lib/countries/data/subdivisions/IT.yaml +6197 -16
  438. data/lib/countries/data/subdivisions/JE.yaml +157 -0
  439. data/lib/countries/data/subdivisions/JM.yaml +461 -2
  440. data/lib/countries/data/subdivisions/JO.yaml +453 -8
  441. data/lib/countries/data/subdivisions/JP.yaml +2523 -54
  442. data/lib/countries/data/subdivisions/KE.yaml +698 -0
  443. data/lib/countries/data/subdivisions/KG.yaml +422 -3
  444. data/lib/countries/data/subdivisions/KH.yaml +871 -25
  445. data/lib/countries/data/subdivisions/KI.yaml +100 -0
  446. data/lib/countries/data/subdivisions/KM.yaml +134 -0
  447. data/lib/countries/data/subdivisions/KN.yaml +499 -2
  448. data/lib/countries/data/subdivisions/KP.yaml +474 -0
  449. data/lib/countries/data/subdivisions/KR.yaml +816 -16
  450. data/lib/countries/data/subdivisions/KW.yaml +184 -3
  451. data/lib/countries/data/subdivisions/KZ.yaml +827 -14
  452. data/lib/countries/data/subdivisions/LA.yaml +630 -18
  453. data/lib/countries/data/subdivisions/LB.yaml +245 -5
  454. data/lib/countries/data/subdivisions/LC.yaml +304 -0
  455. data/lib/countries/data/subdivisions/LI.yaml +349 -2
  456. data/lib/countries/data/subdivisions/LK.yaml +955 -3
  457. data/lib/countries/data/subdivisions/LR.yaml +565 -0
  458. data/lib/countries/data/subdivisions/LS.yaml +362 -2
  459. data/lib/countries/data/subdivisions/LT.yaml +1563 -10
  460. data/lib/countries/data/subdivisions/LU.yaml +322 -3
  461. data/lib/countries/data/subdivisions/LV.yaml +4937 -3
  462. data/lib/countries/data/subdivisions/LY.yaml +836 -203
  463. data/lib/countries/data/subdivisions/MA.yaml +1803 -17
  464. data/lib/countries/data/subdivisions/MC.yaml +234 -0
  465. data/lib/countries/data/subdivisions/MD.yaml +1570 -5
  466. data/lib/countries/data/subdivisions/ME.yaml +669 -4
  467. data/lib/countries/data/subdivisions/MG.yaml +148 -0
  468. data/lib/countries/data/subdivisions/MH.yaml +543 -21
  469. data/lib/countries/data/subdivisions/MK.yaml +2548 -0
  470. data/lib/countries/data/subdivisions/ML.yaml +363 -0
  471. data/lib/countries/data/subdivisions/MM.yaml +534 -0
  472. data/lib/countries/data/subdivisions/MN.yaml +935 -17
  473. data/lib/countries/data/subdivisions/MP.yaml +53 -0
  474. data/lib/countries/data/subdivisions/MR.yaml +428 -5
  475. data/lib/countries/data/subdivisions/MS.yaml +40 -0
  476. data/lib/countries/data/subdivisions/MT.yaml +2534 -13
  477. data/lib/countries/data/subdivisions/MU.yaml +574 -7
  478. data/lib/countries/data/subdivisions/MV.yaml +719 -5
  479. data/lib/countries/data/subdivisions/MW.yaml +1056 -1
  480. data/lib/countries/data/subdivisions/MX.yaml +1641 -2
  481. data/lib/countries/data/subdivisions/MY.yaml +708 -7
  482. data/lib/countries/data/subdivisions/MZ.yaml +450 -3
  483. data/lib/countries/data/subdivisions/NA.yaml +483 -0
  484. data/lib/countries/data/subdivisions/NC.yaml +40 -0
  485. data/lib/countries/data/subdivisions/NE.yaml +289 -0
  486. data/lib/countries/data/subdivisions/NG.yaml +1428 -2
  487. data/lib/countries/data/subdivisions/NI.yaml +660 -2
  488. data/lib/countries/data/subdivisions/NL.yaml +803 -3
  489. data/lib/countries/data/subdivisions/NO.yaml +1075 -0
  490. data/lib/countries/data/subdivisions/NP.yaml +572 -1
  491. data/lib/countries/data/subdivisions/NR.yaml +539 -2
  492. data/lib/countries/data/subdivisions/NZ.yaml +632 -2
  493. data/lib/countries/data/subdivisions/OM.yaml +396 -3
  494. data/lib/countries/data/subdivisions/PA.yaml +514 -13
  495. data/lib/countries/data/subdivisions/PE.yaml +1022 -4
  496. data/lib/countries/data/subdivisions/PF.yaml +66 -0
  497. data/lib/countries/data/subdivisions/PG.yaml +788 -3
  498. data/lib/countries/data/subdivisions/PH.yaml +3055 -7
  499. data/lib/countries/data/subdivisions/PK.yaml +357 -2
  500. data/lib/countries/data/subdivisions/PL.yaml +807 -14
  501. data/lib/countries/data/subdivisions/PM.yaml +27 -0
  502. data/lib/countries/data/subdivisions/PS.yaml +490 -0
  503. data/lib/countries/data/subdivisions/PT.yaml +741 -4
  504. data/lib/countries/data/subdivisions/PW.yaml +532 -1
  505. data/lib/countries/data/subdivisions/PY.yaml +687 -0
  506. data/lib/countries/data/subdivisions/QA.yaml +269 -3
  507. data/lib/countries/data/subdivisions/RO.yaml +1954 -21
  508. data/lib/countries/data/subdivisions/RS.yaml +1148 -14
  509. data/lib/countries/data/subdivisions/RU.yaml +4535 -20
  510. data/lib/countries/data/subdivisions/RW.yaml +220 -5
  511. data/lib/countries/data/subdivisions/SA.yaml +516 -19
  512. data/lib/countries/data/subdivisions/SB.yaml +363 -2
  513. data/lib/countries/data/subdivisions/SC.yaml +780 -6
  514. data/lib/countries/data/subdivisions/SD.yaml +805 -302
  515. data/lib/countries/data/subdivisions/SE.yaml +1027 -21
  516. data/lib/countries/data/subdivisions/SG.yaml +36 -0
  517. data/lib/countries/data/subdivisions/SH.yaml +115 -1
  518. data/lib/countries/data/subdivisions/SI.yaml +7067 -77
  519. data/lib/countries/data/subdivisions/SJ.yaml +27 -0
  520. data/lib/countries/data/subdivisions/SK.yaml +395 -8
  521. data/lib/countries/data/subdivisions/SL.yaml +143 -1
  522. data/lib/countries/data/subdivisions/SM.yaml +400 -2
  523. data/lib/countries/data/subdivisions/SN.yaml +506 -0
  524. data/lib/countries/data/subdivisions/SO.yaml +574 -7
  525. data/lib/countries/data/subdivisions/SR.yaml +334 -0
  526. data/lib/countries/data/subdivisions/SS.yaml +428 -0
  527. data/lib/countries/data/subdivisions/ST.yaml +14 -0
  528. data/lib/countries/data/subdivisions/SV.yaml +488 -0
  529. data/lib/countries/data/subdivisions/SY.yaml +569 -16
  530. data/lib/countries/data/subdivisions/SZ.yaml +144 -0
  531. data/lib/countries/data/subdivisions/TD.yaml +798 -6
  532. data/lib/countries/data/subdivisions/TG.yaml +182 -3
  533. data/lib/countries/data/subdivisions/TH.yaml +2935 -5
  534. data/lib/countries/data/subdivisions/TJ.yaml +233 -0
  535. data/lib/countries/data/subdivisions/TK.yaml +40 -0
  536. data/lib/countries/data/subdivisions/TL.yaml +450 -3
  537. data/lib/countries/data/subdivisions/TM.yaml +265 -1
  538. data/lib/countries/data/subdivisions/TN.yaml +844 -3
  539. data/lib/countries/data/subdivisions/TO.yaml +177 -3
  540. data/lib/countries/data/subdivisions/TR.yaml +3829 -6
  541. data/lib/countries/data/subdivisions/TT.yaml +522 -0
  542. data/lib/countries/data/subdivisions/TV.yaml +228 -0
  543. data/lib/countries/data/subdivisions/TW.yaml +761 -13
  544. data/lib/countries/data/subdivisions/TZ.yaml +1160 -7
  545. data/lib/countries/data/subdivisions/UA.yaml +1454 -28
  546. data/lib/countries/data/subdivisions/UG.yaml +3741 -20
  547. data/lib/countries/data/subdivisions/UM.yaml +486 -1
  548. data/lib/countries/data/subdivisions/US.yaml +3028 -3
  549. data/lib/countries/data/subdivisions/UY.yaml +754 -2
  550. data/lib/countries/data/subdivisions/UZ.yaml +592 -7
  551. data/lib/countries/data/subdivisions/VC.yaml +176 -0
  552. data/lib/countries/data/subdivisions/VE.yaml +1055 -2
  553. data/lib/countries/data/subdivisions/VI.yaml +40 -0
  554. data/lib/countries/data/subdivisions/VN.yaml +2444 -55
  555. data/lib/countries/data/subdivisions/VU.yaml +225 -3
  556. data/lib/countries/data/subdivisions/WF.yaml +138 -0
  557. data/lib/countries/data/subdivisions/WS.yaml +371 -6
  558. data/lib/countries/data/subdivisions/YE.yaml +857 -14
  559. data/lib/countries/data/subdivisions/YT.yaml +222 -0
  560. data/lib/countries/data/subdivisions/ZA.yaml +459 -3
  561. data/lib/countries/data/subdivisions/ZM.yaml +393 -2
  562. data/lib/countries/data/subdivisions/ZW.yaml +341 -0
  563. data/lib/countries/data/translation_corrections.yaml +8 -0
  564. data/lib/countries/iso3166.rb +1 -1
  565. data/lib/countries/sources.rb +6 -0
  566. data/lib/countries/sources/cldr/downloader.rb +35 -0
  567. data/lib/countries/sources/cldr/subdivision.rb +34 -0
  568. data/lib/countries/sources/cldr/subdivision_updater.rb +34 -0
  569. data/lib/countries/sources/local/cached_loader.rb +27 -0
  570. data/lib/countries/sources/local/subdivision.rb +32 -0
  571. data/lib/countries/structure.rb +1 -0
  572. data/lib/countries/tasks/geocoding.rake +4 -3
  573. data/lib/countries/tasks/postal_codes.rake +48 -0
  574. data/lib/countries/version.rb +1 -1
  575. data/spec/00_global_spec.rb +56 -0
  576. data/spec/configuration_spec.rb +1 -0
  577. data/spec/country_spec.rb +104 -9
  578. data/spec/perf_spec.rb +1 -1
  579. data/spec/subdivision_spec.rb +14 -0
  580. metadata +99 -27
  581. 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
@@ -42,6 +42,7 @@ module ISO3166
42
42
  'languages_spoken' => [],
43
43
  'translations' => {},
44
44
  'postal_code' => nil,
45
+ 'postal_code_format' => nil,
45
46
  'region' => nil,
46
47
  'unofficial_names' => [],
47
48
  'start_of_week' => 'monday',
@@ -32,7 +32,7 @@ def country_codes
32
32
  end
33
33
 
34
34
  namespace :geocode do
35
- desc 'Retrieve and store subdivisions coordinates'
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
- require 'countries'
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['latitude'] }.each do |code, 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
@@ -1,3 +1,3 @@
1
1
  module Countries
2
- VERSION = '2.1.2'.freeze
2
+ VERSION = '3.1.0'.freeze
3
3
  end
@@ -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
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
+ require 'i18n'
3
4
 
4
5
  describe 'ISO3166.configuration' do
5
6
  it 'has a configuration' do
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
- ireland = ISO3166::Country.search('IE')
88
- expect(ireland.postal_code).to eq(false)
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('Afghanistan')
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('Afghanistan')
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('AF')
386
- expect(countries.first).to eq(%w(AF Afghanistan))
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('AF')
396
- expect(countries.first).to eq(%w(AF Afghanistan))
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|