countries 1.2.2 β†’ 4.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (645) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/tests.yml +39 -0
  3. data/.gitignore +4 -1
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +52 -0
  6. data/CHANGELOG.md +570 -1
  7. data/Gemfile +7 -0
  8. data/LICENSE +3 -1
  9. data/README.markdown +261 -136
  10. data/Rakefile +44 -74
  11. data/bin/console +14 -0
  12. data/countries.gemspec +15 -9
  13. data/lib/countries/cache/countries.json +1 -0
  14. data/lib/countries/cache/locales/ab.json +1 -0
  15. data/lib/countries/cache/locales/af.json +1 -0
  16. data/lib/countries/cache/locales/ak.json +1 -0
  17. data/lib/countries/cache/locales/am.json +1 -0
  18. data/lib/countries/cache/locales/an.json +1 -0
  19. data/lib/countries/cache/locales/ar.json +1 -0
  20. data/lib/countries/cache/locales/as.json +1 -0
  21. data/lib/countries/cache/locales/ay.json +1 -0
  22. data/lib/countries/cache/locales/az.json +1 -0
  23. data/lib/countries/cache/locales/ba.json +1 -0
  24. data/lib/countries/cache/locales/be.json +1 -0
  25. data/lib/countries/cache/locales/bg.json +1 -0
  26. data/lib/countries/cache/locales/bi.json +1 -0
  27. data/lib/countries/cache/locales/bn-in.json +1 -0
  28. data/lib/countries/cache/locales/bn.json +1 -0
  29. data/lib/countries/cache/locales/br.json +1 -0
  30. data/lib/countries/cache/locales/bs.json +1 -0
  31. data/lib/countries/cache/locales/ca.json +1 -0
  32. data/lib/countries/cache/locales/ce.json +1 -0
  33. data/lib/countries/cache/locales/ch.json +1 -0
  34. data/lib/countries/cache/locales/cs.json +1 -0
  35. data/lib/countries/cache/locales/cv.json +1 -0
  36. data/lib/countries/cache/locales/cy.json +1 -0
  37. data/lib/countries/cache/locales/da.json +1 -0
  38. data/lib/countries/cache/locales/de.json +1 -0
  39. data/lib/countries/cache/locales/dv.json +1 -0
  40. data/lib/countries/cache/locales/dz.json +1 -0
  41. data/lib/countries/cache/locales/ee.json +1 -0
  42. data/lib/countries/cache/locales/el.json +1 -0
  43. data/lib/countries/cache/locales/en.json +1 -0
  44. data/lib/countries/cache/locales/eo.json +1 -0
  45. data/lib/countries/cache/locales/es.json +1 -0
  46. data/lib/countries/cache/locales/et.json +1 -0
  47. data/lib/countries/cache/locales/eu.json +1 -0
  48. data/lib/countries/cache/locales/fa.json +1 -0
  49. data/lib/countries/cache/locales/ff.json +1 -0
  50. data/lib/countries/cache/locales/fi.json +1 -0
  51. data/lib/countries/cache/locales/fo.json +1 -0
  52. data/lib/countries/cache/locales/fr.json +1 -0
  53. data/lib/countries/cache/locales/fy.json +1 -0
  54. data/lib/countries/cache/locales/ga.json +1 -0
  55. data/lib/countries/cache/locales/gl.json +1 -0
  56. data/lib/countries/cache/locales/gn.json +1 -0
  57. data/lib/countries/cache/locales/gu.json +1 -0
  58. data/lib/countries/cache/locales/gv.json +1 -0
  59. data/lib/countries/cache/locales/ha.json +1 -0
  60. data/lib/countries/cache/locales/he.json +1 -0
  61. data/lib/countries/cache/locales/hi.json +1 -0
  62. data/lib/countries/cache/locales/hr.json +1 -0
  63. data/lib/countries/cache/locales/ht.json +1 -0
  64. data/lib/countries/cache/locales/hu.json +1 -0
  65. data/lib/countries/cache/locales/hy.json +1 -0
  66. data/lib/countries/cache/locales/ia.json +1 -0
  67. data/lib/countries/cache/locales/id.json +1 -0
  68. data/lib/countries/cache/locales/io.json +1 -0
  69. data/lib/countries/cache/locales/is.json +1 -0
  70. data/lib/countries/cache/locales/it.json +1 -0
  71. data/lib/countries/cache/locales/iu.json +1 -0
  72. data/lib/countries/cache/locales/ja.json +1 -0
  73. data/lib/countries/cache/locales/ka.json +1 -0
  74. data/lib/countries/cache/locales/ki.json +1 -0
  75. data/lib/countries/cache/locales/kk.json +1 -0
  76. data/lib/countries/cache/locales/kl.json +1 -0
  77. data/lib/countries/cache/locales/km.json +1 -0
  78. data/lib/countries/cache/locales/kn.json +1 -0
  79. data/lib/countries/cache/locales/ko.json +1 -0
  80. data/lib/countries/cache/locales/ku.json +1 -0
  81. data/lib/countries/cache/locales/kv.json +1 -0
  82. data/lib/countries/cache/locales/kw.json +1 -0
  83. data/lib/countries/cache/locales/ky.json +1 -0
  84. data/lib/countries/cache/locales/lo.json +1 -0
  85. data/lib/countries/cache/locales/lt.json +1 -0
  86. data/lib/countries/cache/locales/lv.json +1 -0
  87. data/lib/countries/cache/locales/mi.json +1 -0
  88. data/lib/countries/cache/locales/mk.json +1 -0
  89. data/lib/countries/cache/locales/ml.json +1 -0
  90. data/lib/countries/cache/locales/mn.json +1 -0
  91. data/lib/countries/cache/locales/mr.json +1 -0
  92. data/lib/countries/cache/locales/ms.json +1 -0
  93. data/lib/countries/cache/locales/mt.json +1 -0
  94. data/lib/countries/cache/locales/my.json +1 -0
  95. data/lib/countries/cache/locales/na.json +1 -0
  96. data/lib/countries/cache/locales/nb.json +1 -0
  97. data/lib/countries/cache/locales/ne.json +1 -0
  98. data/lib/countries/cache/locales/nl.json +1 -0
  99. data/lib/countries/cache/locales/nn.json +1 -0
  100. data/lib/countries/cache/locales/nv.json +1 -0
  101. data/lib/countries/cache/locales/oc.json +1 -0
  102. data/lib/countries/cache/locales/or.json +1 -0
  103. data/lib/countries/cache/locales/pa.json +1 -0
  104. data/lib/countries/cache/locales/pi.json +1 -0
  105. data/lib/countries/cache/locales/pl.json +1 -0
  106. data/lib/countries/cache/locales/ps.json +1 -0
  107. data/lib/countries/cache/locales/pt-br.json +1 -0
  108. data/lib/countries/cache/locales/pt.json +1 -0
  109. data/lib/countries/cache/locales/ro.json +1 -0
  110. data/lib/countries/cache/locales/ru.json +1 -0
  111. data/lib/countries/cache/locales/rw.json +1 -0
  112. data/lib/countries/cache/locales/sc.json +1 -0
  113. data/lib/countries/cache/locales/sd.json +1 -0
  114. data/lib/countries/cache/locales/si.json +1 -0
  115. data/lib/countries/cache/locales/sk.json +1 -0
  116. data/lib/countries/cache/locales/sl.json +1 -0
  117. data/lib/countries/cache/locales/so.json +1 -0
  118. data/lib/countries/cache/locales/sq.json +1 -0
  119. data/lib/countries/cache/locales/sr.json +1 -0
  120. data/lib/countries/cache/locales/sv.json +1 -0
  121. data/lib/countries/cache/locales/sw.json +1 -0
  122. data/lib/countries/cache/locales/ta.json +1 -0
  123. data/lib/countries/cache/locales/te.json +1 -0
  124. data/lib/countries/cache/locales/tg.json +1 -0
  125. data/lib/countries/cache/locales/th.json +1 -0
  126. data/lib/countries/cache/locales/ti.json +1 -0
  127. data/lib/countries/cache/locales/tk.json +1 -0
  128. data/lib/countries/cache/locales/tl.json +1 -0
  129. data/lib/countries/cache/locales/tr.json +1 -0
  130. data/lib/countries/cache/locales/tt.json +1 -0
  131. data/lib/countries/cache/locales/ug.json +1 -0
  132. data/lib/countries/cache/locales/uk.json +1 -0
  133. data/lib/countries/cache/locales/ur.json +1 -0
  134. data/lib/countries/cache/locales/uz.json +1 -0
  135. data/lib/countries/cache/locales/ve.json +1 -0
  136. data/lib/countries/cache/locales/vi.json +1 -0
  137. data/lib/countries/cache/locales/wa.json +1 -0
  138. data/lib/countries/cache/locales/wo.json +1 -0
  139. data/lib/countries/cache/locales/xh.json +1 -0
  140. data/lib/countries/cache/locales/yo.json +1 -0
  141. data/lib/countries/cache/locales/zh-cn.json +1 -0
  142. data/lib/countries/cache/locales/zh-hk.json +1 -0
  143. data/lib/countries/cache/locales/zh-tw.json +1 -0
  144. data/lib/countries/cache/locales/zh.json +1 -0
  145. data/lib/countries/cache/locales/zu.json +1 -0
  146. data/lib/countries/configuration.rb +57 -0
  147. data/lib/countries/country/class_methods.rb +196 -0
  148. data/lib/countries/country/currency_methods.rb +13 -0
  149. data/lib/countries/country/emoji.rb +42 -0
  150. data/lib/countries/country.rb +214 -158
  151. data/lib/countries/data/countries/AD.yaml +32 -21
  152. data/lib/countries/data/countries/AE.yaml +40 -25
  153. data/lib/countries/data/countries/AF.yaml +36 -23
  154. data/lib/countries/data/countries/AG.yaml +36 -25
  155. data/lib/countries/data/countries/AI.yaml +33 -21
  156. data/lib/countries/data/countries/AL.yaml +35 -24
  157. data/lib/countries/data/countries/AM.yaml +36 -24
  158. data/lib/countries/data/countries/AO.yaml +30 -20
  159. data/lib/countries/data/countries/AQ.yaml +31 -22
  160. data/lib/countries/data/countries/AR.yaml +36 -24
  161. data/lib/countries/data/countries/AS.yaml +38 -25
  162. data/lib/countries/data/countries/AT.yaml +37 -25
  163. data/lib/countries/data/countries/AU.yaml +39 -23
  164. data/lib/countries/data/countries/AW.yaml +30 -20
  165. data/lib/countries/data/countries/AX.yaml +33 -22
  166. data/lib/countries/data/countries/AZ.yaml +37 -25
  167. data/lib/countries/data/countries/BA.yaml +40 -27
  168. data/lib/countries/data/countries/BB.yaml +33 -21
  169. data/lib/countries/data/countries/BD.yaml +32 -21
  170. data/lib/countries/data/countries/BE.yaml +42 -28
  171. data/lib/countries/data/countries/BF.yaml +32 -21
  172. data/lib/countries/data/countries/BG.yaml +38 -26
  173. data/lib/countries/data/countries/BH.yaml +35 -24
  174. data/lib/countries/data/countries/BI.yaml +32 -21
  175. data/lib/countries/data/countries/BJ.yaml +31 -21
  176. data/lib/countries/data/countries/BL.yaml +33 -22
  177. data/lib/countries/data/countries/BM.yaml +34 -22
  178. data/lib/countries/data/countries/BN.yaml +32 -21
  179. data/lib/countries/data/countries/BO.yaml +37 -25
  180. data/lib/countries/data/countries/BQ.yaml +33 -22
  181. data/lib/countries/data/countries/BR.yaml +42 -24
  182. data/lib/countries/data/countries/BS.yaml +32 -21
  183. data/lib/countries/data/countries/BT.yaml +33 -22
  184. data/lib/countries/data/countries/BV.yaml +32 -23
  185. data/lib/countries/data/countries/BW.yaml +32 -21
  186. data/lib/countries/data/countries/BY.yaml +38 -26
  187. data/lib/countries/data/countries/BZ.yaml +34 -23
  188. data/lib/countries/data/countries/CA.yaml +35 -23
  189. data/lib/countries/data/countries/CC.yaml +34 -23
  190. data/lib/countries/data/countries/CD.yaml +44 -28
  191. data/lib/countries/data/countries/CF.yaml +36 -25
  192. data/lib/countries/data/countries/CG.yaml +35 -23
  193. data/lib/countries/data/countries/CH.yaml +47 -26
  194. data/lib/countries/data/countries/CI.yaml +35 -24
  195. data/lib/countries/data/countries/CK.yaml +34 -24
  196. data/lib/countries/data/countries/CL.yaml +37 -21
  197. data/lib/countries/data/countries/CM.yaml +36 -25
  198. data/lib/countries/data/countries/CN.yaml +32 -21
  199. data/lib/countries/data/countries/CO.yaml +33 -22
  200. data/lib/countries/data/countries/CR.yaml +31 -20
  201. data/lib/countries/data/countries/CU.yaml +32 -21
  202. data/lib/countries/data/countries/CV.yaml +35 -24
  203. data/lib/countries/data/countries/CW.yaml +31 -21
  204. data/lib/countries/data/countries/CX.yaml +38 -25
  205. data/lib/countries/data/countries/CY.yaml +42 -28
  206. data/lib/countries/data/countries/CZ.yaml +42 -28
  207. data/lib/countries/data/countries/DE.yaml +39 -27
  208. data/lib/countries/data/countries/DJ.yaml +34 -23
  209. data/lib/countries/data/countries/DK.yaml +39 -27
  210. data/lib/countries/data/countries/DM.yaml +31 -20
  211. data/lib/countries/data/countries/DO.yaml +35 -24
  212. data/lib/countries/data/countries/DZ.yaml +36 -25
  213. data/lib/countries/data/countries/EC.yaml +32 -21
  214. data/lib/countries/data/countries/EE.yaml +37 -26
  215. data/lib/countries/data/countries/EG.yaml +36 -25
  216. data/lib/countries/data/countries/EH.yaml +38 -26
  217. data/lib/countries/data/countries/ER.yaml +36 -24
  218. data/lib/countries/data/countries/ES.yaml +38 -26
  219. data/lib/countries/data/countries/ET.yaml +35 -24
  220. data/lib/countries/data/countries/FI.yaml +40 -27
  221. data/lib/countries/data/countries/FJ.yaml +38 -25
  222. data/lib/countries/data/countries/FK.yaml +36 -25
  223. data/lib/countries/data/countries/FM.yaml +34 -23
  224. data/lib/countries/data/countries/FO.yaml +35 -24
  225. data/lib/countries/data/countries/FR.yaml +38 -26
  226. data/lib/countries/data/countries/GA.yaml +32 -22
  227. data/lib/countries/data/countries/GB.yaml +46 -28
  228. data/lib/countries/data/countries/GD.yaml +31 -20
  229. data/lib/countries/data/countries/GE.yaml +34 -23
  230. data/lib/countries/data/countries/GF.yaml +35 -23
  231. data/lib/countries/data/countries/GG.yaml +38 -26
  232. data/lib/countries/data/countries/GH.yaml +30 -20
  233. data/lib/countries/data/countries/GI.yaml +32 -21
  234. data/lib/countries/data/countries/GL.yaml +35 -24
  235. data/lib/countries/data/countries/GM.yaml +30 -20
  236. data/lib/countries/data/countries/GN.yaml +35 -23
  237. data/lib/countries/data/countries/GP.yaml +33 -22
  238. data/lib/countries/data/countries/GQ.yaml +36 -25
  239. data/lib/countries/data/countries/GR.yaml +41 -29
  240. data/lib/countries/data/countries/GS.yaml +34 -22
  241. data/lib/countries/data/countries/GT.yaml +31 -20
  242. data/lib/countries/data/countries/GU.yaml +36 -22
  243. data/lib/countries/data/countries/GW.yaml +34 -22
  244. data/lib/countries/data/countries/GY.yaml +30 -20
  245. data/lib/countries/data/countries/HK.yaml +33 -22
  246. data/lib/countries/data/countries/HM.yaml +35 -24
  247. data/lib/countries/data/countries/HN.yaml +31 -20
  248. data/lib/countries/data/countries/HR.yaml +40 -28
  249. data/lib/countries/data/countries/HT.yaml +34 -22
  250. data/lib/countries/data/countries/HU.yaml +39 -27
  251. data/lib/countries/data/countries/ID.yaml +34 -23
  252. data/lib/countries/data/countries/IE.yaml +39 -26
  253. data/lib/countries/data/countries/IL.yaml +39 -22
  254. data/lib/countries/data/countries/IM.yaml +37 -25
  255. data/lib/countries/data/countries/IN.yaml +35 -23
  256. data/lib/countries/data/countries/IO.yaml +35 -24
  257. data/lib/countries/data/countries/IQ.yaml +33 -22
  258. data/lib/countries/data/countries/IR.yaml +34 -23
  259. data/lib/countries/data/countries/IS.yaml +42 -24
  260. data/lib/countries/data/countries/IT.yaml +38 -26
  261. data/lib/countries/data/countries/JE.yaml +34 -22
  262. data/lib/countries/data/countries/JM.yaml +33 -22
  263. data/lib/countries/data/countries/JO.yaml +36 -25
  264. data/lib/countries/data/countries/JP.yaml +33 -22
  265. data/lib/countries/data/countries/KE.yaml +34 -22
  266. data/lib/countries/data/countries/KG.yaml +38 -26
  267. data/lib/countries/data/countries/KH.yaml +35 -24
  268. data/lib/countries/data/countries/KI.yaml +30 -20
  269. data/lib/countries/data/countries/KM.yaml +35 -24
  270. data/lib/countries/data/countries/KN.yaml +38 -25
  271. data/lib/countries/data/countries/KP.yaml +37 -26
  272. data/lib/countries/data/countries/KR.yaml +37 -26
  273. data/lib/countries/data/countries/KW.yaml +34 -23
  274. data/lib/countries/data/countries/KY.yaml +36 -24
  275. data/lib/countries/data/countries/KZ.yaml +36 -24
  276. data/lib/countries/data/countries/LA.yaml +32 -21
  277. data/lib/countries/data/countries/LB.yaml +37 -25
  278. data/lib/countries/data/countries/LC.yaml +35 -22
  279. data/lib/countries/data/countries/LI.yaml +32 -20
  280. data/lib/countries/data/countries/LK.yaml +33 -21
  281. data/lib/countries/data/countries/LR.yaml +31 -20
  282. data/lib/countries/data/countries/LS.yaml +33 -21
  283. data/lib/countries/data/countries/LT.yaml +41 -28
  284. data/lib/countries/data/countries/LU.yaml +39 -25
  285. data/lib/countries/data/countries/LV.yaml +45 -27
  286. data/lib/countries/data/countries/LY.yaml +36 -26
  287. data/lib/countries/data/countries/MA.yaml +35 -24
  288. data/lib/countries/data/countries/MC.yaml +32 -21
  289. data/lib/countries/data/countries/MD.yaml +36 -25
  290. data/lib/countries/data/countries/ME.yaml +38 -24
  291. data/lib/countries/data/countries/MF.yaml +37 -24
  292. data/lib/countries/data/countries/MG.yaml +35 -23
  293. data/lib/countries/data/countries/MH.yaml +37 -25
  294. data/lib/countries/data/countries/MK.yaml +37 -25
  295. data/lib/countries/data/countries/ML.yaml +30 -20
  296. data/lib/countries/data/countries/MM.yaml +31 -20
  297. data/lib/countries/data/countries/MN.yaml +34 -23
  298. data/lib/countries/data/countries/MO.yaml +33 -22
  299. data/lib/countries/data/countries/MP.yaml +38 -26
  300. data/lib/countries/data/countries/MQ.yaml +33 -22
  301. data/lib/countries/data/countries/MR.yaml +36 -25
  302. data/lib/countries/data/countries/MS.yaml +32 -21
  303. data/lib/countries/data/countries/MT.yaml +38 -25
  304. data/lib/countries/data/countries/MU.yaml +33 -22
  305. data/lib/countries/data/countries/MV.yaml +34 -23
  306. data/lib/countries/data/countries/MW.yaml +32 -21
  307. data/lib/countries/data/countries/MX.yaml +39 -23
  308. data/lib/countries/data/countries/MY.yaml +36 -24
  309. data/lib/countries/data/countries/MZ.yaml +32 -21
  310. data/lib/countries/data/countries/NA.yaml +35 -23
  311. data/lib/countries/data/countries/NC.yaml +36 -25
  312. data/lib/countries/data/countries/NE.yaml +32 -21
  313. data/lib/countries/data/countries/NF.yaml +36 -25
  314. data/lib/countries/data/countries/NG.yaml +39 -23
  315. data/lib/countries/data/countries/NI.yaml +31 -20
  316. data/lib/countries/data/countries/NL.yaml +41 -28
  317. data/lib/countries/data/countries/NO.yaml +43 -25
  318. data/lib/countries/data/countries/NP.yaml +43 -22
  319. data/lib/countries/data/countries/NR.yaml +32 -21
  320. data/lib/countries/data/countries/NU.yaml +30 -20
  321. data/lib/countries/data/countries/NZ.yaml +41 -24
  322. data/lib/countries/data/countries/OM.yaml +33 -22
  323. data/lib/countries/data/countries/PA.yaml +31 -21
  324. data/lib/countries/data/countries/PE.yaml +33 -22
  325. data/lib/countries/data/countries/PF.yaml +36 -25
  326. data/lib/countries/data/countries/PG.yaml +35 -24
  327. data/lib/countries/data/countries/PH.yaml +41 -24
  328. data/lib/countries/data/countries/PK.yaml +34 -22
  329. data/lib/countries/data/countries/PL.yaml +38 -26
  330. data/lib/countries/data/countries/PM.yaml +36 -25
  331. data/lib/countries/data/countries/PN.yaml +35 -23
  332. data/lib/countries/data/countries/PR.yaml +33 -21
  333. data/lib/countries/data/countries/PS.yaml +41 -28
  334. data/lib/countries/data/countries/PT.yaml +34 -22
  335. data/lib/countries/data/countries/PW.yaml +31 -20
  336. data/lib/countries/data/countries/PY.yaml +33 -21
  337. data/lib/countries/data/countries/QA.yaml +32 -22
  338. data/lib/countries/data/countries/RE.yaml +34 -23
  339. data/lib/countries/data/countries/RO.yaml +40 -28
  340. data/lib/countries/data/countries/RS.yaml +34 -23
  341. data/lib/countries/data/countries/RU.yaml +37 -26
  342. data/lib/countries/data/countries/RW.yaml +35 -23
  343. data/lib/countries/data/countries/SA.yaml +42 -25
  344. data/lib/countries/data/countries/SB.yaml +35 -25
  345. data/lib/countries/data/countries/SC.yaml +33 -22
  346. data/lib/countries/data/countries/SD.yaml +37 -25
  347. data/lib/countries/data/countries/SE.yaml +39 -27
  348. data/lib/countries/data/countries/SG.yaml +38 -25
  349. data/lib/countries/data/countries/SH.yaml +37 -25
  350. data/lib/countries/data/countries/SI.yaml +39 -27
  351. data/lib/countries/data/countries/SJ.yaml +36 -25
  352. data/lib/countries/data/countries/SK.yaml +39 -27
  353. data/lib/countries/data/countries/SL.yaml +30 -20
  354. data/lib/countries/data/countries/SM.yaml +32 -21
  355. data/lib/countries/data/countries/SN.yaml +32 -21
  356. data/lib/countries/data/countries/SO.yaml +35 -23
  357. data/lib/countries/data/countries/SR.yaml +31 -21
  358. data/lib/countries/data/countries/SS.yaml +35 -23
  359. data/lib/countries/data/countries/ST.yaml +34 -24
  360. data/lib/countries/data/countries/SV.yaml +32 -21
  361. data/lib/countries/data/countries/SX.yaml +34 -22
  362. data/lib/countries/data/countries/SY.yaml +36 -26
  363. data/lib/countries/data/countries/SZ.yaml +35 -23
  364. data/lib/countries/data/countries/TC.yaml +38 -25
  365. data/lib/countries/data/countries/TD.yaml +36 -25
  366. data/lib/countries/data/countries/TF.yaml +39 -28
  367. data/lib/countries/data/countries/TG.yaml +30 -20
  368. data/lib/countries/data/countries/TH.yaml +39 -22
  369. data/lib/countries/data/countries/TJ.yaml +37 -25
  370. data/lib/countries/data/countries/TK.yaml +33 -23
  371. data/lib/countries/data/countries/TL.yaml +34 -24
  372. data/lib/countries/data/countries/TM.yaml +35 -23
  373. data/lib/countries/data/countries/TN.yaml +38 -26
  374. data/lib/countries/data/countries/TO.yaml +32 -21
  375. data/lib/countries/data/countries/TR.yaml +35 -24
  376. data/lib/countries/data/countries/TT.yaml +35 -24
  377. data/lib/countries/data/countries/TV.yaml +30 -20
  378. data/lib/countries/data/countries/TW.yaml +33 -22
  379. data/lib/countries/data/countries/TZ.yaml +36 -24
  380. data/lib/countries/data/countries/UA.yaml +42 -25
  381. data/lib/countries/data/countries/UG.yaml +33 -22
  382. data/lib/countries/data/countries/UM.yaml +37 -26
  383. data/lib/countries/data/countries/US.yaml +37 -24
  384. data/lib/countries/data/countries/UY.yaml +31 -20
  385. data/lib/countries/data/countries/UZ.yaml +37 -25
  386. data/lib/countries/data/countries/VA.yaml +39 -27
  387. data/lib/countries/data/countries/VC.yaml +38 -24
  388. data/lib/countries/data/countries/VE.yaml +31 -20
  389. data/lib/countries/data/countries/VG.yaml +38 -26
  390. data/lib/countries/data/countries/VI.yaml +37 -25
  391. data/lib/countries/data/countries/VN.yaml +38 -21
  392. data/lib/countries/data/countries/VU.yaml +34 -22
  393. data/lib/countries/data/countries/WF.yaml +36 -25
  394. data/lib/countries/data/countries/WS.yaml +32 -21
  395. data/lib/countries/data/countries/YE.yaml +33 -23
  396. data/lib/countries/data/countries/YT.yaml +32 -21
  397. data/lib/countries/data/countries/ZA.yaml +52 -32
  398. data/lib/countries/data/countries/ZM.yaml +33 -22
  399. data/lib/countries/data/countries/ZW.yaml +36 -24
  400. data/lib/countries/data/subdivisions/AD.yaml +85 -50
  401. data/lib/countries/data/subdivisions/AE.yaml +513 -55
  402. data/lib/countries/data/subdivisions/AF.yaml +2239 -234
  403. data/lib/countries/data/subdivisions/AG.yaml +451 -57
  404. data/lib/countries/data/subdivisions/AI.yaml +197 -0
  405. data/lib/countries/data/subdivisions/AL.yaml +746 -316
  406. data/lib/countries/data/subdivisions/AM.yaml +788 -68
  407. data/lib/countries/data/subdivisions/AO.yaml +1145 -126
  408. data/lib/countries/data/subdivisions/AR.yaml +1668 -168
  409. data/lib/countries/data/subdivisions/AT.yaml +714 -63
  410. data/lib/countries/data/subdivisions/AU.yaml +673 -56
  411. data/lib/countries/data/subdivisions/AZ.yaml +4508 -536
  412. data/lib/countries/data/subdivisions/BA.yaml +359 -14
  413. data/lib/countries/data/subdivisions/BB.yaml +589 -79
  414. data/lib/countries/data/subdivisions/BD.yaml +2593 -400
  415. data/lib/countries/data/subdivisions/BE.yaml +943 -77
  416. data/lib/countries/data/subdivisions/BF.yaml +2917 -311
  417. data/lib/countries/data/subdivisions/BG.yaml +1965 -199
  418. data/lib/countries/data/subdivisions/BH.yaml +184 -31
  419. data/lib/countries/data/subdivisions/BI.yaml +982 -112
  420. data/lib/countries/data/subdivisions/BJ.yaml +691 -84
  421. data/lib/countries/data/subdivisions/BM.yaml +155 -0
  422. data/lib/countries/data/subdivisions/BN.yaml +225 -24
  423. data/lib/countries/data/subdivisions/BO.yaml +561 -63
  424. data/lib/countries/data/subdivisions/BQ.yaml +217 -21
  425. data/lib/countries/data/subdivisions/BR.yaml +2154 -185
  426. data/lib/countries/data/subdivisions/BS.yaml +1821 -143
  427. data/lib/countries/data/subdivisions/BT.yaml +1087 -140
  428. data/lib/countries/data/subdivisions/BW.yaml +923 -63
  429. data/lib/countries/data/subdivisions/BY.yaml +528 -31
  430. data/lib/countries/data/subdivisions/BZ.yaml +309 -42
  431. data/lib/countries/data/subdivisions/CA.yaml +1105 -92
  432. data/lib/countries/data/subdivisions/CD.yaml +1187 -78
  433. data/lib/countries/data/subdivisions/CF.yaml +961 -119
  434. data/lib/countries/data/subdivisions/CG.yaml +640 -77
  435. data/lib/countries/data/subdivisions/CH.yaml +1946 -182
  436. data/lib/countries/data/subdivisions/CI.yaml +859 -125
  437. data/lib/countries/data/subdivisions/CK.yaml +155 -0
  438. data/lib/countries/data/subdivisions/CL.yaml +968 -105
  439. data/lib/countries/data/subdivisions/CM.yaml +582 -70
  440. data/lib/countries/data/subdivisions/CN.yaml +2618 -274
  441. data/lib/countries/data/subdivisions/CO.yaml +2102 -227
  442. data/lib/countries/data/subdivisions/CR.yaml +393 -49
  443. data/lib/countries/data/subdivisions/CU.yaml +926 -119
  444. data/lib/countries/data/subdivisions/CV.yaml +1198 -119
  445. data/lib/countries/data/subdivisions/CY.yaml +328 -42
  446. data/lib/countries/data/subdivisions/CZ.yaml +2892 -129
  447. data/lib/countries/data/subdivisions/DE.yaml +1420 -112
  448. data/lib/countries/data/subdivisions/DJ.yaml +375 -42
  449. data/lib/countries/data/subdivisions/DK.yaml +344 -180
  450. data/lib/countries/data/subdivisions/DM.yaml +512 -72
  451. data/lib/countries/data/subdivisions/DO.yaml +1763 -219
  452. data/lib/countries/data/subdivisions/DZ.yaml +2869 -334
  453. data/lib/countries/data/subdivisions/EC.yaml +1348 -168
  454. data/lib/countries/data/subdivisions/EE.yaml +1368 -118
  455. data/lib/countries/data/subdivisions/EG.yaml +1628 -190
  456. data/lib/countries/data/subdivisions/EH.yaml +48 -28
  457. data/lib/countries/data/subdivisions/ER.yaml +348 -42
  458. data/lib/countries/data/subdivisions/ES.yaml +4875 -375
  459. data/lib/countries/data/subdivisions/ET.yaml +735 -77
  460. data/lib/countries/data/subdivisions/FI.yaml +890 -36
  461. data/lib/countries/data/subdivisions/FJ.yaml +720 -35
  462. data/lib/countries/data/subdivisions/FM.yaml +202 -24
  463. data/lib/countries/data/subdivisions/FR.yaml +8250 -684
  464. data/lib/countries/data/subdivisions/GA.yaml +526 -63
  465. data/lib/countries/data/subdivisions/GB.yaml +12522 -1516
  466. data/lib/countries/data/subdivisions/GD.yaml +354 -49
  467. data/lib/countries/data/subdivisions/GE.yaml +833 -85
  468. data/lib/countries/data/subdivisions/GH.yaml +658 -70
  469. data/lib/countries/data/subdivisions/GL.yaml +262 -0
  470. data/lib/countries/data/subdivisions/GM.yaml +381 -42
  471. data/lib/countries/data/subdivisions/GN.yaml +1919 -234
  472. data/lib/countries/data/subdivisions/GQ.yaml +459 -59
  473. data/lib/countries/data/subdivisions/GR.yaml +871 -527
  474. data/lib/countries/data/subdivisions/GT.yaml +1270 -150
  475. data/lib/countries/data/subdivisions/GW.yaml +563 -59
  476. data/lib/countries/data/subdivisions/GY.yaml +498 -70
  477. data/lib/countries/data/subdivisions/HN.yaml +1019 -126
  478. data/lib/countries/data/subdivisions/HR.yaml +1419 -151
  479. data/lib/countries/data/subdivisions/HT.yaml +525 -63
  480. data/lib/countries/data/subdivisions/HU.yaml +2949 -302
  481. data/lib/countries/data/subdivisions/ID.yaml +2679 -243
  482. data/lib/countries/data/subdivisions/IE.yaml +2027 -177
  483. data/lib/countries/data/subdivisions/IL.yaml +376 -42
  484. data/lib/countries/data/subdivisions/IN.yaml +3110 -252
  485. data/lib/countries/data/subdivisions/IQ.yaml +1105 -126
  486. data/lib/countries/data/subdivisions/IR.yaml +2092 -215
  487. data/lib/countries/data/subdivisions/IS.yaml +830 -59
  488. data/lib/countries/data/subdivisions/IT.yaml +8525 -790
  489. data/lib/countries/data/subdivisions/JM.yaml +732 -100
  490. data/lib/countries/data/subdivisions/JO.yaml +662 -48
  491. data/lib/countries/data/subdivisions/JP.yaml +3562 -327
  492. data/lib/countries/data/subdivisions/KE.yaml +1449 -56
  493. data/lib/countries/data/subdivisions/KG.yaml +624 -57
  494. data/lib/countries/data/subdivisions/KH.yaml +1332 -147
  495. data/lib/countries/data/subdivisions/KI.yaml +163 -17
  496. data/lib/countries/data/subdivisions/KM.yaml +189 -21
  497. data/lib/countries/data/subdivisions/KN.yaml +835 -100
  498. data/lib/countries/data/subdivisions/KP.yaml +922 -80
  499. data/lib/countries/data/subdivisions/KR.yaml +1225 -88
  500. data/lib/countries/data/subdivisions/KW.yaml +280 -42
  501. data/lib/countries/data/subdivisions/KZ.yaml +1213 -122
  502. data/lib/countries/data/subdivisions/LA.yaml +947 -120
  503. data/lib/countries/data/subdivisions/LB.yaml +386 -22
  504. data/lib/countries/data/subdivisions/LC.yaml +470 -0
  505. data/lib/countries/data/subdivisions/LI.yaml +557 -39
  506. data/lib/countries/data/subdivisions/LK.yaml +1546 -175
  507. data/lib/countries/data/subdivisions/LR.yaml +857 -105
  508. data/lib/countries/data/subdivisions/LS.yaml +529 -70
  509. data/lib/countries/data/subdivisions/LT.yaml +2616 -71
  510. data/lib/countries/data/subdivisions/LU.yaml +490 -24
  511. data/lib/countries/data/subdivisions/LV.yaml +2501 -178
  512. data/lib/countries/data/subdivisions/LY.yaml +1188 -262
  513. data/lib/countries/data/subdivisions/MA.yaml +3375 -437
  514. data/lib/countries/data/subdivisions/MC.yaml +484 -0
  515. data/lib/countries/data/subdivisions/MD.yaml +2240 -71
  516. data/lib/countries/data/subdivisions/ME.yaml +1136 -151
  517. data/lib/countries/data/subdivisions/MG.yaml +253 -42
  518. data/lib/countries/data/subdivisions/MH.yaml +995 -151
  519. data/lib/countries/data/subdivisions/MK.yaml +3964 -752
  520. data/lib/countries/data/subdivisions/ML.yaml +569 -63
  521. data/lib/countries/data/subdivisions/MM.yaml +849 -98
  522. data/lib/countries/data/subdivisions/MN.yaml +1389 -160
  523. data/lib/countries/data/subdivisions/MR.yaml +702 -94
  524. data/lib/countries/data/subdivisions/MT.yaml +3726 -478
  525. data/lib/countries/data/subdivisions/MU.yaml +923 -115
  526. data/lib/countries/data/subdivisions/MV.yaml +1219 -148
  527. data/lib/countries/data/subdivisions/MW.yaml +1646 -189
  528. data/lib/countries/data/subdivisions/MX.yaml +2414 -222
  529. data/lib/countries/data/subdivisions/MY.yaml +1071 -114
  530. data/lib/countries/data/subdivisions/MZ.yaml +665 -77
  531. data/lib/countries/data/subdivisions/NA.yaml +736 -98
  532. data/lib/countries/data/subdivisions/NE.yaml +475 -56
  533. data/lib/countries/data/subdivisions/NG.yaml +2370 -259
  534. data/lib/countries/data/subdivisions/NI.yaml +952 -119
  535. data/lib/countries/data/subdivisions/NL.yaml +1205 -84
  536. data/lib/countries/data/subdivisions/NO.yaml +856 -164
  537. data/lib/countries/data/subdivisions/NP.yaml +982 -90
  538. data/lib/countries/data/subdivisions/NR.yaml +827 -100
  539. data/lib/countries/data/subdivisions/NZ.yaml +946 -122
  540. data/lib/countries/data/subdivisions/OM.yaml +633 -63
  541. data/lib/countries/data/subdivisions/PA.yaml +708 -69
  542. data/lib/countries/data/subdivisions/PE.yaml +1489 -179
  543. data/lib/countries/data/subdivisions/PG.yaml +1211 -140
  544. data/lib/countries/data/subdivisions/PH.yaml +5089 -572
  545. data/lib/countries/data/subdivisions/PK.yaml +566 -56
  546. data/lib/countries/data/subdivisions/PL.yaml +1042 -150
  547. data/lib/countries/data/subdivisions/PS.yaml +747 -0
  548. data/lib/countries/data/subdivisions/PT.yaml +1124 -145
  549. data/lib/countries/data/subdivisions/PW.yaml +832 -108
  550. data/lib/countries/data/subdivisions/PY.yaml +1045 -127
  551. data/lib/countries/data/subdivisions/QA.yaml +469 -64
  552. data/lib/countries/data/subdivisions/RO.yaml +2746 -294
  553. data/lib/countries/data/subdivisions/RS.yaml +1786 -195
  554. data/lib/countries/data/subdivisions/RU.yaml +6570 -655
  555. data/lib/countries/data/subdivisions/RW.yaml +327 -35
  556. data/lib/countries/data/subdivisions/SA.yaml +768 -102
  557. data/lib/countries/data/subdivisions/SB.yaml +550 -70
  558. data/lib/countries/data/subdivisions/SC.yaml +1286 -163
  559. data/lib/countries/data/subdivisions/SD.yaml +1002 -254
  560. data/lib/countries/data/subdivisions/SE.yaml +1416 -149
  561. data/lib/countries/data/subdivisions/SG.yaml +108 -31
  562. data/lib/countries/data/subdivisions/SH.yaml +197 -21
  563. data/lib/countries/data/subdivisions/SI.yaml +10997 -1403
  564. data/lib/countries/data/subdivisions/SJ.yaml +29 -0
  565. data/lib/countries/data/subdivisions/SK.yaml +533 -57
  566. data/lib/countries/data/subdivisions/SL.yaml +231 -28
  567. data/lib/countries/data/subdivisions/SM.yaml +577 -65
  568. data/lib/countries/data/subdivisions/SN.yaml +761 -77
  569. data/lib/countries/data/subdivisions/SO.yaml +914 -126
  570. data/lib/countries/data/subdivisions/SR.yaml +512 -70
  571. data/lib/countries/data/subdivisions/SS.yaml +624 -0
  572. data/lib/countries/data/subdivisions/ST.yaml +73 -14
  573. data/lib/countries/data/subdivisions/SV.yaml +747 -98
  574. data/lib/countries/data/subdivisions/SY.yaml +806 -91
  575. data/lib/countries/data/subdivisions/SZ.yaml +217 -28
  576. data/lib/countries/data/subdivisions/TD.yaml +1242 -126
  577. data/lib/countries/data/subdivisions/TG.yaml +264 -35
  578. data/lib/countries/data/subdivisions/TH.yaml +4535 -539
  579. data/lib/countries/data/subdivisions/TJ.yaml +356 -0
  580. data/lib/countries/data/subdivisions/TK.yaml +43 -0
  581. data/lib/countries/data/subdivisions/TL.yaml +682 -91
  582. data/lib/countries/data/subdivisions/TM.yaml +390 -46
  583. data/lib/countries/data/subdivisions/TN.yaml +1301 -168
  584. data/lib/countries/data/subdivisions/TO.yaml +260 -36
  585. data/lib/countries/data/subdivisions/TR.yaml +5858 -624
  586. data/lib/countries/data/subdivisions/TT.yaml +865 -112
  587. data/lib/countries/data/subdivisions/TV.yaml +382 -44
  588. data/lib/countries/data/subdivisions/TW.yaml +1281 -145
  589. data/lib/countries/data/subdivisions/TZ.yaml +1868 -184
  590. data/lib/countries/data/subdivisions/UA.yaml +1988 -192
  591. data/lib/countries/data/subdivisions/UG.yaml +6150 -544
  592. data/lib/countries/data/subdivisions/UM.yaml +710 -59
  593. data/lib/countries/data/subdivisions/US.yaml +4789 -404
  594. data/lib/countries/data/subdivisions/UY.yaml +1163 -112
  595. data/lib/countries/data/subdivisions/UZ.yaml +902 -99
  596. data/lib/countries/data/subdivisions/VC.yaml +289 -38
  597. data/lib/countries/data/subdivisions/VE.yaml +1559 -175
  598. data/lib/countries/data/subdivisions/VN.yaml +3799 -550
  599. data/lib/countries/data/subdivisions/VU.yaml +333 -43
  600. data/lib/countries/data/subdivisions/WF.yaml +201 -0
  601. data/lib/countries/data/subdivisions/WS.yaml +587 -77
  602. data/lib/countries/data/subdivisions/YE.yaml +1262 -135
  603. data/lib/countries/data/subdivisions/ZA.yaml +712 -63
  604. data/lib/countries/data/subdivisions/ZM.yaml +568 -65
  605. data/lib/countries/data/subdivisions/ZW.yaml +520 -70
  606. data/lib/countries/data/translation_corrections.yaml +38 -1
  607. data/lib/countries/data.rb +161 -16
  608. data/lib/countries/global.rb +13 -3
  609. data/lib/countries/iso3166.rb +9 -2
  610. data/lib/countries/kwarg_struct.rb +12 -0
  611. data/lib/countries/mongoid.rb +25 -22
  612. data/lib/countries/setup.rb +7 -7
  613. data/lib/countries/sources/cldr/downloader.rb +37 -0
  614. data/lib/countries/sources/cldr/subdivision.rb +35 -0
  615. data/lib/countries/sources/cldr/subdivision_updater.rb +35 -0
  616. data/lib/countries/sources/local/cached_loader.rb +29 -0
  617. data/lib/countries/sources/local/subdivision.rb +33 -0
  618. data/lib/countries/sources.rb +6 -0
  619. data/lib/countries/structure.rb +72 -0
  620. data/lib/countries/subdivision.rb +10 -0
  621. data/lib/countries/tasks/geocoding.rake +97 -0
  622. data/lib/countries/tasks/postal_codes.rake +48 -0
  623. data/lib/countries/timezones.rb +13 -0
  624. data/lib/countries/translations.rb +11 -0
  625. data/lib/countries/version.rb +1 -1
  626. data/lib/countries.rb +2 -0
  627. data/spec/00_global_spec.rb +56 -0
  628. data/spec/configuration_spec.rb +54 -0
  629. data/spec/country_spec.rb +473 -87
  630. data/spec/data_spec.rb +181 -0
  631. data/spec/mongoid_spec.rb +2 -2
  632. data/spec/perf_spec.rb +74 -0
  633. data/spec/spec_helper.rb +12 -0
  634. data/spec/subdivision_spec.rb +32 -0
  635. data/spec/thread_safety_spec.rb +46 -0
  636. data/spec/timezone_spec.rb +32 -0
  637. metadata +206 -30
  638. data/.travis.yml +0 -6
  639. data/lib/countries/cache/countries +0 -0
  640. data/lib/countries/data/countries/AN.yaml +0 -42
  641. data/lib/countries/data/countries.yaml +0 -251
  642. data/lib/countries/data/subdivisions/Ky.yaml +0 -55
  643. data/lib/countries/data/subdivisions/TF.yaml +0 -27
  644. data/lib/countries/data/subdivisions/Tj.yaml +0 -38
  645. data/spec/setup_spec.rb +0 -14
