countries 1.2.2 → 4.2.3

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 (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
@@ -1,201 +1,257 @@
1
- module ISO3166; end
2
-
3
- class ISO3166::Country
4
- Setup = ISO3166::Setup.new
5
-
6
- AttrReaders = [
7
- :number,
8
- :alpha2,
9
- :alpha3,
10
- :name,
11
- :names,
12
- :latitude,
13
- :longitude,
14
- :continent,
15
- :region,
16
- :subregion,
17
- :world_region,
18
- :country_code,
19
- :national_destination_code_lengths,
20
- :national_number_lengths,
21
- :international_prefix,
22
- :national_prefix,
23
- :address_format,
24
- :translations,
25
- :translated_names,
26
- :ioc,
27
- :gec,
28
- :un_locode,
29
- :languages,
30
- :nationality,
31
- :dissolved_on,
32
- :eu_member,
33
- :alt_currency,
34
- :vat_rates,
35
- :postal_code,
36
- :min_longitude,
37
- :min_latitude,
38
- :max_longitude,
39
- :max_latitude,
40
- :latitude_dec,
41
- :longitude_dec
42
- ]
43
-
44
- AttrReaders.each do |meth|
45
- define_method meth do
46
- @data[meth.to_s]
1
+ module ISO3166
2
+ class Country
3
+ extend CountryClassMethods
4
+ include Emoji
5
+ attr_reader :data
6
+
7
+ ISO3166::DEFAULT_COUNTRY_HASH.each do |method_name, _type|
8
+ define_method method_name do
9
+ data[method_name.to_s]
10
+ end
47
11
  end
48
- end
49
-
50
- attr_reader :data
51
-
52
- def initialize(country_data)
53
- @data = country_data.is_a?(Hash) ? country_data : ISO3166::Data.new(country_data).call
54
- end
55
-
56
- def valid?
57
- !(@data.nil? || @data.empty?)
58
- end
59
-
60
- alias_method :zip, :postal_code
61
- alias_method :zip?, :postal_code
62
- alias_method :postal_code?, :postal_code
63
-
64
- def ==(other)
65
- other == data
66
- end
67
-
68
- def <=>(other)
69
- to_s <=> other.to_s
70
- end
71
-
72
- def currency
73
- ISO4217::Currency.from_code(@data['currency'])
74
- end
75
12
 
76
- def currency_code
77
- @data['currency']
78
- end
13
+ ISO3166::DEFAULT_COUNTRY_HASH['geo'].each do |method_name, _type|
14
+ define_method method_name do
15
+ data['geo'][method_name.to_s]
16
+ end
17
+ end
79
18
 
80
- def subdivisions
81
- @subdivisions ||= subdivisions? ? YAML.load_file(File.join(File.dirname(__FILE__), 'data', 'subdivisions', "#{alpha2}.yaml")) : {}
82
- end
19
+ def initialize(country_data)
20
+ @country_data_or_code = country_data
21
+ reload
22
+ end
83
23
 
84
- alias_method :states, :subdivisions
24
+ def valid?
25
+ !(data.nil? || data.empty?)
26
+ end
85
27
 
86
- def subdivisions?
87
- File.exist?(File.join(File.dirname(__FILE__), 'data', 'subdivisions', "#{alpha2}.yaml"))
88
- end
28
+ alias zip postal_code
29
+ alias zip? postal_code
30
+ alias postal_code? postal_code
31
+ alias zip_format postal_code_format
32
+ alias languages languages_official
33
+
34
+ def latitude_dec
35
+ if RUBY_VERSION =~ /^3\.\d\.\d/
36
+ warn "DEPRECATION WARNING: The Country#latitude_dec method has been deprecated and will be removed in 5.0. Please use Country#latitude instead.", uplevel: 1, category: :deprecated
37
+ else
38
+ warn "DEPRECATION WARNING: The Country#latitude_dec method has been deprecated and will be removed in 5.0. Please use Country#latitude instead.", uplevel: 1
39
+ end
40
+ latitude
41
+ end
89
42
 
90
- def in_eu?
91
- @data['eu_member'].nil? ? false : @data['eu_member']
92
- end
43
+ def longitude_dec
44
+ if RUBY_VERSION =~ /^3\.\d\.\d/
45
+ warn "DEPRECATION WARNING: The Country#longitude_dec method has been deprecated and will be removed in 5.0. Please use Country#longitude instead.", uplevel: 1, category: :deprecated
46
+ else
47
+ warn "DEPRECATION WARNING: The Country#longitude_dec method has been deprecated and will be removed in 5.0. Please use Country#longitude instead.", uplevel: 1
48
+ end
49
+ longitude
50
+ end
93
51
 
94
- def to_s
95
- @data['name']
96
- end
52
+ def ==(other)
53
+ other.respond_to?(:alpha2) && other.alpha2 == alpha2
54
+ end
97
55
 
98
- def translation(locale = 'en')
99
- @data['translations'][locale.downcase]
100
- end
56
+ def eql?(other)
57
+ self == other
58
+ end
101
59
 
102
- def local_names
103
- @local_names ||= languages.map { |language| translations[language] }
104
- end
60
+ def hash
61
+ [alpha2, alpha3].hash
62
+ end
105
63
 
106
- def local_name
107
- @local_name ||= local_names.first
108
- end
64
+ def <=>(other)
65
+ to_s <=> other.to_s
66
+ end
109
67
 
110
- class << self
111
- def new(country_data)
112
- super if country_data.is_a?(Hash) || codes.include?(country_data.to_s.upcase)
68
+ # +true+ if this Country has any Subdivisions.
69
+ def subdivisions?
70
+ !subdivisions.empty?
113
71
  end
114
72
 
115
- def codes
116
- Setup.codes
73
+ # @return [Array<ISO3166::Subdivision>] the list of subdivisions for this Country.
74
+ def subdivisions
75
+ @subdivisions ||= if data['subdivisions']
76
+ self.class.create_subdivisions(data['subdivisions'])
77
+ else
78
+ self.class.subdivisions(alpha2)
79
+ end
117
80
  end
118
81
 
119
- def all(&blk)
120
- blk ||= proc { |_alpha2, d| ISO3166::Country.new(d) }
121
- Setup.data.map(&blk)
82
+ # @param locale [String] The locale to use for translations.
83
+ # @return [Array<Array>] This Country's subdivision pairs of names and codes.
84
+ def subdivision_names_with_codes(locale = 'en')
85
+ subdivisions.map { |k, v| [v.translations[locale] || v.name, k] }
122
86
  end
123
87
 
124
- alias_method :countries, :all
88
+ alias states subdivisions
125
89
 
126
- def all_translated(locale = 'en')
127
- translations(locale).values
90
+ # +true+ if this country is a member of the European Union.
91
+ def in_eu?
92
+ data['eu_member'].nil? ? false : data['eu_member']
128
93
  end
129
94
 
130
- def all_names_with_codes(locale = 'en')
131
- ISO3166::Country.all.map do |c|
132
- [(c.translation(locale) || c.name).html_safe, c.alpha2]
133
- end.sort_by { |d| d[0] }
95
+ # +true+ if this country is a member of the European Economic Area.
96
+ def in_eea?
97
+ data['eea_member'].nil? ? false : data['eea_member']
134
98
  end
135
99
 
136
- def translations(locale = 'en')
137
- I18nData.countries(locale.upcase)
100
+ # +true+ if this country is a member of the European Single Market.
101
+ def in_esm?
102
+ data['esm_member'].nil? ? in_eea? : data['esm_member']
138
103
  end
139
104
 
140
- def search(query)
141
- country = new(query.to_s.upcase)
142
- (country && country.valid?) ? country : nil
105
+ def to_s
106
+ data['iso_short_name']
143
107
  end
144
108
 
145
- def [](query)
146
- search(query)
109
+ # @return [Array<String>] the list of names for this Country in all loaded locales.
110
+ def translated_names
111
+ data['translations'].values
147
112
  end
148
113
 
149
- def method_missing(*m)
150
- regex = m.first.to_s.match(/^find_(all_)?(country_|countries_)?by_(.+)/)
151
- super unless regex
114
+ # @param locale [String] The locale to use for translations.
115
+ # @return [String] the name of this Country in the selected locale.
116
+ def translation(locale = 'en')
117
+ data['translations'][locale.to_s.downcase]
118
+ end
152
119
 
153
- countries = find_by(Regexp.last_match[3], m[1], Regexp.last_match[2])
154
- Regexp.last_match[1] ? countries : countries.last
120
+ # @return [String] the “common name” of this Country in English.
121
+ def common_name
122
+ ISO3166.configuration.locales = ISO3166.configuration.locales.append(:en).uniq
123
+ translation('en')
155
124
  end
156
125
 
157
- def find_all_by(attribute, val)
158
- attributes, value = parse_attributes(attribute, val)
126
+ # @return [Array<String>] TThe list of names for this Country, in this Country's locales.
127
+ def local_names
128
+ ISO3166.configuration.locales = (ISO3166.configuration.locales + languages.map(&:to_sym)).uniq
129
+ reload
159
130
 
160
- Setup.data.select do |_, v|
161
- attributes.map do |attr|
162
- Array(v[attr]).any? { |n| value === n.to_s.downcase }
163
- end.include?(true)
164
- end
131
+ @local_names ||= languages.map { |language| translations[language] }
165
132
  end
166
133
 
167
- protected
168
-
169
- def parse_attributes(attribute, val)
170
- fail "Invalid attribute name '#{attribute}'" unless instance_methods.include?(attribute.to_sym)
134
+ # @return [String] The name for this Country, in this Country's locale.
135
+ def local_name
136
+ @local_name ||= local_names.first
137
+ end
171
138
 
172
- attributes = Array(attribute.to_s)
173
- if attributes == ['name']
174
- attributes << 'names'
175
- # TODO: Revisit when better data from i18n_data
176
- # attributes << 'translated_names'
139
+ # @return [String] This Country's ISO Short Name
140
+ # @deprecated Use {#iso_short_name} instead.
141
+ def name
142
+ if RUBY_VERSION =~ /^3\.\d\.\d/
143
+ warn "DEPRECATION WARNING: The Country#name method has been deprecated. Please use Country#iso_short_name instead or refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
144
+ else
145
+ warn "DEPRECATION WARNING: The Country#name method has been deprecated. Please use Country#iso_short_name instead or refer to the README file for more information on this change.", uplevel: 1
177
146
  end
178
-
179
- val = (val.is_a?(Regexp) ? Regexp.new(val.source, 'i') : val.to_s.downcase)
180
-
181
- [attributes, val]
147
+ iso_short_name
182
148
  end
183
149
 
184
- def find_by(attribute, value, obj = nil)
185
- find_all_by(attribute.downcase, value).map do |country|
186
- obj.nil? ? country : new(country.last)
150
+ # @return [Array<String>] Array of unofficial, slang names or aliases for this Country
151
+ # @deprecated Use {#unofficial_names} instead.
152
+ def names
153
+ if RUBY_VERSION =~ /^3\.\d\.\d/
154
+ warn "DEPRECATION WARNING: The Country#names method has been deprecated. Please use Country#unofficial_names instead or refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
155
+ else
156
+ warn "DEPRECATION WARNING: The Country#names method has been deprecated. Please use Country#unofficial_names instead or refer to the README file for more information on this change.", uplevel: 1
187
157
  end
158
+ unofficial_names
188
159
  end
189
- end
190
- end
191
160
 
192
- def ISO3166::Country(country_data_or_country)
193
- case country_data_or_country
194
- when ISO3166::Country
195
- country_data_or_country
196
- when String, Symbol
197
- ISO3166::Country.search(country_data_or_country)
198
- else
199
- fail TypeError, "can't convert #{country_data_or_country.class.name} into ISO3166::Country"
161
+ # @!attribute alpha2
162
+ # @return [String] the ISO3166 alpha-2 code for this Country
163
+ #
164
+ # @!attribute alpha3
165
+ # @return [String] the ISO3166 alpha-3 code for this Country
166
+ #
167
+ # @!attribute address_format
168
+ # @return [String] a template for formatting addresses in this Country.
169
+ #
170
+ # @!attribute continent
171
+ # @return [String] the continent for this Country
172
+ #
173
+ # @!attribute country_code
174
+ # @return [String] the country calling code for this Country
175
+ #
176
+ # @!attribute currency_code
177
+ # @return [String] the ISO 4217 currency code for this Country
178
+ #
179
+ # @!attribute gec
180
+ # @return [String] the "Geopolitical Entities and Codes", formerly FIPS 10-4 code for this Country
181
+ #
182
+ # @!attribute geo
183
+ # @return [Hash] the hash of coordinates for this Country.
184
+ #
185
+ # @!attribute international_prefix
186
+ # @return [String] the phone prefix used in this Country for dialing international numbers
187
+ #
188
+ # @!attribute ioc
189
+ # @return [String] The International Olympic Committee code for for this Country
190
+ #
191
+ # @!attribute national_destination_code_lengths
192
+ # @return [Array<Integer>] Lengths of phone number destination codes
193
+ #
194
+ # @!attribute national_number_lengths
195
+ # @return [Array<Integer>] Lengths of phone numbers
196
+ #
197
+ # @!attribute national_prefix
198
+ # @return [String] the phone prefix used in this Country for dialing national numbers
199
+ #
200
+ # @!attribute nanp_prefix
201
+ # @return [String] the NANP prefix code
202
+ #
203
+ # @!attribute nationality
204
+ # @return [String] the nationality for this Country, in English
205
+ #
206
+ # @!attribute number
207
+ # @return [String] The ISO 3166-1 numeric code for this Country
208
+ #
209
+ # @!attribute languages_official
210
+ # @return [Array<String>] the list of official languages (locale codes) for this Country
211
+ #
212
+ # @!attribute languages_spoken
213
+ # @return [Array<String>] the list of spoken languages (locale codes) for this Country
214
+ #
215
+ # @!attribute translations
216
+ # @return [Hash] The hash of country name translations for this Country.
217
+ #
218
+ # @!attribute postal_code
219
+ # @return [Boolean] Does this Country uses postal codes in addresses
220
+ #
221
+ # @!attribute postal_code_format
222
+ # @return [String] The regex for valid postal codes in this Country
223
+ #
224
+ # @!attribute region
225
+ # @return [String] The Region this country is in. Approximately matches the United Nations geoscheme
226
+ #
227
+ # @!attribute unofficial_names
228
+ # @return [Array<String>] Array of unofficial, slang names or aliases for this Country
229
+ #
230
+ # @!attribute start_of_week
231
+ # @return [String] The starting day of the week ( +'monday'+ or +'sunday'+ )
232
+ #
233
+ # @!attribute subregion
234
+ # @return [String] The Subegion this country is in. Approximately matches the United Nations geoscheme's Subregions
235
+ #
236
+ # @!attribute un_locode
237
+ # @return [String] The UN/LOCODE prefix for this Country
238
+ #
239
+ # @!attribute vat_rates
240
+ # @return [Hash] the hash of VAT Rates for this Country
241
+ #
242
+ # @!attribute world_region
243
+ # @return [String] The "World Region" this country is in: +"AMER"+ , +"APAC"+ or +"EMEA"+
244
+
245
+
246
+
247
+ private
248
+
249
+ def reload
250
+ @data = if @country_data_or_code.is_a?(Hash)
251
+ @country_data_or_code
252
+ else
253
+ ISO3166::Data.new(@country_data_or_code).call
254
+ end
255
+ end
200
256
  end
201
257
  end
@@ -1,20 +1,33 @@
1
1
  ---
2
2
  AD:
3
- continent: Europe
4
3
  alpha2: AD
5
4
  alpha3: AND
5
+ continent: Europe
6
6
  country_code: '376'
7
- currency: EUR
7
+ currency_code: EUR
8
+ gec: AN
9
+ geo:
10
+ latitude: 42.506285
11
+ longitude: 1.521801
12
+ max_latitude: 42.655791
13
+ max_longitude: 1.786639
14
+ min_latitude: 42.4287488
15
+ min_longitude: 1.4087052
16
+ bounds:
17
+ northeast:
18
+ lat: 42.655791
19
+ lng: 1.786639
20
+ southwest:
21
+ lat: 42.4287488
22
+ lng: 1.4087052
8
23
  international_prefix: '00'
9
24
  ioc: AND
10
- gec: AN
11
- latitude: 42 30 N
12
- longitude: 1 30 E
13
- name: Andorra
14
- names:
15
- - Andorre
16
- - Andorra
17
- - "アンドラ"
25
+ iso_long_name: The Principality of Andorra
26
+ iso_short_name: Andorra
27
+ languages_official:
28
+ - ca
29
+ languages_spoken:
30
+ - ca
18
31
  national_destination_code_lengths:
19
32
  - 2
20
33
  national_number_lengths:
@@ -23,18 +36,16 @@ AD:
23
36
  - 8
24
37
  - 9
25
38
  national_prefix: None
39
+ nationality: Andorran
26
40
  number: '020'
41
+ postal_code: true
42
+ postal_code_format: AD[1-7]0\d
27
43
  region: Europe
44
+ start_of_week: monday
28
45
  subregion: Southern Europe
29
- world_region: EMEA
30
46
  un_locode: AD
31
- languages:
32
- - ca
33
- nationality: Andorran
34
- postal_code: true
35
- min_longitude: '1.416667'
36
- min_latitude: '42.433333'
37
- max_longitude: '1.783333'
38
- max_latitude: '42.65'
39
- latitude_dec: '42.5506591796875'
40
- longitude_dec: '1.5762332677841187'
47
+ unofficial_names:
48
+ - Andorre
49
+ - Andorra
50
+ - アンドラ
51
+ world_region: EMEA
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  AE:
3
- continent: Asia
4
3
  address_format: |-
5
4
  {{recipient}}
6
5
  {{street}}
@@ -8,22 +7,32 @@ AE:
8
7
  {{country}}
9
8
  alpha2: AE
10
9
  alpha3: ARE
10
+ continent: Asia
11
11
  country_code: '971'
12
- currency: AED
12
+ currency_code: AED
13
+ gec: AE
14
+ geo:
15
+ latitude: 23.424076
16
+ longitude: 53.847818
17
+ max_latitude: 26.0765
18
+ max_longitude: 56.4395001
19
+ min_latitude: 22.6315138
20
+ min_longitude: 51.4723
21
+ bounds:
22
+ northeast:
23
+ lat: 26.0765
24
+ lng: 56.4395001
25
+ southwest:
26
+ lat: 22.6315138
27
+ lng: 51.4723
13
28
  international_prefix: '00'
14
29
  ioc: UAE
15
- gec: AE
16
- latitude: 24 00 N
17
- longitude: 54 00 E
18
- name: United Arab Emirates
19
- names:
20
- - United Arab Emirates
21
- - "الإمارات العربية المتحدة"
22
- - Vereinigte Arabische Emirate
23
- - "Émirats Arabes Unis"
24
- - Emiratos Árabes Unidos
25
- - "アラブ首長国連邦"
26
- - Verenigde Arabische Emiraten
30
+ iso_long_name: The United Arab Emirates
31
+ iso_short_name: United Arab Emirates
32
+ languages_official:
33
+ - ar
34
+ languages_spoken:
35
+ - ar
27
36
  national_destination_code_lengths:
28
37
  - 2
29
38
  national_number_lengths:
@@ -31,18 +40,24 @@ AE:
31
40
  - 8
32
41
  - 9
33
42
  national_prefix: '0'
43
+ nationality: Emirian
34
44
  number: '784'
45
+ postal_code: false
35
46
  region: Asia
47
+ start_of_week: monday
36
48
  subregion: Western Asia
37
- world_region: EMEA
38
49
  un_locode: AE
39
- languages:
40
- - ar
41
- nationality: Emirian
42
- postal_code: false
43
- min_longitude: '45'
44
- min_latitude: '22.166667'
45
- max_longitude: '58'
46
- max_latitude: '26.133333'
47
- latitude_dec: '23.684776306152344'
48
- longitude_dec: '54.536643981933594'
50
+ unofficial_names:
51
+ - United Arab Emirates
52
+ - الإمارات العربية المتحدة
53
+ - Vereinigte Arabische Emirate
54
+ - Émirats Arabes Unis
55
+ - Emiratos Árabes Unidos
56
+ - アラブ首長国連邦
57
+ - Verenigde Arabische Emiraten
58
+ vat_rates:
59
+ standard: 5
60
+ reduced: []
61
+ super_reduced:
62
+ parking:
63
+ world_region: EMEA
@@ -1,40 +1,53 @@
1
1
  ---
2
2
  AF:
3
- continent: Asia
4
3
  alpha2: AF
5
4
  alpha3: AFG
5
+ continent: Asia
6
6
  country_code: '93'
7
- currency: AFN
7
+ currency_code: AFN
8
+ gec: AF
9
+ geo:
10
+ latitude: 33.93911
11
+ longitude: 67.709953
12
+ max_latitude: 38.49087670000001
13
+ max_longitude: 74.8898619
14
+ min_latitude: 29.3772
15
+ min_longitude: 60.5170005
16
+ bounds:
17
+ northeast:
18
+ lat: 38.49087670000001
19
+ lng: 74.8898619
20
+ southwest:
21
+ lat: 29.3772
22
+ lng: 60.5170005
8
23
  international_prefix: '00'
9
24
  ioc: AFG
10
- gec: AF
11
- latitude: 33 00 N
12
- longitude: 65 00 E
13
- name: Afghanistan
14
- names:
15
- - Afghanistan
16
- - Afganistán
17
- - "アフガニスタン"
25
+ iso_long_name: The Islamic Republic of Afghanistan
26
+ iso_short_name: Afghanistan
27
+ languages_official:
28
+ - ps
29
+ - uz
30
+ - tk
31
+ languages_spoken:
32
+ - ps
33
+ - uz
34
+ - tk
18
35
  national_destination_code_lengths:
19
36
  - 2
20
37
  national_number_lengths:
21
38
  - 8
22
39
  - 9
23
40
  national_prefix: '0'
41
+ nationality: Afghan
24
42
  number: '004'
43
+ postal_code: true
44
+ postal_code_format: "\\d{4}"
25
45
  region: Asia
46
+ start_of_week: monday
26
47
  subregion: Southern Asia
27
- world_region: APAC
28
48
  un_locode: AF
29
- languages:
30
- - ps
31
- - uz
32
- - tk
33
- nationality: Afghan
34
- postal_code: true
35
- min_longitude: '60.566667'
36
- min_latitude: '29.383333'
37
- max_longitude: '74.8868713067'
38
- max_latitude: '38.483611'
39
- latitude_dec: '33.833248138427734'
40
- longitude_dec: '66.02528381347656'
49
+ unofficial_names:
50
+ - Afghanistan
51
+ - Afganistán
52
+ - アフガニスタン
53
+ world_region: APAC