countries 5.4.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +61 -0
  3. data/.github/workflows/tests.yml +4 -0
  4. data/.gitignore +0 -1
  5. data/.rubocop.yml +17 -8
  6. data/CHANGELOG.md +8 -0
  7. data/Gemfile +1 -2
  8. data/Gemfile.lock +84 -0
  9. data/README.md +41 -1
  10. data/Rakefile +2 -3
  11. data/countries.gemspec +1 -1
  12. data/lib/countries/cache/countries.json +1 -1
  13. data/lib/countries/country/class_methods.rb +22 -3
  14. data/lib/countries/country/country_subdivision_methods.rb +82 -0
  15. data/lib/countries/country/currency_methods.rb +0 -1
  16. data/lib/countries/country/finder_methods.rb +2 -4
  17. data/lib/countries/country.rb +13 -53
  18. data/lib/countries/data/countries/AR.yaml +1 -0
  19. data/lib/countries/data/countries/AU.yaml +1 -0
  20. data/lib/countries/data/countries/BR.yaml +1 -0
  21. data/lib/countries/data/countries/CA.yaml +2 -0
  22. data/lib/countries/data/countries/CN.yaml +1 -0
  23. data/lib/countries/data/countries/DE.yaml +2 -0
  24. data/lib/countries/data/countries/FR.yaml +2 -0
  25. data/lib/countries/data/countries/GB.yaml +2 -0
  26. data/lib/countries/data/countries/ID.yaml +1 -0
  27. data/lib/countries/data/countries/IN.yaml +1 -0
  28. data/lib/countries/data/countries/IT.yaml +2 -0
  29. data/lib/countries/data/countries/JP.yaml +2 -0
  30. data/lib/countries/data/countries/KR.yaml +1 -0
  31. data/lib/countries/data/countries/MX.yaml +1 -0
  32. data/lib/countries/data/countries/RU.yaml +1 -0
  33. data/lib/countries/data/countries/SA.yaml +1 -0
  34. data/lib/countries/data/countries/TR.yaml +1 -0
  35. data/lib/countries/data/countries/US.yaml +2 -0
  36. data/lib/countries/data/countries/ZA.yaml +1 -0
  37. data/lib/countries/data/locales_methods.rb +23 -0
  38. data/lib/countries/data/subdivision_methods.rb +30 -0
  39. data/lib/countries/data/subdivisions/AD.yaml +7 -0
  40. data/lib/countries/data/subdivisions/AE.yaml +18 -0
  41. data/lib/countries/data/subdivisions/AF.yaml +167 -2
  42. data/lib/countries/data/subdivisions/AG.yaml +9 -0
  43. data/lib/countries/data/subdivisions/AL.yaml +57 -0
  44. data/lib/countries/data/subdivisions/AM.yaml +34 -0
  45. data/lib/countries/data/subdivisions/AO.yaml +36 -0
  46. data/lib/countries/data/subdivisions/AR.yaml +46 -0
  47. data/lib/countries/data/subdivisions/AT.yaml +28 -0
  48. data/lib/countries/data/subdivisions/AU.yaml +29 -0
  49. data/lib/countries/data/subdivisions/AZ.yaml +239 -0
  50. data/lib/countries/data/subdivisions/BA.yaml +5 -0
  51. data/lib/countries/data/subdivisions/BB.yaml +4 -0
  52. data/lib/countries/data/subdivisions/BD.yaml +139 -0
  53. data/lib/countries/data/subdivisions/BE.yaml +34 -0
  54. data/lib/countries/data/subdivisions/BF.yaml +56 -0
  55. data/lib/countries/data/subdivisions/BG.yaml +30 -0
  56. data/lib/countries/data/subdivisions/BH.yaml +13 -0
  57. data/lib/countries/data/subdivisions/BI.yaml +54 -0
  58. data/lib/countries/data/subdivisions/BJ.yaml +22 -0
  59. data/lib/countries/data/subdivisions/BN.yaml +9 -0
  60. data/lib/countries/data/subdivisions/BO.yaml +35 -0
  61. data/lib/countries/data/subdivisions/BQ.yaml +4 -0
  62. data/lib/countries/data/subdivisions/BR.yaml +14 -0
  63. data/lib/countries/data/subdivisions/BS.yaml +24 -0
  64. data/lib/countries/data/subdivisions/BT.yaml +24 -0
  65. data/lib/countries/data/subdivisions/BW.yaml +24 -0
  66. data/lib/countries/data/subdivisions/BY.yaml +5 -0
  67. data/lib/countries/data/subdivisions/BZ.yaml +3 -0
  68. data/lib/countries/data/subdivisions/CA.yaml +24 -0
  69. data/lib/countries/data/subdivisions/CD.yaml +77 -0
  70. data/lib/countries/data/subdivisions/CF.yaml +15 -0
  71. data/lib/countries/data/subdivisions/CG.yaml +18 -0
  72. data/lib/countries/data/subdivisions/CH.yaml +92 -0
  73. data/lib/countries/data/subdivisions/CI.yaml +65 -0
  74. data/lib/countries/data/subdivisions/CL.yaml +45 -2
  75. data/lib/countries/data/subdivisions/CM.yaml +22 -0
  76. data/lib/countries/data/subdivisions/CN.yaml +98 -0
  77. data/lib/countries/data/subdivisions/CO.yaml +68 -0
  78. data/lib/countries/data/subdivisions/CR.yaml +14 -0
  79. data/lib/countries/data/subdivisions/CU.yaml +42 -0
  80. data/lib/countries/data/subdivisions/CV.yaml +32 -0
  81. data/lib/countries/data/subdivisions/CY.yaml +18 -0
  82. data/lib/countries/data/subdivisions/CZ.yaml +227 -0
  83. data/lib/countries/data/subdivisions/DE.yaml +31 -0
  84. data/lib/countries/data/subdivisions/DJ.yaml +16 -0
  85. data/lib/countries/data/subdivisions/DK.yaml +13 -0
  86. data/lib/countries/data/subdivisions/DM.yaml +1 -0
  87. data/lib/countries/data/subdivisions/DO.yaml +102 -0
  88. data/lib/countries/data/subdivisions/DZ.yaml +104 -0
  89. data/lib/countries/data/subdivisions/EC.yaml +72 -0
  90. data/lib/countries/data/subdivisions/EE.yaml +6 -0
  91. data/lib/countries/data/subdivisions/EG.yaml +54 -0
  92. data/lib/countries/data/subdivisions/ER.yaml +2 -0
  93. data/lib/countries/data/subdivisions/ES.yaml +252 -0
  94. data/lib/countries/data/subdivisions/ET.yaml +27 -0
  95. data/lib/countries/data/subdivisions/FI.yaml +78 -0
  96. data/lib/countries/data/subdivisions/FJ.yaml +30 -0
  97. data/lib/countries/data/subdivisions/FM.yaml +11 -0
  98. data/lib/countries/data/subdivisions/FR.yaml +332 -1
  99. data/lib/countries/data/subdivisions/GA.yaml +24 -0
  100. data/lib/countries/data/subdivisions/GB.yaml +488 -0
  101. data/lib/countries/data/subdivisions/GD.yaml +10 -0
  102. data/lib/countries/data/subdivisions/GE.yaml +34 -0
  103. data/lib/countries/data/subdivisions/GH.yaml +79 -0
  104. data/lib/countries/data/subdivisions/GL.yaml +58 -0
  105. data/lib/countries/data/subdivisions/GM.yaml +10 -0
  106. data/lib/countries/data/subdivisions/GN.yaml +65 -0
  107. data/lib/countries/data/subdivisions/GQ.yaml +36 -0
  108. data/lib/countries/data/subdivisions/GR.yaml +41 -0
  109. data/lib/countries/data/subdivisions/GW.yaml +24 -0
  110. data/lib/countries/data/subdivisions/GY.yaml +31 -0
  111. data/lib/countries/data/subdivisions/HN.yaml +21 -0
  112. data/lib/countries/data/subdivisions/HR.yaml +82 -0
  113. data/lib/countries/data/subdivisions/HT.yaml +14 -0
  114. data/lib/countries/data/subdivisions/HU.yaml +94 -0
  115. data/lib/countries/data/subdivisions/ID.yaml +99 -0
  116. data/lib/countries/data/subdivisions/IE.yaml +39 -0
  117. data/lib/countries/data/subdivisions/IL.yaml +15 -0
  118. data/lib/countries/data/subdivisions/IN.yaml +210 -0
  119. data/lib/countries/data/subdivisions/IQ.yaml +59 -0
  120. data/lib/countries/data/subdivisions/IR.yaml +2 -0
  121. data/lib/countries/data/subdivisions/IS.yaml +560 -0
  122. data/lib/countries/data/subdivisions/IT.yaml +321 -0
  123. data/lib/countries/data/subdivisions/JM.yaml +22 -0
  124. data/lib/countries/data/subdivisions/JO.yaml +16 -0
  125. data/lib/countries/data/subdivisions/JP.yaml +42 -0
  126. data/lib/countries/data/subdivisions/KE.yaml +298 -0
  127. data/lib/countries/data/subdivisions/KG.yaml +28 -0
  128. data/lib/countries/data/subdivisions/KH.yaml +108 -0
  129. data/lib/countries/data/subdivisions/KI.yaml +6 -0
  130. data/lib/countries/data/subdivisions/KM.yaml +4 -0
  131. data/lib/countries/data/subdivisions/KN.yaml +6 -0
  132. data/lib/countries/data/subdivisions/KP.yaml +42 -0
  133. data/lib/countries/data/subdivisions/KR.yaml +36 -0
  134. data/lib/countries/data/subdivisions/KW.yaml +5 -0
  135. data/lib/countries/data/subdivisions/KZ.yaml +113 -0
  136. data/lib/countries/data/subdivisions/LA.yaml +49 -0
  137. data/lib/countries/data/subdivisions/LB.yaml +28 -0
  138. data/lib/countries/data/subdivisions/LC.yaml +6 -0
  139. data/lib/countries/data/subdivisions/LI.yaml +37 -0
  140. data/lib/countries/data/subdivisions/LK.yaml +67 -0
  141. data/lib/countries/data/subdivisions/LR.yaml +16 -0
  142. data/lib/countries/data/subdivisions/LS.yaml +23 -0
  143. data/lib/countries/data/subdivisions/LT.yaml +315 -0
  144. data/lib/countries/data/subdivisions/LU.yaml +31 -0
  145. data/lib/countries/data/subdivisions/LV.yaml +83 -0
  146. data/lib/countries/data/subdivisions/LY.yaml +16 -0
  147. data/lib/countries/data/subdivisions/MA.yaml +827 -12
  148. data/lib/countries/data/subdivisions/MC.yaml +47 -0
  149. data/lib/countries/data/subdivisions/MD.yaml +41 -0
  150. data/lib/countries/data/subdivisions/ME.yaml +83 -0
  151. data/lib/countries/data/subdivisions/MG.yaml +21 -0
  152. data/lib/countries/data/subdivisions/MH.yaml +70 -0
  153. data/lib/countries/data/subdivisions/MK.yaml +505 -0
  154. data/lib/countries/data/subdivisions/ML.yaml +33 -0
  155. data/lib/countries/data/subdivisions/MM.yaml +51 -0
  156. data/lib/countries/data/subdivisions/MN.yaml +94 -0
  157. data/lib/countries/data/subdivisions/MR.yaml +32 -0
  158. data/lib/countries/data/subdivisions/MT.yaml +126 -0
  159. data/lib/countries/data/subdivisions/MU.yaml +21 -0
  160. data/lib/countries/data/subdivisions/MV.yaml +20 -0
  161. data/lib/countries/data/subdivisions/MW.yaml +52 -0
  162. data/lib/countries/data/subdivisions/MX.yaml +23 -0
  163. data/lib/countries/data/subdivisions/MY.yaml +24 -0
  164. data/lib/countries/data/subdivisions/MZ.yaml +20 -0
  165. data/lib/countries/data/subdivisions/NA.yaml +28 -0
  166. data/lib/countries/data/subdivisions/NE.yaml +9 -0
  167. data/lib/countries/data/subdivisions/NG.yaml +89 -0
  168. data/lib/countries/data/subdivisions/NI.yaml +25 -0
  169. data/lib/countries/data/subdivisions/NL.yaml +24 -0
  170. data/lib/countries/data/subdivisions/NO.yaml +138 -1
  171. data/lib/countries/data/subdivisions/NP.yaml +9 -0
  172. data/lib/countries/data/subdivisions/NR.yaml +19 -0
  173. data/lib/countries/data/subdivisions/NZ.yaml +34 -0
  174. data/lib/countries/data/subdivisions/OM.yaml +10 -0
  175. data/lib/countries/data/subdivisions/PA.yaml +27 -0
  176. data/lib/countries/data/subdivisions/PE.yaml +24 -0
  177. data/lib/countries/data/subdivisions/PG.yaml +46 -0
  178. data/lib/countries/data/subdivisions/PH.yaml +293 -0
  179. data/lib/countries/data/subdivisions/PK.yaml +22 -0
  180. data/lib/countries/data/subdivisions/PL.yaml +141 -0
  181. data/lib/countries/data/subdivisions/PS.yaml +41 -0
  182. data/lib/countries/data/subdivisions/PT.yaml +36 -0
  183. data/lib/countries/data/subdivisions/PW.yaml +24 -0
  184. data/lib/countries/data/subdivisions/PY.yaml +21 -0
  185. data/lib/countries/data/subdivisions/QA.yaml +26 -0
  186. data/lib/countries/data/subdivisions/RO.yaml +189 -0
  187. data/lib/countries/data/subdivisions/RS.yaml +112 -0
  188. data/lib/countries/data/subdivisions/RU.yaml +123 -0
  189. data/lib/countries/data/subdivisions/RW.yaml +7 -0
  190. data/lib/countries/data/subdivisions/SA.yaml +38 -0
  191. data/lib/countries/data/subdivisions/SB.yaml +11 -0
  192. data/lib/countries/data/subdivisions/SC.yaml +45 -0
  193. data/lib/countries/data/subdivisions/SD.yaml +15 -0
  194. data/lib/countries/data/subdivisions/SE.yaml +42 -0
  195. data/lib/countries/data/subdivisions/SG.yaml +8 -0
  196. data/lib/countries/data/subdivisions/SH.yaml +6 -0
  197. data/lib/countries/data/subdivisions/SI.yaml +735 -0
  198. data/lib/countries/data/subdivisions/SK.yaml +22 -0
  199. data/lib/countries/data/subdivisions/SL.yaml +7 -0
  200. data/lib/countries/data/subdivisions/SM.yaml +19 -0
  201. data/lib/countries/data/subdivisions/SN.yaml +43 -0
  202. data/lib/countries/data/subdivisions/SO.yaml +71 -0
  203. data/lib/countries/data/subdivisions/SR.yaml +17 -0
  204. data/lib/countries/data/subdivisions/SS.yaml +4 -0
  205. data/lib/countries/data/subdivisions/ST.yaml +127 -0
  206. data/lib/countries/data/subdivisions/SV.yaml +20 -0
  207. data/lib/countries/data/subdivisions/SY.yaml +53 -0
  208. data/lib/countries/data/subdivisions/SZ.yaml +18 -0
  209. data/lib/countries/data/subdivisions/TD.yaml +51 -0
  210. data/lib/countries/data/subdivisions/TG.yaml +13 -0
  211. data/lib/countries/data/subdivisions/TH.yaml +231 -0
  212. data/lib/countries/data/subdivisions/TJ.yaml +15 -0
  213. data/lib/countries/data/subdivisions/TL.yaml +38 -0
  214. data/lib/countries/data/subdivisions/TM.yaml +15 -0
  215. data/lib/countries/data/subdivisions/TN.yaml +25 -0
  216. data/lib/countries/data/subdivisions/TO.yaml +1 -0
  217. data/lib/countries/data/subdivisions/TR.yaml +93 -0
  218. data/lib/countries/data/subdivisions/TT.yaml +25 -0
  219. data/lib/countries/data/subdivisions/TV.yaml +25 -0
  220. data/lib/countries/data/subdivisions/TW.yaml +106 -0
  221. data/lib/countries/data/subdivisions/TZ.yaml +38 -0
  222. data/lib/countries/data/subdivisions/UA.yaml +86 -4
  223. data/lib/countries/data/subdivisions/UG.yaml +262 -0
  224. data/lib/countries/data/subdivisions/UM.yaml +4 -0
  225. data/lib/countries/data/subdivisions/US.yaml +118 -0
  226. data/lib/countries/data/subdivisions/UY.yaml +27 -0
  227. data/lib/countries/data/subdivisions/UZ.yaml +65 -0
  228. data/lib/countries/data/subdivisions/VC.yaml +6 -0
  229. data/lib/countries/data/subdivisions/VE.yaml +33 -0
  230. data/lib/countries/data/subdivisions/VN.yaml +131 -0
  231. data/lib/countries/data/subdivisions/VU.yaml +8 -0
  232. data/lib/countries/data/subdivisions/WS.yaml +18 -0
  233. data/lib/countries/data/subdivisions/YE.yaml +16 -0
  234. data/lib/countries/data/subdivisions/ZA.yaml +5 -0
  235. data/lib/countries/data/subdivisions/ZM.yaml +24 -0
  236. data/lib/countries/data/subdivisions/ZW.yaml +21 -0
  237. data/lib/countries/data.rb +19 -50
  238. data/lib/countries/global.rb +0 -1
  239. data/lib/countries/iso3166.rb +3 -0
  240. data/lib/countries/sources/cldr/subdivision.rb +1 -1
  241. data/lib/countries/subdivision.rb +5 -0
  242. data/lib/countries/tasks/postal_codes.rake +5 -1
  243. data/lib/countries/version.rb +1 -1
  244. data/spec/country_spec.rb +118 -22
  245. data/spec/data_spec.rb +12 -8
  246. data/spec/spec_helper.rb +4 -0
  247. data/spec/subdivision_spec.rb +8 -0
  248. metadata +23 -16
  249. data/.rubocop_todo.yml +0 -19
  250. data/lib/countries/tasks/geocoding.rake +0 -106