data/spec/country_spec.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
-
3
+ require 'spec_helper'
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
@@ -15,6 +16,21 @@ describe ISO3166::Country do
15
16
  expect(country.data).not_to be_nil
16
17
  end
17
18
 
19
+ it 'allows countries to be compared' do
20
+ c1 = ISO3166::Country.new('US')
21
+ c2 = ISO3166::Country.new('US')
22
+ c3 = ISO3166::Country.new('AU')
23
+ expect(c1).to eq(c2)
24
+ expect(c1).to_not eq(nil)
25
+ expect(c1.hash).to eq(c2.hash)
26
+ expect(c3.hash).to_not eq(c2.hash)
27
+
28
+ hsh = {}
29
+ hsh[c1] = 1
30
+ hsh[c2] = 2
31
+ expect(hsh.keys.count).to eq 1
32
+ end
33
+
18
34
  it 'should return 3166 number' do
19
35
  expect(country.number).to eq('840')
20
36
  end
@@ -27,12 +43,12 @@ describe ISO3166::Country do
27
43
  expect(country.alpha3).to eq('USA')
28
44
  end
29
45
 
30
- it 'should return 3166 name' do
31
- expect(country.name).to eq('United States')
46
+ it 'should return 3166 iso_short_name' do
47
+ expect(country.iso_short_name).to eq('United States of America')
32
48
  end
