countries 2.0.8 → 2.1.4

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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +167 -0
  4. data/README.markdown +95 -98
  5. data/Rakefile +9 -1
  6. data/countries.gemspec +4 -3
  7. data/lib/countries/cache/countries.json +1 -1
  8. data/lib/countries/cache/locales/he.json +1 -1
  9. data/lib/countries/country.rb +6 -2
  10. data/lib/countries/country/class_methods.rb +15 -6
  11. data/lib/countries/country/emoji.rb +3 -0
  12. data/lib/countries/data.rb +12 -3
  13. data/lib/countries/data/countries/BR.yaml +2 -2
  14. data/lib/countries/data/countries/BY.yaml +1 -1
  15. data/lib/countries/data/countries/CH.yaml +2 -2
  16. data/lib/countries/data/countries/FJ.yaml +1 -1
  17. data/lib/countries/data/countries/GB.yaml +1 -0
  18. data/lib/countries/data/countries/HK.yaml +1 -1
  19. data/lib/countries/data/countries/MX.yaml +5 -0
  20. data/lib/countries/data/countries/NO.yaml +5 -0
  21. data/lib/countries/data/countries/PH.yaml +5 -0
  22. data/lib/countries/data/countries/PN.yaml +1 -1
  23. data/lib/countries/data/countries/TW.yaml +1 -1
  24. data/lib/countries/data/countries/UM.yaml +1 -1
  25. data/lib/countries/data/subdivisions/AE.yaml +346 -7
  26. data/lib/countries/data/subdivisions/AF.yaml +1571 -11
  27. data/lib/countries/data/subdivisions/AG.yaml +282 -2
  28. data/lib/countries/data/subdivisions/AL.yaml +503 -1
  29. data/lib/countries/data/subdivisions/AM.yaml +539 -12
  30. data/lib/countries/data/subdivisions/AO.yaml +767 -2
  31. data/lib/countries/data/subdivisions/AR.yaml +1167 -2
  32. data/lib/countries/data/subdivisions/AT.yaml +500 -6
  33. data/lib/countries/data/subdivisions/AU.yaml +445 -0
  34. data/lib/countries/data/subdivisions/AZ.yaml +2836 -57
  35. data/lib/countries/data/subdivisions/BA.yaml +167 -1
  36. data/lib/countries/data/subdivisions/BB.yaml +377 -2
  37. data/lib/countries/data/subdivisions/BD.yaml +1344 -66
  38. data/lib/countries/data/subdivisions/BE.yaml +653 -10
  39. data/lib/countries/data/subdivisions/BF.yaml +1841 -1
  40. data/lib/countries/data/subdivisions/BG.yaml +1307 -6
  41. data/lib/countries/data/subdivisions/BH.yaml +102 -5
  42. data/lib/countries/data/subdivisions/BI.yaml +647 -0
  43. data/lib/countries/data/subdivisions/BJ.yaml +441 -0
  44. data/lib/countries/data/subdivisions/BN.yaml +154 -0
  45. data/lib/countries/data/subdivisions/BO.yaml +387 -1
  46. data/lib/countries/data/subdivisions/BQ.yaml +148 -0
  47. data/lib/countries/data/subdivisions/BR.yaml +1412 -1
  48. data/lib/countries/data/subdivisions/BS.yaml +1094 -0
  49. data/lib/countries/data/subdivisions/BT.yaml +707 -6
  50. data/lib/countries/data/subdivisions/BW.yaml +614 -3
  51. data/lib/countries/data/subdivisions/BY.yaml +375 -6
  52. data/lib/countries/data/subdivisions/BZ.yaml +200 -0
  53. data/lib/countries/data/subdivisions/CA.yaml +721 -0
  54. data/lib/countries/data/subdivisions/CD.yaml +697 -4
  55. data/lib/countries/data/subdivisions/CF.yaml +637 -1
  56. data/lib/countries/data/subdivisions/CG.yaml +401 -0
  57. data/lib/countries/data/subdivisions/CH.yaml +1327 -26
  58. data/lib/countries/data/subdivisions/CI.yaml +323 -21
  59. data/lib/countries/data/subdivisions/CL.yaml +656 -5
  60. data/lib/countries/data/subdivisions/CM.yaml +375 -3
  61. data/lib/countries/data/subdivisions/CN.yaml +1636 -5
  62. data/lib/countries/data/subdivisions/CO.yaml +1395 -2
  63. data/lib/countries/data/subdivisions/CR.yaml +260 -0
  64. data/lib/countries/data/subdivisions/CU.yaml +627 -3
  65. data/lib/countries/data/subdivisions/CV.yaml +741 -1
  66. data/lib/countries/data/subdivisions/CY.yaml +220 -6
  67. data/lib/countries/data/subdivisions/CZ.yaml +3049 -14
  68. data/lib/countries/data/subdivisions/DE.yaml +928 -8
  69. data/lib/countries/data/subdivisions/DJ.yaml +253 -0
  70. data/lib/countries/data/subdivisions/DK.yaml +230 -6
  71. data/lib/countries/data/subdivisions/DM.yaml +333 -2
  72. data/lib/countries/data/subdivisions/DO.yaml +1047 -8
  73. data/lib/countries/data/subdivisions/DZ.yaml +1968 -6
  74. data/lib/countries/data/subdivisions/EC.yaml +911 -0
  75. data/lib/countries/data/subdivisions/EE.yaml +713 -15
  76. data/lib/countries/data/subdivisions/EG.yaml +1126 -25
  77. data/lib/countries/data/subdivisions/ER.yaml +230 -3
  78. data/lib/countries/data/subdivisions/ES.yaml +3029 -13
  79. data/lib/countries/data/subdivisions/ET.yaml +514 -8
  80. data/lib/countries/data/subdivisions/FI.yaml +827 -0
  81. data/lib/countries/data/subdivisions/FJ.yaml +396 -0
  82. data/lib/countries/data/subdivisions/FM.yaml +131 -0
  83. data/lib/countries/data/subdivisions/FR.yaml +5687 -11
  84. data/lib/countries/data/subdivisions/GA.yaml +349 -0
  85. data/lib/countries/data/subdivisions/GB.yaml +7046 -33
  86. data/lib/countries/data/subdivisions/GD.yaml +227 -1
  87. data/lib/countries/data/subdivisions/GE.yaml +572 -2
  88. data/lib/countries/data/subdivisions/GH.yaml +371 -0
  89. data/lib/countries/data/subdivisions/GL.yaml +173 -0
  90. data/lib/countries/data/subdivisions/GM.yaml +250 -5
  91. data/lib/countries/data/subdivisions/GN.yaml +1143 -1
  92. data/lib/countries/data/subdivisions/GQ.yaml +301 -4
  93. data/lib/countries/data/subdivisions/GR.yaml +654 -28
  94. data/lib/countries/data/subdivisions/GT.yaml +875 -0
  95. data/lib/countries/data/subdivisions/GW.yaml +353 -0
  96. data/lib/countries/data/subdivisions/GY.yaml +315 -0
  97. data/lib/countries/data/subdivisions/HN.yaml +710 -1
  98. data/lib/countries/data/subdivisions/HR.yaml +967 -23
  99. data/lib/countries/data/subdivisions/HT.yaml +329 -1
  100. data/lib/countries/data/subdivisions/HU.yaml +2067 -1
  101. data/lib/countries/data/subdivisions/ID.yaml +1840 -21
  102. data/lib/countries/data/subdivisions/IE.yaml +1339 -1
  103. data/lib/countries/data/subdivisions/IL.yaml +256 -6
  104. data/lib/countries/data/subdivisions/IN.yaml +2044 -2
  105. data/lib/countries/data/subdivisions/IQ.yaml +760 -12
  106. data/lib/countries/data/subdivisions/IR.yaml +1434 -12
  107. data/lib/countries/data/subdivisions/IS.yaml +370 -8
  108. data/lib/countries/data/subdivisions/IT.yaml +6197 -16
  109. data/lib/countries/data/subdivisions/JM.yaml +461 -2
  110. data/lib/countries/data/subdivisions/JO.yaml +453 -8
  111. data/lib/countries/data/subdivisions/JP.yaml +2523 -54
  112. data/lib/countries/data/subdivisions/KE.yaml +698 -0
  113. data/lib/countries/data/subdivisions/KG.yaml +422 -3
  114. data/lib/countries/data/subdivisions/KH.yaml +871 -25
  115. data/lib/countries/data/subdivisions/KI.yaml +100 -0
  116. data/lib/countries/data/subdivisions/KM.yaml +134 -0
  117. data/lib/countries/data/subdivisions/KN.yaml +499 -2
  118. data/lib/countries/data/subdivisions/KP.yaml +474 -0
  119. data/lib/countries/data/subdivisions/KR.yaml +816 -16
  120. data/lib/countries/data/subdivisions/KW.yaml +184 -3
  121. data/lib/countries/data/subdivisions/{Ky.yaml → KY.yaml} +0 -0
  122. data/lib/countries/data/subdivisions/KZ.yaml +827 -14
  123. data/lib/countries/data/subdivisions/LA.yaml +630 -18
  124. data/lib/countries/data/subdivisions/LB.yaml +245 -5
  125. data/lib/countries/data/subdivisions/LC.yaml +304 -0
  126. data/lib/countries/data/subdivisions/LI.yaml +349 -2
  127. data/lib/countries/data/subdivisions/LK.yaml +955 -3
  128. data/lib/countries/data/subdivisions/LR.yaml +565 -0
  129. data/lib/countries/data/subdivisions/LS.yaml +362 -2
  130. data/lib/countries/data/subdivisions/LT.yaml +1563 -10
  131. data/lib/countries/data/subdivisions/LU.yaml +322 -3
  132. data/lib/countries/data/subdivisions/LV.yaml +4937 -3
  133. data/lib/countries/data/subdivisions/LY.yaml +836 -203
  134. data/lib/countries/data/subdivisions/MA.yaml +1803 -17
  135. data/lib/countries/data/subdivisions/MC.yaml +234 -0
  136. data/lib/countries/data/subdivisions/MD.yaml +1570 -5
  137. data/lib/countries/data/subdivisions/ME.yaml +669 -4
  138. data/lib/countries/data/subdivisions/MG.yaml +148 -0
  139. data/lib/countries/data/subdivisions/MH.yaml +543 -21
  140. data/lib/countries/data/subdivisions/MK.yaml +2548 -0
  141. data/lib/countries/data/subdivisions/ML.yaml +363 -0
  142. data/lib/countries/data/subdivisions/MM.yaml +534 -0
  143. data/lib/countries/data/subdivisions/MN.yaml +935 -17
  144. data/lib/countries/data/subdivisions/MR.yaml +428 -5
  145. data/lib/countries/data/subdivisions/MT.yaml +2534 -13
  146. data/lib/countries/data/subdivisions/MU.yaml +574 -7
  147. data/lib/countries/data/subdivisions/MV.yaml +719 -5
  148. data/lib/countries/data/subdivisions/MW.yaml +1056 -1
  149. data/lib/countries/data/subdivisions/MX.yaml +1655 -13
  150. data/lib/countries/data/subdivisions/MY.yaml +708 -7
  151. data/lib/countries/data/subdivisions/MZ.yaml +450 -3
  152. data/lib/countries/data/subdivisions/NA.yaml +483 -0
  153. data/lib/countries/data/subdivisions/NE.yaml +289 -0
  154. data/lib/countries/data/subdivisions/NG.yaml +1428 -2
  155. data/lib/countries/data/subdivisions/NI.yaml +660 -2
  156. data/lib/countries/data/subdivisions/NL.yaml +803 -3
  157. data/lib/countries/data/subdivisions/NO.yaml +1075 -0
  158. data/lib/countries/data/subdivisions/NP.yaml +572 -1
  159. data/lib/countries/data/subdivisions/NR.yaml +539 -2
  160. data/lib/countries/data/subdivisions/NZ.yaml +632 -2
  161. data/lib/countries/data/subdivisions/OM.yaml +396 -3
  162. data/lib/countries/data/subdivisions/PA.yaml +478 -0
  163. data/lib/countries/data/subdivisions/PE.yaml +1023 -2
  164. data/lib/countries/data/subdivisions/PG.yaml +788 -3
  165. data/lib/countries/data/subdivisions/PH.yaml +3055 -7
  166. data/lib/countries/data/subdivisions/PK.yaml +357 -2
  167. data/lib/countries/data/subdivisions/PL.yaml +807 -14
  168. data/lib/countries/data/subdivisions/PS.yaml +490 -0
  169. data/lib/countries/data/subdivisions/PT.yaml +741 -4
  170. data/lib/countries/data/subdivisions/PW.yaml +532 -1
  171. data/lib/countries/data/subdivisions/PY.yaml +687 -0
  172. data/lib/countries/data/subdivisions/QA.yaml +269 -3
  173. data/lib/countries/data/subdivisions/RO.yaml +1954 -21
  174. data/lib/countries/data/subdivisions/RS.yaml +1148 -14
  175. data/lib/countries/data/subdivisions/RU.yaml +4535 -20
  176. data/lib/countries/data/subdivisions/RW.yaml +220 -5
  177. data/lib/countries/data/subdivisions/SA.yaml +516 -19
  178. data/lib/countries/data/subdivisions/SB.yaml +363 -2
  179. data/lib/countries/data/subdivisions/SC.yaml +780 -6
  180. data/lib/countries/data/subdivisions/SD.yaml +809 -301
  181. data/lib/countries/data/subdivisions/SE.yaml +1027 -21
  182. data/lib/countries/data/subdivisions/SG.yaml +36 -0
  183. data/lib/countries/data/subdivisions/SH.yaml +115 -1
  184. data/lib/countries/data/subdivisions/SI.yaml +7067 -77
  185. data/lib/countries/data/subdivisions/SK.yaml +395 -8
  186. data/lib/countries/data/subdivisions/SL.yaml +143 -1
  187. data/lib/countries/data/subdivisions/SM.yaml +400 -2
  188. data/lib/countries/data/subdivisions/SN.yaml +506 -0
  189. data/lib/countries/data/subdivisions/SO.yaml +574 -7
  190. data/lib/countries/data/subdivisions/SR.yaml +334 -0
  191. data/lib/countries/data/subdivisions/SS.yaml +428 -0
  192. data/lib/countries/data/subdivisions/ST.yaml +14 -0
  193. data/lib/countries/data/subdivisions/SV.yaml +488 -0
  194. data/lib/countries/data/subdivisions/SY.yaml +569 -16
  195. data/lib/countries/data/subdivisions/SZ.yaml +144 -0
  196. data/lib/countries/data/subdivisions/TD.yaml +798 -6
  197. data/lib/countries/data/subdivisions/TG.yaml +182 -3
  198. data/lib/countries/data/subdivisions/TH.yaml +2935 -5
  199. data/lib/countries/data/subdivisions/TJ.yaml +280 -0
  200. data/lib/countries/data/subdivisions/TL.yaml +450 -3
  201. data/lib/countries/data/subdivisions/TM.yaml +265 -1
  202. data/lib/countries/data/subdivisions/TN.yaml +844 -3
  203. data/lib/countries/data/subdivisions/TO.yaml +177 -3
  204. data/lib/countries/data/subdivisions/TR.yaml +3829 -6
  205. data/lib/countries/data/subdivisions/TT.yaml +522 -0
  206. data/lib/countries/data/subdivisions/TV.yaml +228 -0
  207. data/lib/countries/data/subdivisions/TW.yaml +761 -13
  208. data/lib/countries/data/subdivisions/TZ.yaml +1160 -7
  209. data/lib/countries/data/subdivisions/UA.yaml +1454 -28
  210. data/lib/countries/data/subdivisions/UG.yaml +3741 -20
  211. data/lib/countries/data/subdivisions/UM.yaml +486 -1
  212. data/lib/countries/data/subdivisions/US.yaml +3028 -3
  213. data/lib/countries/data/subdivisions/UY.yaml +753 -1
  214. data/lib/countries/data/subdivisions/UZ.yaml +592 -7
  215. data/lib/countries/data/subdivisions/VC.yaml +176 -0
  216. data/lib/countries/data/subdivisions/VE.yaml +1055 -2
  217. data/lib/countries/data/subdivisions/VN.yaml +2444 -55
  218. data/lib/countries/data/subdivisions/VU.yaml +225 -3
  219. data/lib/countries/data/subdivisions/WF.yaml +138 -0
  220. data/lib/countries/data/subdivisions/WS.yaml +371 -6
  221. data/lib/countries/data/subdivisions/YE.yaml +857 -14
  222. data/lib/countries/data/subdivisions/ZA.yaml +459 -3
  223. data/lib/countries/data/subdivisions/ZM.yaml +393 -2
  224. data/lib/countries/data/subdivisions/ZW.yaml +341 -0
  225. data/lib/countries/data/translation_corrections.yaml +5 -0
  226. data/lib/countries/sources.rb +6 -0
  227. data/lib/countries/sources/cldr/downloader.rb +35 -0
  228. data/lib/countries/sources/cldr/subdivision.rb +34 -0
  229. data/lib/countries/sources/cldr/subdivision_updater.rb +34 -0
  230. data/lib/countries/sources/local/cached_loader.rb +27 -0
  231. data/lib/countries/sources/local/subdivision.rb +32 -0
  232. data/lib/countries/subdivision.rb +1 -0
  233. data/lib/countries/tasks/geocoding.rake +4 -3
  234. data/lib/countries/version.rb +1 -1
  235. data/spec/country_spec.rb +75 -0
  236. data/spec/data_spec.rb +14 -2
  237. metadata +35 -9
  238. data/lib/countries/data/subdivisions/Tj.yaml +0 -47