data/spec/data_spec.rb CHANGED
@@ -128,7 +128,7 @@ describe ISO3166::Data do
128
128
 
129
129
  it 'can be done' do
130
130
  data = ISO3166::Data.new('TW').call
131
- ISO3166.configuration.locales = [:es, :de, :de]
131
+ ISO3166.configuration.locales = %i[es de de]
132
132
  expect(data['iso_short_name']).to eq 'NEW Taiwan'
133
133
  expect(subject.iso_short_name).to eq 'NEW Taiwan'
134
134
  expect(subject.translations).to eq('en' => 'NEW Taiwan',
@@ -205,18 +205,18 @@ describe ISO3166::Data do
205
205
  it 'has a non-blank code for all subdivisions' do
206
206
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
207
207
  data = YAML.load_file(file)
208
- expect(data.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{file}"
208
+ expect(data.values.none? { |s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{file}"
209
209
  end
210
210
  end
211
211
 
212
212
  it 'has a non-blank, lowercase and snake_case type for all subdivisions' do
213
213
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
214
214
  data = YAML.load_file(file)
215
- no_type = data.select{|k,v| v['type'].nil? }
215
+ no_type = data.select { |_k, v| v['type'].nil? }
216
216
  expect(no_type).to be_empty, "empty subdivision type in #{file} - #{no_type.keys}"
217
- uppercase = data.select{|k,v| v['type'] =~ /[A-Z]/ }
217
+ uppercase = data.select { |_k, v| v['type'] =~ /[A-Z]/ }
218
218
  expect(uppercase).to be_empty, "uppercase characters in subdivision type in #{file} - #{uppercase.keys}"
219
- spaces = data.select{|k,v| v['type'] =~ /\s/ }
219
+ spaces = data.select { |_k, v| v['type'] =~ /\s/ }
220
220
  expect(spaces).to be_empty, "whitespace characters in subdivision type in #{file} - #{spaces.keys}"
221
221
  end
222
222
  end
@@ -224,7 +224,7 @@ describe ISO3166::Data do
224
224
  it 'has a non-blank name for all subdivisions' do
225
225
  Dir['lib/countries/data/subdivisions/*.yaml'].each do |file|
226
226
  data = YAML.load_file(file)
227
- expect(data.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{file}"
227
+ expect(data.values.none? { |s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{file}"
228
228
  end
229
229
  end
230
230
  end
@@ -232,13 +232,17 @@ describe ISO3166::Data do
232
232
  context 'cached country subdivision data' do
233
233
  it 'has a non-blank code for all subdivisions' do
234
234
  ISO3166::Country.all.each do |country|
235
- expect(country.subdivisions.values.none?{|s| s['code'].nil? }).to be_truthy, "empty subdivision code in #{country}"
235
+ expect(country.subdivisions.values.none? do |s|
236
+ s['code'].nil?
237
+ end).to be_truthy, "empty subdivision code in #{country}"
236
238
  end
237
239
  end
238
240
 
239
241
  it 'has a non-blank name for all subdivisions' do
240
242
  ISO3166::Country.all.each do |country|
241
- expect(country.subdivisions.values.none?{|s| s['name'].nil? }).to be_truthy, "empty subdivision name in #{country}"
243
+ expect(country.subdivisions.values.none? do |s|
244
+ s['name'].nil?
245
+ end).to be_truthy, "empty subdivision name in #{country}"
242
246
  end
243
247
  end
244
248
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'countries'
4
+ require 'debug'
5
+ require 'simplecov'
6
+ SimpleCov.start
7
+
4
8
  RSpec.configure do |config|
5
9
  config.filter_run :focus
6
10
  config.run_all_when_everything_filtered = true
@@ -31,4 +31,12 @@ describe ISO3166::Subdivision do
31
31
  end
32
32
  end
33
33
  end
34
+
35
+ describe 'code_with_translations' do
36
+ before { ISO3166.configuration.locales = %i[en pt] }
37
+ it 'returns a hash' do
38
+ expect(ISO3166::Country.new('IT').subdivisions['NA'].code_with_translations).to eq({ 'NA' => { 'en' => 'Naples',
39
+ 'pt' => 'Nápoles' } })
40
+ end
41
+ end
34
42
  end
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: 5.4.0
4
+ version: 5.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Robinson
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-04-12 00:00:00.000000000 Z
14
+ date: 2023-06-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: unaccent
@@ -69,6 +69,20 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '3'
72
+ - !ruby/object:Gem::Dependency
73
+ name: simplecov
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '0.22'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0.22'
72
86
  description: All sorts of useful information about every country packaged as pretty
73
87
  little country objects. It includes data from ISO 3166
74
88
  email:
@@ -79,15 +93,16 @@ executables: []
79
93
  extensions: []
80
94
  extra_rdoc_files: []
81
95
  files:
96
+ - ".codeclimate.yml"
82
97
  - ".github/FUNDING.yml"
83
98
  - ".github/workflows/codeql-analysis.yml"
84
99
  - ".github/workflows/tests.yml"
85
100
  - ".gitignore"
86
101
  - ".rspec"
87
102
  - ".rubocop.yml"
88
- - ".rubocop_todo.yml"
89
103
  - CHANGELOG.md
90
104
  - Gemfile
105
+ - Gemfile.lock
91
106
  - LICENSE
92
107
  - README.md
93
108
  - Rakefile
@@ -230,6 +245,7 @@ files:
230
245
  - lib/countries/configuration.rb
231
246
  - lib/countries/country.rb
232
247
  - lib/countries/country/class_methods.rb
248
+ - lib/countries/country/country_subdivision_methods.rb
233
249
  - lib/countries/country/currency_methods.rb
234
250
  - lib/countries/country/emoji.rb
235
251
  - lib/countries/country/finder_methods.rb
@@ -483,6 +499,8 @@ files:
483
499
  - lib/countries/data/countries/ZA.yaml
484
500
  - lib/countries/data/countries/ZM.yaml
485
501
  - lib/countries/data/countries/ZW.yaml
502
+ - lib/countries/data/locales_methods.rb
503
+ - lib/countries/data/subdivision_methods.rb
486
504
  - lib/countries/data/subdivisions/AD.yaml
487
505
  - lib/countries/data/subdivisions/AE.yaml
488
506
  - lib/countries/data/subdivisions/AF.yaml
@@ -825,7 +843,6 @@ files:
825
843
  - lib/countries/sources/local/subdivision.rb
826
844
  - lib/countries/structure.rb
827
845
  - lib/countries/subdivision.rb
828
- - lib/countries/tasks/geocoding.rake
829
846
  - lib/countries/tasks/postal_codes.rake
830
847
  - lib/countries/timezones.rb
831
848
  - lib/countries/translations.rb
@@ -864,18 +881,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
864
881
  - !ruby/object:Gem::Version
865
882
  version: '0'
866
883
  requirements: []
867
- rubygems_version: 3.4.10
884
+ rubygems_version: 3.4.12
868
885
  signing_key:
869
886
  specification_version: 4
870
887
  summary: Gives you a country object full of all sorts of useful information.
871
- test_files:
872
- - spec/00_global_spec.rb
873
- - spec/configuration_spec.rb
874
- - spec/country_spec.rb
875
- - spec/data_spec.rb
876
- - spec/mongoid_spec.rb
877
- - spec/perf_spec.rb
878
- - spec/spec_helper.rb
879
- - spec/subdivision_spec.rb
880
- - spec/thread_safety_spec.rb
881
- - spec/timezone_spec.rb
888
+ test_files: []
data/.rubocop_todo.yml DELETED
@@ -1,19 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2022-01-07 11:03:11 UTC using RuboCop version 1.24.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
-
10
- # Offense count: 3
11
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
12
- Metrics/AbcSize:
13
- Max: 33
14
-
15
- # Enable after the doc branch is merged
16
- Style/Documentation:
17
- Enabled: false
18
- # Exclude:
19
- # - 'spec/**/*'
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'geocoder'
4
- require 'retryable'
5
-
6
- Geocoder.configure(
7
- lookup: :google,
8
- timeout: 10,
9
- api_key: GOOGLE_API_KEY
10
- )
11
-
12
- # raise on geocoding errors such as query limit exceeded
13
- Geocoder.configure(always_raise: :all)
14
- # Try to geocode a given query, on exceptions it retries up to 3 times then gives up.
15
- # @param [String] query string to geocode
16
- # @return [Hash] first valid result or nil
17
- def geocode(query, params)
18
- Retryable.retryable(tries: 3, sleep: ->(n) { 2**n }) do
19
- Geocoder.search(query, params: params).first
20
- end
21
- rescue Geocoder::Error, Geocoder::LookupTimeout => e
22
- warn "Attempts exceeded for query #{query}, last error was #{e.message}"
23
- nil
24
- end
25
-
26
- def load_country_yaml(alpha2)
27
- YAML.load_file(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"))
28
- end
29
-
30
- def save_country_yaml(alpha2, data)
31
- File.write(File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'countries', "#{alpha2}.yaml"), data.to_yaml)
32
- end
33
-
34
- def country_codes
35
- @country_codes ||= Dir['lib/countries/data/countries/*.yaml'].map { |x| File.basename(x, File.extname(x)) }.uniq
36
- end
37
-
38
- namespace :geocode do
39
- desc 'Retrieve and store countries coordinates'
40
- task :fetch_countries do
41
- require 'countries'
42
- # Iterate over countries
43
- ISO3166::Country.all.each do |country|
44
- code = country.alpha2
45
- # Load unmutated yaml file.
46
- data = load_country_yaml(country.alpha2)
47
-
48
- next unless (result = geocode(country.iso_short_name, {region: country.alpha2}))
49
-
50
- unless result.types.include?('country')
51
- puts "WARNING:: Geocoder returned something that was not a country for #{country.alpha2}"
52
- end
53
- geometry = result.geometry
54
-
55
- # Extract center point data
56
- if geometry['location']
57
- data[code]['geo']['latitude'] = geometry['location']['lat']
58
- data[code]['geo']['longitude'] = geometry['location']['lng']
59
- end
60
-
61
- # Extract bounding box data
62
- next unless geometry['bounds']
63
-
64
- data[code]['geo']['bounds'] = geometry['bounds']
65
- data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
66
- data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
67
- data[code]['geo']['max_latitude'] = geometry['bounds']['northeast']['lat']
68
- data[code]['geo']['max_longitude'] = geometry['bounds']['northeast']['lng']
69
-
70
- # Persist
71
- save_country_yaml(code, data)
72
- end
73
- end
74
-
75
- desc 'Retrieve and store subdivisions coordinates'
76
- task :fetch_subdivisions do
77
- require_relative '../../countries'
78
- # Iterate all countries with subdivisions
79
- ISO3166::Country.all.select(&:subdivisions?).each do |c|
80
- # Iterate subdivisions
81
- state_data = c.subdivisions.dup
82
- state_data.reject { |_, data| data['geo'] }.each do |code, _|
83
- location = "#{c.alpha2}-#{code}"
84
-
85
- next unless (result = geocode(location, { region: c.alpha2 }))
86
-
87
- geometry = result.geometry
88
- if geometry['location']
89
- state_data[code]['geo'] ||= {}
90
- state_data[code]['geo']['latitude'] = geometry['location']['lat']
91
- state_data[code]['geo']['longitude'] = geometry['location']['lng']
92
- end
93
-
94
- next unless geometry['bounds']
95
-
96
- state_data[code]['geo']['min_latitude'] = geometry['bounds']['southwest']['lat']
97
- state_data[code]['geo']['min_longitude'] = geometry['bounds']['southwest']['lng']
98
- state_data[code]['geo']['max_latitude'] = geometry['bounds']['northeast']['lat']
99
- state_data[code]['geo']['max_longitude'] = geometry['bounds']['northeast']['lng']
100
- end
101
- # Write updated YAML for current country
102
- out = File.join(ISO3166_ROOT_PATH, 'lib', 'countries', 'data', 'subdivisions', "#{c.alpha2}.yaml")
103
- File.write(out, state_data.to_yaml)
104
- end
105
- end
106
- end