33
49
 
34
50
  it 'should return alternate names' do
35
- expect(country.names).to eq(['United States of America', 'Vereinigte Staaten von Amerika', 'Γ‰tats-Unis', 'Estados Unidos', 'をパγƒͺγ‚«εˆθ‘†ε›½', 'Verenigde Staten'])
51
+ expect(country.unofficial_names).to eq(['United States', 'USA', 'Murica', 'Vereinigte Staaten von Amerika', 'Γ‰tats-Unis', 'Estados Unidos', 'をパγƒͺγ‚«εˆθ‘†ε›½', 'Verenigde Staten'])
36
52
  end
37
53
 
38
54
  it 'should return translations' do
@@ -41,19 +57,15 @@ describe ISO3166::Country do
41
57
  end
42
58
 
43
59
  it 'should return latitude' do
44
- expect(country.latitude).to eq('38 00 N')
60
+ expect(country.latitude).to eq(37.09024)
45
61
  end
46
62
 
47
63
  it 'should return longitude' do
48
- expect(country.longitude).to eq('97 00 W')
64
+ expect(country.longitude).to eq(-95.712891)
49
65
  end
50
66
 
51
- it 'should return the decimal Latitude' do
52
- expect(country.latitude_dec).to eq('39.44325637817383')
53
- end
54
-
55
- it 'should return the decimal Longitude' do
56
- expect(country.longitude_dec).to eq('-98.95733642578125')
67
+ it 'should return bounds' do
68
+ expect(country.bounds['northeast']['lat']).to eq(71.3577635769)
57
69
  end