@@ -0,0 +1,34 @@
1
+ module Sources
2
+ module CLDR
3
+ class Subdivision
4
+ attr_reader :xml, :language_code
5
+ def initialize(language_code:, xml:)
6
+ @language_code = language_code
7
+ @xml = xml
8
+ end
9
+
10
+ def text
11
+ xml.text
12
+ end
13
+
14
+ def country_code
15
+ type[0..1].upcase
16
+ end
17
+
18
+ def code
19
+ type[2..-1].upcase
20
+ end
21
+
22
+ def type
23
+ xml.attributes['type'].value.delete('-')
24
+ end
25
+
26
+ def to_h
27
+ data = {}
28
+ data['translations'] ||= {}
29
+ data['translations'][language_code] = text
30
+ data
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/hash/deep_merge'
3
+ require 'nokogiri'
4
+ require 'pry'
5
+
6
+ module Sources
7
+ module CLDR
8
+ class SubdivisionUpdater
9
+ def call
10
+ d = Dir['./tmp/cldr/trunk/common/subdivisions/*.xml']
11
+ loader = Sources::Local::CachedLoader.new(Sources::Local::Subdivision)
12
+ d.each do |file_path|
13
+ language_data = Nokogiri::XML(File.read(file_path))
14
+ language_code = File.basename(file_path, '.*')
15
+ subdivisions = language_data.css('subdivision')
16
+ next if subdivisions.empty?
17
+ last_country_code_seen = nil
18
+
19
+ subdivisions.each_with_index do |subdivision, index|
20
+ subdivision = Sources::CLDR::Subdivision.new(language_code: language_code, xml: subdivision)
21
+ data = loader.load(subdivision.country_code)
22
+ data[subdivision.code] ||= {}
23
+ data[subdivision.code] = data[subdivision.code].deep_merge(subdivision.to_h)
24
+ if (last_country_code_seen && last_country_code_seen != subdivision.country_code) || index == subdivisions.size - 1
25
+ puts "Updated #{subdivision.country_code} with language_code #{language_code}"
26
+ loader.save(subdivision.country_code, data)
27
+ end
28
+ last_country_code_seen = subdivision.country_code
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ module Sources
2
+ module Local
3
+ class CachedLoader
4
+ attr_reader :klass
5
+ def initialize(klass)
6
+ @klass = klass
7
+ @loaded_countries = {}
8
+ end
9
+
10
+ def from_cache(country_code)
11
+ @loaded_countries[country_code]
12
+ end
13
+
14
+ def load(country_code)
15
+ if (data = from_cache(country_code))
16
+ data
17
+ else
18
+ @loaded_countries[country_code] = klass.load(country_code)
19
+ end
20
+ end
21
+
22
+ def save(country_code, data)
23
+ klass.new(country_code).save(data)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ module Sources
2
+ module Local
3
+ class Subdivision
4
+ attr_reader :code
5
+ def initialize(code)
6
+ @code = code
7
+ end
8
+
9
+ def load
10
+ if File.exist?(file_path)
11
+ YAML.load_file(file_path) || {}
12
+ else
13
+ {}
14
+ end
15
+ end
16
+
17
+ def save(data)
18
+ File.open(file_path, 'w') { |f| f.write data.to_yaml }
19
+ rescue
20
+ puts "failed to read #{file}: #{$ERROR_INFO}"
21
+ end
22
+
23
+ def file_path
24
+ "lib/countries/data/subdivisions/#{code}.yaml"
25
+ end
26
+
27
+ def self.load(code)
28
+ new(code).load
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,6 +1,7 @@
1
1
  module ISO3166