58
70
 
59
71
  it 'should return continent' do
@@ -65,8 +77,18 @@ describe ISO3166::Country do
65
77
  end
66
78
 
67
79
  it 'knows when a country does not require postal codes' do
68
- ireland = ISO3166::Country.search('IE')
69
- expect(ireland.postal_code).to eq(false)
80
+ antarctica = ISO3166::Country.search('AQ')
81
+ expect(antarctica.postal_code).to eq(false)
82
+ end
83
+
84
+ it 'knows about the country postal code format' do
85
+ expect(country.postal_code_format).to_not be_nil
86
+
87
+ regex = Regexp.new(country.postal_code_format)
88
+ expect(regex).to match("12345-6789")
89
+
90
+ antarctica = ISO3166::Country.search('AQ')
91
+ expect(antarctica.postal_code_format).to be_nil
70
92
  end
71
93
 
72
94
  it 'should return region' do
@@ -109,6 +131,55 @@ describe ISO3166::Country do
109
131
  end
110
132
  end
111
133
 
134
+ context 'with Brazil' do
135
+ context 'with pt-BR translation' do
136
+ before do
137
+ ISO3166::Data.register(
138
+ alpha2: 'BR2',
139
+ iso_short_name: 'Brazil',
140
+ languages_official: %w(pt-BR),
141
+ translations: {
142
+ 'pt-BR' => 'Translation for pt-BR',
143
+ 'pt' => 'Translation for pt'
144
+ }
145
+ )
146
+ end
147
+
148
+ let(:country) { ISO3166::Country.search('BR2') }
149
+
150
+ it 'should return its local name based on its language' do
151
+ expect(country.local_names).to match_array(['Translation for pt-BR'])
152
+ end
153
+
154
+ after do
155
+ ISO3166::Data.unregister('BR2')
156
+ end
157
+ end
158
+
159
+ context 'without pt-BR translation' do
160
+ before do
161
+ ISO3166::Data.register(
162
+ alpha2: 'BR2',
163
+ iso_short_name: 'Brazil',
164
+ languages_official: %w(pt-BR),
165
+ translations: {
166
+ 'pt' => 'Translation for pt'
167
+ }
168
+ )
169
+ end
170
+
171
+ let(:country) { ISO3166::Country.search('BR2') }
172
+
173
+ it 'should return its local name based on its language' do
174
+ expect(country.local_names).to match_array(['Translation for pt'])
175
+ end
176
+
177
+ after do
178
+ ISO3166::Data.unregister('BR2')
179
+ end
180
+ end
181
+ end
182
+
112
183
  it 'should return ioc code' do
113
184
  expect(country.ioc).to eq('USA')
114
185
  end
@@ -148,16 +219,53 @@ describe ISO3166::Country do
148
219
  end
149
220
 
150
221
  describe 'subdivisions' do
222
+ let(:virginia) { country.states['VA'] }
151
223
  it 'should return an empty hash for a country with no ISO3166-2' do
152
224
  expect(ISO3166::Country.search('VA').subdivisions.size).to eq(0)
153
225
  end
154
226
 
155
227
  it 'should return a hash with all sub divisions' do
156
- expect(country.subdivisions.size).to eq(60)
228
+ expect(country.subdivisions.size).to eq(57)
157
229
  end
158
230
 
159
231
  it 'should be available through states' do
160
- expect(country.states.size).to eq(60)
232
+ expect(country.states.size).to eq(57)
233
+ end
234
+
235
+ it 'should be a subdivision object' do
236
+ expect(virginia).to be_a(ISO3166::Subdivision)
237
+ end
238
+
239
+ it 'should have a name' do
240
+ expect(virginia.name).to eq('Virginia')
241
+ end
242
+
243
+ it 'should have a code' do
244
+ expect(virginia.code).to eq('VA')
245
+ end
246
+
247
+ it 'should behave like a hash' do
248
+ expect(virginia['name']).to eq('Virginia')
249
+ end
250
+ end
251
+
252
+ describe 'subdivision_names_with_codes' do
253
+ it 'should return an alphabetized list of all subdivisions names with codes' do
254
+ subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
255
+ expect(subdivisions).to be_an(Array)
256
+ expect(subdivisions.first[0]).to be_a(String)
257
+ expect(subdivisions.size).to eq(27)
258
+ expect(subdivisions.first[0]).to eq('Alexandria')
259
+ end
260
+
261
+ it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
262
+ ISO3166.configuration.locales = [:es, :de, :en]
263
+
264
+ subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes(:es)
265
+ expect(subdivisions).to be_an(Array)
266
+ expect(subdivisions.first[0]).to be_a(String)
267
+ expect(subdivisions.size).to eq(27)
268
+ expect(subdivisions.first[0]).to eq('Al Iskandariyah')
161
269
  end