2
2
  Subdivision = KwargStruct.new(
3
3
  :name,
4
+ :code,
4
5
  :unofficial_names,
5
6
  :geo,
6
7
  :translations,
@@ -32,7 +32,7 @@ def country_codes
32
32
  end
33
33
 
34
34
  namespace :geocode do
35
- desc 'Retrieve and store subdivisions coordinates'
35
+ desc 'Retrieve and store countries coordinates'
36
36
  task :fetch_countries do
37
37
  require 'countries'
38
38
  # Iterate over countries
@@ -70,12 +70,12 @@ namespace :geocode do
70
70
 
71
71
  desc 'Retrieve and store subdivisions coordinates'
72
72
  task :fetch_subdivisions do
73
- require 'countries'
73
+ require_relative '../../countries'
74
74
  # Iterate all countries with subdivisions
75
75
  ISO3166::Country.all.select(&:subdivisions?).each do |c|
76
76
  # Iterate subdivisions
77
77
  state_data = c.subdivisions.dup
78
- state_data.reject { |_, data| data['latitude'] }.each do |code, data|
78
+ state_data.reject { |_, data| data['geo'] }.each do |code, data|
79
79
  location = "#{data['name']}, #{c.name}"
80
80
 
81
81
  # Handle special geocoding cases where Google defaults to well known
@@ -87,6 +87,7 @@ namespace :geocode do
87
87
  next unless (result = geocode(location))
88
88
  geometry = result.geometry
89
89
  if geometry['location']
90
+ state_data[code]['geo'] ||= {}
90
91
  state_data[code]['geo']['latitude'] = geometry['location']['lat']
91
92
  state_data[code]['geo']['longitude'] = geometry['location']['lng']
92
93
  end
@@ -1,3 +1,3 @@
1
1
  module Countries
2
- VERSION = '2.0.8'.freeze
2
+ VERSION = '2.1.4'.freeze
3
3
  end
data/spec/country_spec.rb CHANGED
@@ -242,6 +242,26 @@ describe ISO3166::Country do
242
242
  end
243
243
  end
244
244
 
245
+ describe 'subdivision_names_with_codes' do
246
+ it 'should return an alphabetized list of all subdivisions names with codes' do
247
+ subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes
248
+ expect(subdivisions).to be_an(Array)
249
+ expect(subdivisions.first[0]).to be_a(String)
250
+ expect(subdivisions.size).to eq(27)
251
+ expect(subdivisions.first[0]).to eq('Alexandria')
252
+ end
253
+
254
+ it 'should return an alphabetized list of subdivision names translated to current locale with codes' do
255
+ ISO3166.configuration.locales = [:es, :de, :en]
256
+
257
+ subdivisions = ISO3166::Country.search('EG').subdivision_names_with_codes(:es)
258
+ expect(subdivisions).to be_an(Array)
259
+ expect(subdivisions.first[0]).to be_a(String)
260
+ expect(subdivisions.size).to eq(27)
261
+ expect(subdivisions.first[0]).to eq('Al Iskandariyah')
262
+ end
263
+ end
264
+
245
265
  describe 'valid?' do
246
266
  it 'should return true if country is valid' do
247
267
  expect(ISO3166::Country.new('US')).to be_valid
@@ -318,6 +338,27 @@ describe ISO3166::Country do
318
338
 
319
339
  describe 'all_names_with_codes' do
320
340
  require 'active_support/core_ext/string/output_safety'
341
+ it 'should return an alphabetized list of all country names with ISOCODE alpha2' do
342
+ countries = ISO3166::Country.all_names_with_codes
343
+ expect(countries).to be_an(Array)
344
+ expect(countries.first[0]).to be_a(String)
345
+ expect(countries.first[0]).to eq('Afghanistan')
346
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
347
+ expect(countries.any?{|pair| !pair[0].html_safe?}).to eq(false)
348
+ end
349
+
350
+ it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
351
+ ISO3166.configuration.locales = [:es, :de, :en]
352
+
353
+ countries = ISO3166::Country.all_names_with_codes(:es)
354
+ expect(countries).to be_an(Array)
355
+ expect(countries.first[0]).to be_a(String)
356
+ expect(countries.first[0]).to eq('Afganistán')
357
+ expect(countries.size).to eq(NUM_OF_COUNTRIES)
358
+ end
359
+ end
360
+
361
+ describe 'all_names_with_codes_without_active_support' do
321
362
  it 'should return an alphabetized list of all country names with ISOCODE alpha2' do
322
363
  countries = ISO3166::Country.all_names_with_codes
323
364
  expect(countries).to be_an(Array)
@@ -477,6 +518,31 @@ describe ISO3166::Country do
477
518
  end
478
519
  end
479
520
 
521
+ context "when search name with comma in 'name'" do
522
+ subject { ISO3166::Country.find_by_name(country_name) }
523
+
524
+ context 'with Republic of Korea' do
525
+ let(:country_name) { 'Korea, Republic of' }
526
+ it 'should return' do
527
+ expect(subject.first).to eq('KR')
528
+ end
529
+ end
530
+
531
+ context 'with Bolivia' do
532
+ let(:country_name) { 'Bolivia, Plurinational State of' }
533
+ it 'should return' do
534
+ expect(subject.first).to eq('BO')
535
+ end
536
+ end
537
+
538
+ context 'with Bonaire' do
539
+ let(:country_name) { 'Bonaire, Sint Eustatius and Saba' }
540
+ it 'should return' do
541
+ expect(subject.first).to eq('BQ')
542
+ end
543
+ end
544
+ end
545
+
480
546
  context 'when search lowercase multibyte name found' do
481
547
  subject { ISO3166::Country.find_country_by_name('россия') }
482
548
 
@@ -555,6 +621,15 @@ describe ISO3166::Country do
555
621
  end
556
622
  end
557
623
 
624
+ context 'when the search term contains comma' do
625
+ let(:korea) { ISO3166::Country.find_country_by_name('Korea, Republic of') }
626
+
627
+ it 'should be a country instance' do
628
+ expect(korea).to be_a(ISO3166::Country)
629
+ expect(korea.alpha2).to eq('KR')
630
+ end
631
+ end
632
+
558
633
  context 'when search translation found' do
559
634
  before do
560
635
  ISO3166.configure do |config|
data/spec/data_spec.rb CHANGED
@@ -81,12 +81,12 @@ describe ISO3166::Data do
81
81
 
82
82
  describe '#load_cache' do
83
83
  it 'will return an empty hash for an unsupported locale' do
84
- file_array = %w(cache locales unsupported.json)
84
+ file_array = %w(locales unsupported.json)
85
85
  expect(ISO3166::Data.send(:load_cache, file_array)).to eql({})
86
86
  end
87
87
 
88
88
  it 'will return json for a supported locale' do
89
- file_array = %w(cache locales en.json)
89
+ file_array = %w(locales en.json)
90
90
  expect(ISO3166::Data.send(:load_cache, file_array)).not_to be_empty
91
91
  end
92
92
  end
@@ -96,6 +96,10 @@ describe ISO3166::Data do
96
96
  ISO3166::Data.register(
97
97
  alpha2: 'TW',
98
98
  name: 'NEW Taiwan',
99
+ subdivisions: {
100
+ CHA: {name: 'New Changhua'},
101
+ CYI: {name: 'New Municipality'}
102
+ },
99
103
  translations: {
100
104
  'en' => 'NEW Taiwan',
101
105
  'de' => 'NEW Taiwan'
@@ -112,6 +116,8 @@ describe ISO3166::Data do
112
116
  expect(subject.name).to eq 'NEW Taiwan'
113
117
  expect(subject.translations).to eq('en' => 'NEW Taiwan',
114
118
  'de' => 'NEW Taiwan')
119
+ expect(subject.subdivisions).to eq(CHA: ISO3166::Subdivision.new({name: 'New Changhua'}),
120
+ CYI: ISO3166::Subdivision.new({name: 'New Municipality'}))
115
121
  end
116
122
  end
117
123
 
@@ -120,6 +126,10 @@ describe ISO3166::Data do
120
126
  ISO3166::Data.register(
121
127
  alpha2: 'LOL',
122
128
  name: 'Happy Country',
129
+ subdivisions: {
130
+ LOL1: {name: 'Happy sub1'},
131
+ LOL2: {name: 'Happy sub2'}
132
+ },
123
133
  translations: {
124
134
  'en' => 'Happy Country',
125
135
  'de' => 'glückliches Land'
@@ -133,6 +143,8 @@ describe ISO3166::Data do
133
143
  data = ISO3166::Data.new('LOL').call
134
144
  expect(data['name']).to eq 'Happy Country'
135
145
  expect(subject.name).to eq 'Happy Country'
146
+ expect(subject.subdivisions).to eq(LOL1: ISO3166::Subdivision.new({name: 'Happy sub1'}),
147
+ LOL2: ISO3166::Subdivision.new({name: 'Happy sub2'}))
136
148
  end
137
149
 
138
150
  it 'detect a stale cache' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: countries
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.8
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Robinson
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-06 00:00:00.000000000 Z
13
+ date: 2018-02-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n_data
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: 0.7.0
21
+ version: 0.8.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: 0.7.0
28
+ version: 0.8.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: money
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '6.7'
35
+ version: '6.9'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '6.7'
42
+ version: '6.9'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: unicode_utils
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -96,6 +96,20 @@ dependencies:
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '3'
99
+ - !ruby/object:Gem::Dependency
100
+ name: nokogiri
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '1.8'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '1.8'
99
113
  description: All sorts of useful information about every country packaged as pretty
100
114
  little country objects. It includes data from ISO 3166
101
115
  email:
@@ -532,6 +546,7 @@ files:
532
546
  - lib/countries/data/subdivisions/GD.yaml
533
547
  - lib/countries/data/subdivisions/GE.yaml
534
548
  - lib/countries/data/subdivisions/GH.yaml
549
+ - lib/countries/data/subdivisions/GL.yaml
535
550
  - lib/countries/data/subdivisions/GM.yaml
536
551
  - lib/countries/data/subdivisions/GN.yaml
537
552
  - lib/countries/data/subdivisions/GQ.yaml
@@ -563,10 +578,11 @@ files:
563
578
  - lib/countries/data/subdivisions/KP.yaml
564
579
  - lib/countries/data/subdivisions/KR.yaml
565
580
  - lib/countries/data/subdivisions/KW.yaml
581
+ - lib/countries/data/subdivisions/KY.yaml
566
582
  - lib/countries/data/subdivisions/KZ.yaml
567
- - lib/countries/data/subdivisions/Ky.yaml
568
583
  - lib/countries/data/subdivisions/LA.yaml
569
584
  - lib/countries/data/subdivisions/LB.yaml
585
+ - lib/countries/data/subdivisions/LC.yaml
570
586
  - lib/countries/data/subdivisions/LI.yaml
571
587
  - lib/countries/data/subdivisions/LK.yaml
572
588
  - lib/countries/data/subdivisions/LR.yaml
@@ -576,6 +592,7 @@ files:
576
592
  - lib/countries/data/subdivisions/LV.yaml
577
593
  - lib/countries/data/subdivisions/LY.yaml
578
594
  - lib/countries/data/subdivisions/MA.yaml
595
+ - lib/countries/data/subdivisions/MC.yaml
579
596
  - lib/countries/data/subdivisions/MD.yaml
580
597
  - lib/countries/data/subdivisions/ME.yaml
581
598
  - lib/countries/data/subdivisions/MG.yaml
@@ -608,6 +625,7 @@ files:
608
625
  - lib/countries/data/subdivisions/PH.yaml
609
626
  - lib/countries/data/subdivisions/PK.yaml
610
627
  - lib/countries/data/subdivisions/PL.yaml
628
+ - lib/countries/data/subdivisions/PS.yaml
611
629
  - lib/countries/data/subdivisions/PT.yaml
612
630
  - lib/countries/data/subdivisions/PW.yaml
613
631
  - lib/countries/data/subdivisions/PY.yaml
@@ -630,6 +648,7 @@ files:
630
648
  - lib/countries/data/subdivisions/SN.yaml
631
649
  - lib/countries/data/subdivisions/SO.yaml
632
650
  - lib/countries/data/subdivisions/SR.yaml
651
+ - lib/countries/data/subdivisions/SS.yaml
633
652
  - lib/countries/data/subdivisions/ST.yaml
634
653
  - lib/countries/data/subdivisions/SV.yaml
635
654
  - lib/countries/data/subdivisions/SY.yaml
@@ -638,6 +657,7 @@ files:
638
657
  - lib/countries/data/subdivisions/TF.yaml
639
658
  - lib/countries/data/subdivisions/TG.yaml
640
659
  - lib/countries/data/subdivisions/TH.yaml
660
+ - lib/countries/data/subdivisions/TJ.yaml
641
661
  - lib/countries/data/subdivisions/TL.yaml
642
662
  - lib/countries/data/subdivisions/TM.yaml
643
663
  - lib/countries/data/subdivisions/TN.yaml
@@ -647,7 +667,6 @@ files:
647
667
  - lib/countries/data/subdivisions/TV.yaml
648
668
  - lib/countries/data/subdivisions/TW.yaml
649
669
  - lib/countries/data/subdivisions/TZ.yaml
650
- - lib/countries/data/subdivisions/Tj.yaml
651
670
  - lib/countries/data/subdivisions/UA.yaml
652
671
  - lib/countries/data/subdivisions/UG.yaml
653
672
  - lib/countries/data/subdivisions/UM.yaml
@@ -658,6 +677,7 @@ files:
658
677
  - lib/countries/data/subdivisions/VE.yaml
659
678
  - lib/countries/data/subdivisions/VN.yaml
660
679
  - lib/countries/data/subdivisions/VU.yaml
680
+ - lib/countries/data/subdivisions/WF.yaml
661
681
  - lib/countries/data/subdivisions/WS.yaml
662
682
  - lib/countries/data/subdivisions/YE.yaml
663
683
  - lib/countries/data/subdivisions/ZA.yaml
@@ -669,6 +689,12 @@ files:
669
689
  - lib/countries/kwarg_struct.rb
670
690
  - lib/countries/mongoid.rb
671
691
  - lib/countries/setup.rb
692
+ - lib/countries/sources.rb
693
+ - lib/countries/sources/cldr/downloader.rb
694
+ - lib/countries/sources/cldr/subdivision.rb
695
+ - lib/countries/sources/cldr/subdivision_updater.rb
696
+ - lib/countries/sources/local/cached_loader.rb
697
+ - lib/countries/sources/local/subdivision.rb
672
698
  - lib/countries/structure.rb
673
699
  - lib/countries/subdivision.rb
674
700
  - lib/countries/tasks/geocoding.rake
@@ -704,7 +730,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
704
730
  version: '0'
705
731
  requirements: []
706
732
  rubyforge_project:
707
- rubygems_version: 2.5.2
733
+ rubygems_version: 2.6.13
708
734
  signing_key:
709
735
  specification_version: 4
710
736
  summary: Gives you a country object full of all sorts of useful information.