162
270
  end
163
271
 
@@ -203,15 +311,15 @@ describe ISO3166::Country do
203
311
  countries = ISO3166::Country.all
204
312
  expect(countries).to be_an(Array)
205
313
  expect(countries.first).to be_an(ISO3166::Country)
206
- expect(countries.size).to eq(250)
314
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
207
315
  end
208
316
 
209
317
  it 'should allow to customize each country representation passing a block to the method' do
210
- countries = ISO3166::Country.all { |country, data| [data['name'], country, data['country_code']] }
318
+ countries = ISO3166::Country.all { |country, data| [data['iso_short_name'], country, data['country_code']] }
211
319
  expect(countries).to be_an(Array)
212
320
  expect(countries.first).to be_an(Array)
213
321
  expect(countries.first.size).to eq(3)
214
- expect(countries.size).to eq(250)
322
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
215
323
  end
216
324
  end
217
325
 
@@ -220,18 +328,38 @@ describe ISO3166::Country do
220
328
  countries = ISO3166::Country.all_translated('fr')
221
329
  expect(countries).to be_an(Array)
222
330
  expect(countries.first).to be_a(String)
223
- expect(countries.first).to eq('Afghanistan')
331
+ expect(countries.first).to eq('Aruba')
224
332
  # countries missing the desired locale will not be added to the list
225
333
  # so all 250 countries may not be returned, 'fr' returns 249, for example
226
- expect(countries.size).to eq(249)
334
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
227
335
  end
228
336
 
229
337
  it 'should return an alphabetized list of all country names in English if no locale is passed' do
230
338
  countries = ISO3166::Country.all_translated
231
339
  expect(countries).to be_an(Array)
232
340
  expect(countries.first).to be_a(String)
233
- expect(countries.first).to eq('Afghanistan')
234
- expect(countries.size).to eq(249)
341
+ expect(countries.first).to eq('Aruba')
342
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
343
+ end
344
+
345
+ context 'with custom countries' do
346
+ before do
347
+ ISO3166::Data.register(
348
+ alpha2: 'XX',
349
+ iso_short_name: 'Custom Country',
350
+ translations: { 'en' => 'Custom Country' }
351
+ )
352
+ end
353
+
354
+ it 'should include custom registered countries' do
355
+ custom_country = ISO3166::Country.find_by_alpha2('XX')[1]
356
+ countries = ISO3166::Country.all_translated
357
+ expect(countries).to include(custom_country['iso_short_name'])
358
+ end
359
+
360
+ after do
361
+ ISO3166::Data.unregister('XX')
362
+ end
235
363
  end
236
364
  end
237
365
 
@@ -242,12 +370,44 @@ describe ISO3166::Country do
242
370
  expect(countries).to be_an(Array)
243
371
  expect(countries.first[0]).to be_a(String)
244
372
  expect(countries.first[0]).to eq('Afghanistan')
245
- expect(countries.size).to eq(250)
373
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
374
+ expect(countries.any?{|pair| !pair[0].html_safe?}).to eq(false)
375
+ end
376
+
377
+ it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
378
+ ISO3166.configuration.locales = [:es, :de, :en]
379
+
380
+ countries = ISO3166::Country.all_names_with_codes(:es)
381
+ expect(countries).to be_an(Array)
382
+ expect(countries.first[0]).to be_a(String)
383
+ expect(countries.first[0]).to eq('AfganistΓ‘n')
384
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
385
+ end
386
+ end
387
+
388
+ describe 'all_names_with_codes_without_active_support' do
389
+ it 'should return an alphabetized list of all country names with ISOCODE alpha2' do
390
+ countries = ISO3166::Country.all_names_with_codes
391
+ expect(countries).to be_an(Array)
392
+ expect(countries.first[0]).to be_a(String)
393
+ expect(countries.first[0]).to eq('Afghanistan')
394
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
395
+ end
396
+
397
+ it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
398
+ ISO3166.configuration.locales = [:es, :de, :en]
399
+
400
+ countries = ISO3166::Country.all_names_with_codes(:es)
401
+ expect(countries).to be_an(Array)
402
+ expect(countries.first[0]).to be_a(String)
403
+ expect(countries.first[0]).to eq('AfganistΓ‘n')
404
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
246
405
  end
247
406
  end
248
407
 
249
408
  describe 'translation' do
250
409
  it 'should return the localized name for a country to the selected locale' do
410
+ ISO3166.configuration.locales = [:es, :de, :en]
251
411
  countries = ISO3166::Country.new(:de).translation('de')
252
412
  expect(countries).to be_an(String)
253
413
  expect(countries).to eq('Deutschland')
@@ -263,25 +423,42 @@ describe ISO3166::Country do
263
423
  countries = ISO3166::Country.new(:de).translation('xxx')
264
424
  expect(countries).to be_nil
265
425
  end
426
+
427
+ context 'should return variant locales' do
428
+ it 'should return different value for Chinese variants' do
429
+ ISO3166.configuration.locales = [:'zh-cn', :'zh-hk', :'zh-tw']
430
+ name_cn = ISO3166::Country['TW'].translation('zh-cn')
431
+ name_hk = ISO3166::Country['TW'].translation('zh-hk')
432
+ name_tw = ISO3166::Country['TW'].translation('zh-tw')
433
+ expect([name_cn, name_hk, name_tw].uniq.size).to eql 3
434
+ end
435
+
436
+ it 'should return different value for Portuguese variants' do
437
+ ISO3166.configuration.locales = [:pt, :'pt-br']
438
+ name_pt = ISO3166::Country['SG'].translation('pt')
439
+ name_br = ISO3166::Country['SG'].translation('pt-br')
440
+ expect([name_pt, name_br].uniq.size).to eql 2
441
+ end
442
+ end
266
443
  end
267
444
 
268
445
  describe 'translations' do
269
446
  it 'should return an hash of all country names translated to the selected locale' do
270
447
  countries = ISO3166::Country.translations('fr')
271
448
  expect(countries).to be_an(Hash)
272
- expect(countries.first[0]).to eq('AF')
273
- expect(countries.first).to eq(%w(AF Afghanistan))
449
+ expect(countries.first[0]).to eq('AW')
450
+ expect(countries.first).to eq(%w(AW Aruba))
274
451
  # countries missing the desired locale will not be added to the list
275
452
  # so all 250 countries may not be returned, 'fr' returns 249, for example
276
- expect(countries.size).to eq(249)
453
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
277
454
  end
278
455
 
279
456
  it 'should return an hash of all country names in English if no locale is passed' do
280
457
  countries = ISO3166::Country.translations
281
458
  expect(countries).to be_an(Hash)
282
- expect(countries.first[0]).to eq('AF')
283
- expect(countries.first).to eq(%w(AF Afghanistan))
284
- expect(countries.size).to eq(249)
459
+ expect(countries.first[0]).to eq('AW')
460
+ expect(countries.first).to eq(%w(AW Aruba))
461
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
285
462
  end
286
463
  end
287
464
 
@@ -311,48 +488,18 @@ describe ISO3166::Country do
311
488
 
312
489
  describe 'currency' do
313
490
  it 'should return an instance of Currency' do
314
- expect(country.currency).to be_a(ISO4217::Currency)
491
+ expect(country.currency).to be_a(Money::Currency)
315
492
  end
316
493
 
317
494
  it 'should allow access to symbol' do
318
- expect(country.currency[:symbol]).to eq('$')
319
- end
320
- end
321
-
322
- describe 'Country class' do
323
- context "when loaded via 'iso3166' existance" do
324
- subject { defined?(Country) }
325
-
326
- it { is_expected.to be_falsey }
327
- end
328
-
329
- context "when loaded via 'global'" do
330
- before { require 'countries/global' }
331
-
332
- describe 'existance' do
333
- subject { defined?(Country) }
334
-
335
- it { is_expected.to be_truthy }
336
- end
337
-
338
- describe 'superclass' do
339
- subject { Country.superclass }
340
-
341
- it { is_expected.to eq(ISO3166::Country) }
342
- end
343
-
344
- describe 'to_s' do
345
- it 'should return the country name' do
346
- expect(Country.new('GB').to_s).to eq('United Kingdom')
347
- end
348
- end
495
+ expect(country.currency.symbol).to eq('$')
349
496
  end
350
497
  end
351
498
 
352
499
  describe 'codes' do
353
500
  it 'returns a hash with the data of the country' do
354
501
  expect(ISO3166::Country.codes).to be_a Array
355
- expect(ISO3166::Country.codes.size).to eq(250)
502
+ expect(ISO3166::Country.codes.size).to eq(NUM_OF_COUNTRIES)
356
503
  end
357
504
  end
358
505
 
@@ -394,29 +541,106 @@ describe ISO3166::Country do
394
541
  end
395
542
 
396
543
  it 'also performs searches with regexps and forces it to ignore case' do
397
- spain_data = ISO3166::Country.find_all_by(:names, /EspaΓ±/)
544
+ spain_data = ISO3166::Country.find_all_by(:unofficial_names, /EspaΓ±/)
398
545
  expect(spain_data).to be_a Hash
399
546
  expect(spain_data.keys).to eq(['ES'])
400
547
  end
548
+
549
+ it 'performs reasonably' do
550
+ start = Time.now
551
+ 250.times do
552
+ lookup = ['ZM', 'ZMB', 'Zambia', 'US', 'USA', 'United States'].sample
553
+ case lookup.length
554
+ when 2 then ISO3166::Country.find_all_by(:alpha2, lookup)
555
+ when 3 then ISO3166::Country.find_all_by(:alpha3, lookup)
556
+ else ISO3166::Country.find_all_by(:iso_short_name, lookup)
557
+ end
558
+ end
559
+ expect(Time.now - start).to be < 1
560
+ end
401
561
  end
402
562
 
403
563
  describe 'hash finder methods' do
404
- context "when search name in 'name'" do
405
- subject { ISO3166::Country.find_by_name('Poland') }
564
+ context "when search name in 'iso_short_name'" do
565
+ subject { ISO3166::Country.find_by_iso_short_name('Poland') }
566
+ it 'should return' do
567
+ expect(subject.first).to eq('PL')
568
+ end
569
+ end
570
+
571
+ context "when search lowercase name in 'iso_short_name'" do
572
+ subject { ISO3166::Country.find_by_iso_short_name('poland') }
406
573
  it 'should return' do
407
574
  expect(subject.first).to eq('PL')
408
575
  end
409
576
  end
410
577
 
411
- context "when search lowercase name in 'name'" do
412
- subject { ISO3166::Country.find_by_name('poland') }
578
+ context "when search name with comma in 'iso_short_name'" do
579
+ subject { ISO3166::Country.find_by_iso_short_name(country_name) }
580
+
581
+ context 'with Republic of Korea' do
582
+ let(:country_name) { 'Korea, Republic of' }
583
+ it 'should return' do
584
+ expect(subject.first).to eq('KR')
585
+ end
586
+ end
587
+
588
+ context 'with Bolivia' do
589
+ let(:country_name) { 'Bolivia, Plurinational State of' }
590
+ it 'should return' do
591
+ expect(subject.first).to eq('BO')
592
+ end
593
+ end
594
+
595
+ context 'with Bonaire' do
596
+ let(:country_name) { 'Bonaire, Sint Eustatius and Saba' }
597
+ it 'should return' do
598
+ expect(subject.first).to eq('BQ')
599
+ end
600
+ end
601
+ end
602
+
603
+ context 'when search lowercase multibyte name found' do
604
+ subject { ISO3166::Country.find_country_by_unofficial_names('россия') }
605
+
606
+ it 'should be a country instance' do
607
+ expect(subject).to be_a(ISO3166::Country)
608
+ expect(subject.alpha2).to eq('RU')
609
+ end
610
+ end
611
+
612
+ context 'when search lowercase multibyte name found' do
613
+ subject { ISO3166::Country.find_country_by_unofficial_names(/россия/) }
614
+
615
+ it 'should be a country instance' do
616
+ expect(subject).to be_a(ISO3166::Country)
617
+ expect(subject.alpha2).to eq('RU')
618
+ end
619
+ end
620
+
621
+ context 'when accents are not used' do
622
+ subject { ISO3166::Country.find_country_by_unofficial_names('emirats Arabes Unis') }
623
+
624
+ it 'should be a country instance' do
625
+ expect(subject).to be_a(ISO3166::Country)
626
+ expect(subject.alpha2).to eq('AE')
627
+ end
628
+ end
629
+
630
+ context "when search name in 'unofficial_names'" do
631
+ subject { ISO3166::Country.find_by_unofficial_names('Polonia') }
413
632
  it 'should return' do
414
633
  expect(subject.first).to eq('PL')
415
634
  end
416
635
  end
417
636
 
418
- context "when search name in 'names'" do
419
- subject { ISO3166::Country.find_by_name('Polonia') }
637
+ context "when search name in 'translated_names'" do
638
+ before do
639
+ ISO3166.configure do |config|
640
+ config.locales = [:bs]
641
+ end
642
+ end
643
+ subject { ISO3166::Country.find_by_translated_names('Poljska') }
420
644
  it 'should return' do
421
645
  expect(subject.first).to eq('PL')
422
646
  end
@@ -449,7 +673,7 @@ describe ISO3166::Country do
449
673
 
450
674
  describe 'country finder methods' do
451
675
  context 'when search name found' do
452
- let(:uk) { ISO3166::Country.find_country_by_name('United Kingdom') }
676
+ let(:uk) { ISO3166::Country.find_country_by_unofficial_names('United Kingdom') }
453
677
 
454
678
  it 'should be a country instance' do
455
679
  expect(uk).to be_a(ISO3166::Country)
@@ -458,7 +682,7 @@ describe ISO3166::Country do
458
682
  end
459
683
 
460
684
  context 'when search lowercase name found' do
461
- let(:uk) { ISO3166::Country.find_country_by_name('united kingdom') }
685
+ let(:uk) { ISO3166::Country.find_country_by_unofficial_names('united kingdom') }
462
686
 
463
687
  it 'should be a country instance' do
464
688
  expect(uk).to be_a(ISO3166::Country)
@@ -466,7 +690,21 @@ describe ISO3166::Country do
466
690
  end
467
691
  end
468
692
 
693
+ context 'when the search term contains comma' do
694
+ let(:korea) { ISO3166::Country.find_country_by_unofficial_names('Korea, Republic of') }
695
+
696
+ it 'should be a country instance' do
697
+ expect(korea).to be_a(ISO3166::Country)
698
+ expect(korea.alpha2).to eq('KR')
699
+ end
700
+ end
701
+
469
702
  context 'when search translation found' do
703
+ before do
704
+ ISO3166.configure do |config|
705
+ config.locales = [:bs]
706
+ end
707
+ end
470
708
  let(:uk) { ISO3166::Country.find_country_by_translated_names('Velika Britanija') }
471
709
 
472
710
  it 'should be a country instance' do
@@ -475,8 +713,24 @@ describe ISO3166::Country do
475
713
  end
476
714
  end
477
715
 
716
+ context 'regression test for #388' do
717
+ let(:no_country) { ISO3166::Country.find_country_by_translated_names(nil) }
718
+
719
+ it 'should be a country instance' do
720
+ expect(no_country).to_not be_a(ISO3166::Country)
721
+ expect(no_country).to eq nil
722
+ end
723
+ end
724
+
725
+ context 'when attempting to search by translations hash' do
726
+ let(:uk) { ISO3166::Country.find_country_by_translations({}) }
727
+
728
+ it 'should be a country instance' do
729
+ expect { uk }.to raise_error(RuntimeError)
730
+ end
731
+ end
478
732
  context 'when search name not found' do
479
- let(:bogus) { ISO3166::Country.find_country_by_name('Does not exist') }
733
+ let(:bogus) { ISO3166::Country.find_country_by_unofficial_names('Does not exist') }
480
734
 
481
735
  it 'should be a country instance' do
482
736
  expect(bogus).to eq(nil)
@@ -485,7 +739,7 @@ describe ISO3166::Country do
485
739
 
486
740
  # Spot checks #243
487
741
  context 'when search name not found' do
488
- let(:belgium) { ISO3166::Country.find_country_by_name('Belgium') }
742
+ let(:belgium) { ISO3166::Country.find_country_by_unofficial_names('Belgium') }
489
743
 
490
744
  it 'should be a country instance' do
491
745
  expect(belgium.alpha2).to eq('BE')
@@ -494,7 +748,7 @@ describe ISO3166::Country do
494
748
 
495
749
  # Spot checks #240
496
750
  context 'when search name not found' do
497
- let(:canada) { ISO3166::Country.find_country_by_name('Canada') }
751
+ let(:canada) { ISO3166::Country.find_country_by_unofficial_names('Canada') }
498
752
 
499
753
  it 'should be a country instance' do
500
754
  expect(canada.alpha2).to eq('CA')
@@ -503,7 +757,7 @@ describe ISO3166::Country do
503
757
 
504
758
  # Spot checks #241
505
759
  context 'when search name not found' do
506
- let(:israel) { ISO3166::Country.find_country_by_name('Israel') }
760
+ let(:israel) { ISO3166::Country.find_country_by_unofficial_names('Israel') }
507
761
 
508
762
  it 'should be a country instance' do
509
763
  expect(israel.alpha2).to eq('IL')
@@ -512,7 +766,7 @@ describe ISO3166::Country do
512
766
 
513
767
  # Spot checks #241
514
768
  context 'when search name not found' do
515
- let(:israel) { ISO3166::Country.find_by_name('Israel') }
769
+ let(:israel) { ISO3166::Country.find_by_iso_short_name('Israel') }
516
770
 
517
771
  it 'should be a country instance' do
518
772
  expect(israel[0]).to eq('IL')
@@ -521,7 +775,7 @@ describe ISO3166::Country do
521
775
 
522
776
  # Spot checks #241
523
777
  context 'when search name not found' do
524
- let(:israel) { ISO3166::Country.find_all_by(:name, 'Israel') }
778
+ let(:israel) { ISO3166::Country.find_all_by(:iso_short_name, 'Israel') }
525
779
 
526
780
  it 'should be a country instance' do
527
781
  expect(israel.size).to eq(1)
@@ -554,10 +808,49 @@ describe ISO3166::Country do
554
808
  end
555
809
  end
556
810
 
811
+ describe 'finder methods respond_to_missing?' do
812
+ subject { ISO3166::Country.respond_to?(method_name) }
813
+ describe 'find_all_by' do
814
+ context 'find by a valid Country attribute' do
815
+ let(:method_name) { :find_all_by_currency }
816
+ it { is_expected.to be true }
817
+ end
818
+
819
+ context 'find by an invalid attribute' do
820
+ let(:method_name) { :find_all_by_invalid }
821
+ it { is_expected.to be false }
822
+ end
823
+ end
824
+
825
+ describe 'hash finder methods' do
826
+ context 'find by a valid Country attribute' do
827
+ let(:method_name) { :find_by_iso_short_name }
828
+ it { is_expected.to be true }
829
+ end
830
+
831
+ context 'find by an invalid attribute' do
832
+ let(:method_name) { :find_by_invalid }
833
+ it { is_expected.to be false }
834
+ end
835
+ end
836
+
837
+ describe 'country finder methods' do
838
+ context 'find country by a valid Country attribute' do
839
+ let(:method_name) { :find_country_by_alpha3 }
840
+ it { is_expected.to be true }
841
+ end
842
+
843
+ context 'find by an invalid attribute' do
844
+ let(:method_name) { :find_country_by_invalid }
845
+ it { is_expected.to be false }
846
+ end
847
+ end
848
+ end
849
+
557
850
  describe 'names in Data' do
558
851
  it 'should be unique (to allow .find_by_name work properly)' do
559
- names = ISO3166::Country::Setup.data.map do |_k, v|
560
- [v['name'], v['names']].flatten.uniq
852
+ names = ISO3166::Data.cache.map do |_k, v|
853
+ [v['iso_short_name'], v['unofficial_names']].flatten.uniq
561
854
  end.flatten
562
855
 
563
856
  expect(names.size).to eq(names.uniq.size)
@@ -568,7 +861,7 @@ describe ISO3166::Country do
568
861
  let(:norway) { ISO3166::Country.search('NO') }
569
862
 
570
863
  it 'should have a currency' do
571
- expect(norway.currency).to be_a(ISO4217::Currency)
864
+ expect(norway.currency).to be_a(Money::Currency)
572
865
  end
573
866
  end
574
867
 
@@ -576,7 +869,7 @@ describe ISO3166::Country do
576
869
  let(:guernsey) { ISO3166::Country.search('GG') }
577
870
 
578
871
  it 'should have a currency' do
579
- expect(guernsey.currency.code).to eq('GBP')
872
+ expect(guernsey.currency.iso_code).to eq('GBP')
580
873
  end
581
874
  end
582
875
 
@@ -600,19 +893,48 @@ describe ISO3166::Country do
600
893
  end
601
894
  end
602
895
 
896
+ describe 'in_eea?' do
897
+ let(:netherlands) { ISO3166::Country.search('NL') }
898
+
899
+ it 'should return false for countries without eea_member flag' do
900
+ expect(country.in_eea?).to be_falsey
901
+ end
902
+
903
+ it 'should return true for countries with eea_member flag set to true' do
904
+ expect(netherlands.in_eea?).to be_truthy
905
+ end
906
+ end
907
+
908
+ describe 'in_esm?' do
909
+ let(:netherlands) { ISO3166::Country.search('NL') }
910
+ let(:switzerland) { ISO3166::Country.search('CH') }
911
+
912
+ it 'should return false for countries without esm_member or eea_member flag' do
913
+ expect(country.in_esm?).to be_falsey
914
+ end
915
+
916
+ it 'should return true for countries with eea_member flag set to true' do
917
+ expect(netherlands.in_esm?).to be_truthy
918
+ end
919
+
920
+ it 'should return true for countries with esm_member flag set to true' do
921
+ expect(switzerland.in_esm?).to be_truthy
922
+ end
923
+ end
924
+
603
925
  describe 'gec' do
604
926
  it 'should return the country\'s GEC code' do
605
927
  expect(ISO3166::Country.new('NA').gec).to eql 'WA'
606
928
  end
607
929
 
608
930
  it 'should return nil if the country does not have a GEC code' do
609
- expect(ISO3166::Country.new('AN').gec).to eql nil
931
+ expect(ISO3166::Country.new('UM').gec).to eql nil
610
932
  end
611
933
  end
612
934
 
613
935
  describe 'to_s' do
614
- it 'should return the country name' do
615
- expect(ISO3166::Country.new('GB').to_s).to eq('United Kingdom')
936
+ it 'should return the country iso_short_name' do
937
+ expect(ISO3166::Country.new('GB').to_s).to eq('United Kingdom of Great Britain and Northern Ireland')
616
938
  end
617
939
  end
618
940
 
@@ -646,7 +968,71 @@ describe ISO3166::Country do
646
968
  it 'should return country if not convertable input given' do
647
969
  expect do
648
970
  ISO3166::Country(42)
649
- end.to raise_error(TypeError, "can't convert Fixnum into ISO3166::Country")
971
+ end.to raise_error(TypeError, /can't convert ([A-z]+) into ISO3166::Country/)
972
+ end
973
+ end
974
+
975
+ describe 'Added country names to search by' do
976
+ it 'should return country code for Democratic Republic of the Congo' do
977
+ expect(ISO3166::Country.find_country_by_unofficial_names('Democratic Republic of the Congo').alpha2).to eq 'CD'
978
+ end
979
+ it 'should return country code for Ivory Coast' do
980
+ expect(ISO3166::Country.find_country_by_unofficial_names('Ivory Coast').alpha2).to eq 'CI'
981
+ end
982
+ it 'should return Pakistan code for Guinea Bissau' do
983
+ expect(ISO3166::Country.find_country_by_unofficial_names('Guinea Bissau').alpha2).to eq 'GW'
984
+ end
985
+ it 'should return Pakistan code for St Kitts and Nevis' do
986
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Kitts and Nevis').alpha2).to eq 'KN'
987
+ end
988
+ it 'should return Pakistan code for St Lucia' do
989
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Lucia').alpha2).to eq 'LC'
990
+ expect(ISO3166::Country.find_country_by_unofficial_names('St. Lucia').alpha2).to eq 'LC'
991
+ end
992
+ it 'should return Pakistan code for Turks and Caicos' do
993
+ expect(ISO3166::Country.find_country_by_unofficial_names('Turks and Caicos').alpha2).to eq 'TC'
994
+ end
995
+ it 'should return Pakistan code for St Vincent Grenadines' do
996
+ expect(ISO3166::Country.find_country_by_unofficial_names('St Vincent Grenadines').alpha2).to eq 'VC'
997
+ expect(ISO3166::Country.find_country_by_unofficial_names('St. Vincent Grenadines').alpha2).to eq 'VC'
998
+ end
999
+ it 'should return country code for Palestinian Authority' do
1000
+ expect(ISO3166::Country.find_country_by_unofficial_names('Palestinian Authority').alpha2).to eq 'PS'
1001
+ end
1002
+ end
1003
+
1004
+ describe 'Emoji' do
1005
+ it 'has an emoji flag' do
1006
+ expect(country.emoji_flag).to eq 'πŸ‡ΊπŸ‡Έ'
1007
+ end
1008
+ end
1009
+
1010
+ describe '#un_locode' do
1011
+ let(:countries) { ISO3166::Country.all }
1012
+
1013
+ it 'should have two letter un_locode for each country' do
1014
+ expect(countries.all? { |country| !country.un_locode.nil? }).to be
1015
+ expect(countries.all? { |country| country.un_locode.length == 2 }).to be
1016
+ end
1017
+ end
1018
+
1019
+ describe '.pluck' do
1020
+ let(:args) { [] }
1021
+
1022
+ subject { ISO3166::Country.pluck(*args) }
1023
+
1024
+ it "returns empty arrays" do
1025
+ expect(subject.first).to be_empty
1026
+ expect(subject.last).to be_empty
1027
+ end
1028
+
1029
+ context "when asking for alpha2, alpha3 and iso_short_name" do
1030
+ let(:args) { [:alpha2, :alpha3, :iso_short_name] }
1031
+
1032
+ it "returns the correct values" do
1033
+ expect(subject.first).to eq(["AD", "AND", "Andorra"])
1034
+ expect(subject.last).to eq(["ZW", "ZWE", "Zimbabwe"])
1035
+ end
650
1036
  end
651
1037
  end
652
1038
  end