countries 1.2.5 → 2.0.0.pre
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/CHANGELOG.md +6 -2
- data/Gemfile +1 -0
- data/README.markdown +33 -7
- data/Rakefile +15 -20
- data/countries.gemspec +1 -1
- data/lib/countries/cache/countries +0 -0
- data/lib/countries/cache/locales/af +0 -0
- data/lib/countries/cache/locales/am +0 -0
- data/lib/countries/cache/locales/ar +0 -0
- data/lib/countries/cache/locales/as +0 -0
- data/lib/countries/cache/locales/az +0 -0
- data/lib/countries/cache/locales/be +0 -0
- data/lib/countries/cache/locales/bg +0 -0
- data/lib/countries/cache/locales/bn +0 -0
- data/lib/countries/cache/locales/br +0 -0
- data/lib/countries/cache/locales/bs +0 -0
- data/lib/countries/cache/locales/ca +0 -0
- data/lib/countries/cache/locales/cs +0 -0
- data/lib/countries/cache/locales/cy +0 -0
- data/lib/countries/cache/locales/da +0 -0
- data/lib/countries/cache/locales/de +0 -0
- data/lib/countries/cache/locales/dz +0 -0
- data/lib/countries/cache/locales/el +0 -0
- data/lib/countries/cache/locales/en +0 -0
- data/lib/countries/cache/locales/eo +0 -0
- data/lib/countries/cache/locales/es +0 -0
- data/lib/countries/cache/locales/et +0 -0
- data/lib/countries/cache/locales/eu +0 -0
- data/lib/countries/cache/locales/fa +0 -0
- data/lib/countries/cache/locales/fi +0 -0
- data/lib/countries/cache/locales/fo +0 -0
- data/lib/countries/cache/locales/fr +0 -0
- data/lib/countries/cache/locales/ga +0 -0
- data/lib/countries/cache/locales/gl +0 -0
- data/lib/countries/cache/locales/gu +0 -0
- data/lib/countries/cache/locales/he +0 -0
- data/lib/countries/cache/locales/hi +0 -0
- data/lib/countries/cache/locales/hr +0 -0
- data/lib/countries/cache/locales/hu +0 -0
- data/lib/countries/cache/locales/hy +0 -0
- data/lib/countries/cache/locales/ia +0 -0
- data/lib/countries/cache/locales/id +0 -0
- data/lib/countries/cache/locales/is +0 -0
- data/lib/countries/cache/locales/it +0 -0
- data/lib/countries/cache/locales/ja +0 -0
- data/lib/countries/cache/locales/ka +0 -0
- data/lib/countries/cache/locales/kk +0 -0
- data/lib/countries/cache/locales/km +0 -0
- data/lib/countries/cache/locales/kn +0 -0
- data/lib/countries/cache/locales/ko +0 -0
- data/lib/countries/cache/locales/ku +0 -0
- data/lib/countries/cache/locales/lt +0 -0
- data/lib/countries/cache/locales/lv +0 -0
- data/lib/countries/cache/locales/mi +0 -0
- data/lib/countries/cache/locales/mk +0 -0
- data/lib/countries/cache/locales/ml +0 -0
- data/lib/countries/cache/locales/mn +0 -0
- data/lib/countries/cache/locales/mr +0 -0
- data/lib/countries/cache/locales/ms +0 -0
- data/lib/countries/cache/locales/mt +0 -0
- data/lib/countries/cache/locales/nb +0 -0
- data/lib/countries/cache/locales/ne +0 -0
- data/lib/countries/cache/locales/nl +0 -0
- data/lib/countries/cache/locales/nn +0 -0
- data/lib/countries/cache/locales/oc +0 -0
- data/lib/countries/cache/locales/or +0 -0
- data/lib/countries/cache/locales/pa +0 -0
- data/lib/countries/cache/locales/pl +0 -0
- data/lib/countries/cache/locales/ps +0 -0
- data/lib/countries/cache/locales/pt +0 -0
- data/lib/countries/cache/locales/ro +0 -0
- data/lib/countries/cache/locales/ru +0 -0
- data/lib/countries/cache/locales/rw +0 -0
- data/lib/countries/cache/locales/si +0 -0
- data/lib/countries/cache/locales/sk +0 -0
- data/lib/countries/cache/locales/sl +0 -0
- data/lib/countries/cache/locales/so +0 -0
- data/lib/countries/cache/locales/sq +0 -0
- data/lib/countries/cache/locales/sr +0 -0
- data/lib/countries/cache/locales/sv +0 -0
- data/lib/countries/cache/locales/sw +0 -0
- data/lib/countries/cache/locales/ta +0 -0
- data/lib/countries/cache/locales/te +0 -0
- data/lib/countries/cache/locales/th +0 -0
- data/lib/countries/cache/locales/ti +0 -0
- data/lib/countries/cache/locales/tk +0 -0
- data/lib/countries/cache/locales/tl +0 -0
- data/lib/countries/cache/locales/tr +0 -0
- data/lib/countries/cache/locales/tt +0 -0
- data/lib/countries/cache/locales/ug +0 -0
- data/lib/countries/cache/locales/uk +0 -0
- data/lib/countries/cache/locales/ve +0 -0
- data/lib/countries/cache/locales/vi +0 -0
- data/lib/countries/cache/locales/wa +0 -0
- data/lib/countries/cache/locales/wo +0 -0
- data/lib/countries/cache/locales/xh +0 -0
- data/lib/countries/cache/locales/zh +0 -0
- data/lib/countries/cache/locales/zu +0 -0
- data/lib/countries/configuration.rb +37 -0
- data/lib/countries/country.rb +115 -159
- data/lib/countries/country/attr_readers.rb +49 -0
- data/lib/countries/data.rb +76 -13
- data/lib/countries/iso3166.rb +4 -2
- data/lib/countries/setup.rb +7 -7
- data/lib/countries/timezones.rb +11 -0
- data/lib/countries/version.rb +1 -1
- data/spec/configuration_spec.rb +43 -0
- data/spec/country_spec.rb +22 -36
- data/spec/data_spec.rb +73 -0
- data/spec/global_spec.rb +29 -0
- data/spec/mongoid_spec.rb +1 -1
- data/spec/spec_helper.rb +24 -0
- data/spec/timezone_spec.rb +32 -0
- metadata +110 -9
- data/spec/setup_spec.rb +0 -14
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module ISO3166
|
|
2
|
+
module Countries
|
|
3
|
+
module AttrReaders
|
|
4
|
+
AttrReaders = [
|
|
5
|
+
:number,
|
|
6
|
+
:alpha2,
|
|
7
|
+
:alpha3,
|
|
8
|
+
:name,
|
|
9
|
+
:names,
|
|
10
|
+
:latitude,
|
|
11
|
+
:longitude,
|
|
12
|
+
:continent,
|
|
13
|
+
:region,
|
|
14
|
+
:subregion,
|
|
15
|
+
:world_region,
|
|
16
|
+
:country_code,
|
|
17
|
+
:national_destination_code_lengths,
|
|
18
|
+
:national_number_lengths,
|
|
19
|
+
:international_prefix,
|
|
20
|
+
:national_prefix,
|
|
21
|
+
:address_format,
|
|
22
|
+
:translations,
|
|
23
|
+
:translated_names,
|
|
24
|
+
:ioc,
|
|
25
|
+
:gec,
|
|
26
|
+
:un_locode,
|
|
27
|
+
:languages,
|
|
28
|
+
:nationality,
|
|
29
|
+
:dissolved_on,
|
|
30
|
+
:eu_member,
|
|
31
|
+
:alt_currency,
|
|
32
|
+
:vat_rates,
|
|
33
|
+
:postal_code,
|
|
34
|
+
:min_longitude,
|
|
35
|
+
:min_latitude,
|
|
36
|
+
:max_longitude,
|
|
37
|
+
:max_latitude,
|
|
38
|
+
:latitude_dec,
|
|
39
|
+
:longitude_dec
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
AttrReaders.each do |meth|
|
|
43
|
+
define_method meth do
|
|
44
|
+
@data[meth.to_s]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/countries/data.rb
CHANGED
|
@@ -4,30 +4,93 @@ module ISO3166
|
|
|
4
4
|
class Data
|
|
5
5
|
@@cache = nil
|
|
6
6
|
def initialize(alpha2)
|
|
7
|
+
self.class.update_cache
|
|
7
8
|
@alpha2 = alpha2.to_s.upcase
|
|
8
|
-
Data.load_cache unless @@cache
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def call
|
|
12
12
|
@@cache[@alpha2]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
class << self
|
|
16
|
+
def cache
|
|
17
|
+
update_cache
|
|
18
|
+
end
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
def reset
|
|
21
|
+
@@cache = nil
|
|
22
|
+
@@codes = nil
|
|
23
|
+
end
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
def codes
|
|
26
|
+
@@codes ||= load_yaml(['data', 'countries.yaml']).freeze
|
|
27
|
+
end
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
def update_cache
|
|
30
|
+
return @@cache unless cache_flush_required?
|
|
31
|
+
@@cache ||= marshal %w(cache countries )
|
|
32
|
+
|
|
33
|
+
locales_to_remove.each do |locale|
|
|
34
|
+
unload_translations(locale)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
locales_to_load.each do |locale|
|
|
38
|
+
load_translations(locale)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@@cache.freeze
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
def cache_flush_required?
|
|
46
|
+
locales_to_load.size && locales_to_remove.size
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def locales_to_load
|
|
50
|
+
requested_locales - loaded_locales
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def locales_to_remove
|
|
54
|
+
loaded_locales - requested_locales
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def requested_locales
|
|
58
|
+
ISO3166.configuration.locales.map { |l| l.to_s.downcase }
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def loaded_locales
|
|
62
|
+
ISO3166.configuration.loaded_locales.map { |l| l.to_s.downcase }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def load_translations(locale)
|
|
66
|
+
locale_names = marshal(['cache', 'locales', locale])
|
|
67
|
+
codes.each do |alpha2|
|
|
68
|
+
@@cache[alpha2]['translations'] ||= {}
|
|
69
|
+
@@cache[alpha2]['translations'][locale] = locale_names[alpha2].freeze
|
|
70
|
+
@@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
|
|
71
|
+
end
|
|
72
|
+
ISO3166.configuration.loaded_locales << locale
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def unload_translations(locale)
|
|
76
|
+
codes.each do |alpha2|
|
|
77
|
+
@@cache[alpha2]['translations'].delete(locale)
|
|
78
|
+
@@cache[alpha2]['translated_names'] = @@cache[alpha2]['translations'].values.freeze
|
|
79
|
+
end
|
|
80
|
+
ISO3166.configuration.loaded_locales.delete(locale)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def marshal(file_array)
|
|
84
|
+
Marshal.load(File.binread(datafile_path file_array))
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def datafile_path(file_array)
|
|
88
|
+
File.join([File.dirname(__FILE__)] + file_array)
|
|
89
|
+
end
|
|
28
90
|
|
|
29
|
-
|
|
30
|
-
|
|
91
|
+
def load_yaml(file_array)
|
|
92
|
+
YAML.load_file(datafile_path(file_array))
|
|
93
|
+
end
|
|
31
94
|
end
|
|
32
95
|
end
|
|
33
96
|
end
|
data/lib/countries/iso3166.rb
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
require 'yaml'
|
|
2
|
-
require 'iso4217'
|
|
3
2
|
require 'i18n_data'
|
|
3
|
+
require 'money'
|
|
4
4
|
|
|
5
|
-
require 'countries/
|
|
5
|
+
require 'countries/configuration'
|
|
6
6
|
require 'countries/data'
|
|
7
|
+
require 'countries/country/attr_readers'
|
|
7
8
|
require 'countries/country'
|
|
9
|
+
require 'countries/timezones'
|
data/lib/countries/setup.rb
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
module ISO3166
|
|
2
2
|
##
|
|
3
|
+
# <b>DEPRECATED:</b> Please use <tt>Data</tt> instead.
|
|
4
|
+
# TODO: Remove at version 2.1
|
|
3
5
|
# Handles building the in memory store of countries data
|
|
4
6
|
class Setup
|
|
7
|
+
# <b>DEPRECATED:</b> Please use <tt>Data.codes</tt> instead.
|
|
5
8
|
def codes
|
|
6
|
-
|
|
9
|
+
warn "[DEPRECATION] `Setup.codes` is deprecated. Please use `Data.codes` instead."
|
|
10
|
+
Data.codes
|
|
7
11
|
end
|
|
8
12
|
|
|
9
13
|
def data
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
codes.each do |alpha2|
|
|
13
|
-
@data[alpha2] = Data.new(alpha2).call
|
|
14
|
-
end
|
|
15
|
-
@data.freeze
|
|
14
|
+
warn "[DEPRECATION] `Setup.new.data` is deprecated without replacement
|
|
15
|
+
data is now loaded per locale Data.new(:en).call"
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Extend Country class with support for timezones
|
|
2
|
+
module ISO3166
|
|
3
|
+
# Extend Country class with support for timezones
|
|
4
|
+
module TimezoneExtensions
|
|
5
|
+
def timezones
|
|
6
|
+
@tz_country ||= TZInfo::Country.get(alpha2)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
ISO3166::Country.send(:include, ISO3166::TimezoneExtensions)
|
data/lib/countries/version.rb
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'ISO3166.configuration' do
|
|
5
|
+
it 'has a configuration' do
|
|
6
|
+
expect(ISO3166.configuration).to be_a ISO3166::Configuration
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'locales can be changed' do
|
|
10
|
+
ISO3166.configuration.locales = [:es]
|
|
11
|
+
expect(ISO3166.configuration.locales).to eq [:es]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'locales are assumed from I18n.available_locales' do
|
|
15
|
+
I18n.available_locales = [:de, :en]
|
|
16
|
+
ISO3166.reset
|
|
17
|
+
expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
|
|
18
|
+
expect(ISO3166::Country.new('DE').translation(:es)).to eq nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'locales can be changed' do
|
|
22
|
+
ISO3166.configuration.locales = [:de]
|
|
23
|
+
expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
|
|
24
|
+
expect(ISO3166::Country.new('DE').translation(:es)).to eq nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'locales can be changed' do
|
|
28
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
29
|
+
expect(ISO3166::Country.new('DE').translation(:es)).to eq 'Alemania'
|
|
30
|
+
expect(ISO3166::Country.new('DE').translation(:en)).to eq 'Germany'
|
|
31
|
+
expect(ISO3166::Country.new('DE').translation(:de)).to eq 'Deutschland'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'locales can be changed with a block' do
|
|
35
|
+
ISO3166.configure do |config|
|
|
36
|
+
config.locales = [:af, :am, :ar, :as, :az, :be, :bg, :bn, :br, :bs, :ca, :cs, :cy, :da, :de, :dz, :el, :en, :eo, :es, :et, :eu, :fa, :fi, :fo, :fr, :ga, :gl, :gu, :he, :hi, :hr, :hu, :hy, :ia, :id, :is, :it, :ja, :ka, :kk, :km, :kn, :ko, :ku, :lt, :lv, :mi, :mk, :ml, :mn, :mr, :ms, :mt, :nb, :ne, :nl, :nn, :oc, :or, :pa, :pl, :ps, :pt, :ro, :ru, :rw, :si, :sk, :sl, :so, :sq, :sr, :sv, :sw, :ta, :te, :th, :ti, :tk, :tl, :tr, :tt, :ug, :uk, :ve, :vi, :wa, :wo, :xh, :zh, :zu]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
expect(ISO3166::Country.new('DE').translations.size).to eq 92
|
|
40
|
+
|
|
41
|
+
expect(ISO3166.configuration.loaded_locales.size).to eq 92
|
|
42
|
+
end
|
|
43
|
+
end
|
data/spec/country_spec.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
4
4
|
|
|
5
5
|
describe ISO3166::Country do
|
|
6
6
|
let(:country) { ISO3166::Country.search('US') }
|
|
@@ -244,10 +244,21 @@ describe ISO3166::Country do
|
|
|
244
244
|
expect(countries.first[0]).to eq('Afghanistan')
|
|
245
245
|
expect(countries.size).to eq(250)
|
|
246
246
|
end
|
|
247
|
+
|
|
248
|
+
it 'should return an alphabetized list of all country names translated to current locale with ISOCODE alpha2' do
|
|
249
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
250
|
+
|
|
251
|
+
countries = ISO3166::Country.all_names_with_codes(:es)
|
|
252
|
+
expect(countries).to be_an(Array)
|
|
253
|
+
expect(countries.first[0]).to be_a(String)
|
|
254
|
+
expect(countries.first[0]).to eq('Afganistán')
|
|
255
|
+
expect(countries.size).to eq(250)
|
|
256
|
+
end
|
|
247
257
|
end
|
|
248
258
|
|
|
249
259
|
describe 'translation' do
|
|
250
260
|
it 'should return the localized name for a country to the selected locale' do
|
|
261
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
251
262
|
countries = ISO3166::Country.new(:de).translation('de')
|
|
252
263
|
expect(countries).to be_an(String)
|
|
253
264
|
expect(countries).to eq('Deutschland')
|
|
@@ -311,41 +322,11 @@ describe ISO3166::Country do
|
|
|
311
322
|
|
|
312
323
|
describe 'currency' do
|
|
313
324
|
it 'should return an instance of Currency' do
|
|
314
|
-
expect(country.currency).to be_a(
|
|
325
|
+
expect(country.currency).to be_a(Money::Currency)
|
|
315
326
|
end
|
|
316
327
|
|
|
317
328
|
it 'should allow access to symbol' do
|
|
318
|
-
expect(country.currency
|
|
319
|
-
end
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
describe 'Country class' do
|
|
323
|
-
context "when loaded via 'iso3166' existance" do
|
|
324
|
-
subject { defined?(Country) }
|
|
325
|
-
|
|
326
|
-
it { is_expected.to be_falsey }
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
context "when loaded via 'global'" do
|
|
330
|
-
before { require 'countries/global' }
|
|
331
|
-
|
|
332
|
-
describe 'existance' do
|
|
333
|
-
subject { defined?(Country) }
|
|
334
|
-
|
|
335
|
-
it { is_expected.to be_truthy }
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
describe 'superclass' do
|
|
339
|
-
subject { Country.superclass }
|
|
340
|
-
|
|
341
|
-
it { is_expected.to eq(ISO3166::Country) }
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
describe 'to_s' do
|
|
345
|
-
it 'should return the country name' do
|
|
346
|
-
expect(Country.new('GB').to_s).to eq('United Kingdom')
|
|
347
|
-
end
|
|
348
|
-
end
|
|
329
|
+
expect(country.currency.symbol).to eq('$')
|
|
349
330
|
end
|
|
350
331
|
end
|
|
351
332
|
|
|
@@ -467,6 +448,11 @@ describe ISO3166::Country do
|
|
|
467
448
|
end
|
|
468
449
|
|
|
469
450
|
context 'when search translation found' do
|
|
451
|
+
before do
|
|
452
|
+
ISO3166.configure do |config|
|
|
453
|
+
config.locales = [:af, :am, :ar, :as, :az, :be, :bg, :bn, :br, :bs, :ca, :cs, :cy, :da, :de, :dz, :el, :en, :eo, :es, :et, :eu, :fa, :fi, :fo, :fr, :ga, :gl, :gu, :he, :hi, :hr, :hu, :hy, :ia, :id, :is, :it, :ja, :ka, :kk, :km, :kn, :ko, :ku, :lt, :lv, :mi, :mk, :ml, :mn, :mr, :ms, :mt, :nb, :ne, :nl, :nn, :oc, :or, :pa, :pl, :ps, :pt, :ro, :ru, :rw, :si, :sk, :sl, :so, :sq, :sr, :sv, :sw, :ta, :te, :th, :ti, :tk, :tl, :tr, :tt, :ug, :uk, :ve, :vi, :wa, :wo, :xh, :zh, :zu]
|
|
454
|
+
end
|
|
455
|
+
end
|
|
470
456
|
let(:uk) { ISO3166::Country.find_country_by_translated_names('Velika Britanija') }
|
|
471
457
|
|
|
472
458
|
it 'should be a country instance' do
|
|
@@ -556,7 +542,7 @@ describe ISO3166::Country do
|
|
|
556
542
|
|
|
557
543
|
describe 'names in Data' do
|
|
558
544
|
it 'should be unique (to allow .find_by_name work properly)' do
|
|
559
|
-
names = ISO3166::
|
|
545
|
+
names = ISO3166::Data.cache.map do |_k, v|
|
|
560
546
|
[v['name'], v['names']].flatten.uniq
|
|
561
547
|
end.flatten
|
|
562
548
|
|
|
@@ -568,7 +554,7 @@ describe ISO3166::Country do
|
|
|
568
554
|
let(:norway) { ISO3166::Country.search('NO') }
|
|
569
555
|
|
|
570
556
|
it 'should have a currency' do
|
|
571
|
-
expect(norway.currency).to be_a(
|
|
557
|
+
expect(norway.currency).to be_a(Money::Currency)
|
|
572
558
|
end
|
|
573
559
|
end
|
|
574
560
|
|
|
@@ -576,7 +562,7 @@ describe ISO3166::Country do
|
|
|
576
562
|
let(:guernsey) { ISO3166::Country.search('GG') }
|
|
577
563
|
|
|
578
564
|
it 'should have a currency' do
|
|
579
|
-
expect(guernsey.currency.
|
|
565
|
+
expect(guernsey.currency.iso_code).to eq('GBP')
|
|
580
566
|
end
|
|
581
567
|
end
|
|
582
568
|
|
data/spec/data_spec.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'benchmark'
|
|
4
|
+
|
|
5
|
+
describe ISO3166::Data do
|
|
6
|
+
it 'responds to call' do
|
|
7
|
+
data = ISO3166::Data.new('US').call
|
|
8
|
+
expect(data['translated_names']).to be_a Array
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'can load selective locales' do
|
|
12
|
+
# ISO3166::Data.update_cache
|
|
13
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
14
|
+
data = ISO3166::Data.new('US').call
|
|
15
|
+
expect(data['translated_names'].size).to eq (3)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'can load selective locales and reload efficiently' do
|
|
19
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
20
|
+
data = ISO3166::Data.new('US').call
|
|
21
|
+
expect(data['translations']).to eq({"de"=>"Vereinigte Staaten", "es"=>"Estados Unidos", "en"=>"United States"})
|
|
22
|
+
expect(data['translated_names'].sort).to eq ["Vereinigte Staaten", "Estados Unidos", "United States"].sort
|
|
23
|
+
ISO3166.configuration.locales = [:en]
|
|
24
|
+
data = ISO3166::Data.new('US').call
|
|
25
|
+
expect(data['translated_names'].size).to eq (1)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'locales will load prior to return results' do
|
|
29
|
+
# require 'memory_profiler'
|
|
30
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
31
|
+
# report = MemoryProfiler.report do
|
|
32
|
+
ISO3166::Data.update_cache
|
|
33
|
+
# end
|
|
34
|
+
|
|
35
|
+
# report.pretty_print(to_file: 'tmp/memory/3_locales')
|
|
36
|
+
ISO3166::Data.update_cache
|
|
37
|
+
|
|
38
|
+
ISO3166.configure do |config|
|
|
39
|
+
config.locales = [:af, :am, :ar, :as, :az, :be, :bg, :bn, :br, :bs, :ca, :cs, :cy, :da, :de, :dz, :el, :en, :eo, :es, :et, :eu, :fa, :fi, :fo, :fr, :ga, :gl, :gu, :he, :hi, :hr, :hu, :hy, :ia, :id, :is, :it, :ja, :ka, :kk, :km, :kn, :ko, :ku, :lt, :lv, :mi, :mk, :ml, :mn, :mr, :ms, :mt, :nb, :ne, :nl, :nn, :oc, :or, :pa, :pl, :ps, :pt, :ro, :ru, :rw, :si, :sk, :sl, :so, :sq, :sr, :sv, :sw, :ta, :te, :th, :ti, :tk, :tl, :tr, :tt, :ug, :uk, :ve, :vi, :wa, :wo, :xh, :zh, :zu]
|
|
40
|
+
end
|
|
41
|
+
# puts Benchmark.measure {ISO3166::Data.update_cache}
|
|
42
|
+
|
|
43
|
+
# report = MemoryProfiler.report do
|
|
44
|
+
ISO3166::Data.update_cache
|
|
45
|
+
# end
|
|
46
|
+
|
|
47
|
+
# report.pretty_print(to_file: 'tmp/memory/all_locales')
|
|
48
|
+
|
|
49
|
+
expect(ISO3166::Country.new('DE').translations.size).to eq 92
|
|
50
|
+
|
|
51
|
+
expect(ISO3166.configuration.loaded_locales.size).to eq 92
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'locales will load prior and be cached' do
|
|
55
|
+
ISO3166.reset
|
|
56
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
57
|
+
expect(ISO3166::Data.send(:locales_to_load) ).to eql(['es', 'de', 'en'])
|
|
58
|
+
ISO3166::Data.update_cache
|
|
59
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
60
|
+
expect(ISO3166::Data.send(:locales_to_load) ).to eql([])
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'locales will load prior and be cached' do
|
|
64
|
+
ISO3166.reset
|
|
65
|
+
ISO3166.configuration.locales = [:es, :de, :en]
|
|
66
|
+
expect(ISO3166::Data.send(:locales_to_remove) ).to eql([])
|
|
67
|
+
expect(ISO3166::Country.new('DE').translation('de')).to eq 'Deutschland'
|
|
68
|
+
ISO3166::Data.update_cache
|
|
69
|
+
ISO3166.configuration.locales = [:es, :en]
|
|
70
|
+
expect(ISO3166::Data.send(:locales_to_remove) ).to eql(['de'])
|
|
71
|
+
expect(ISO3166::Country.new('DE').translation('de')).to eq nil
|
|
72
|
+
end
|
|
73
|
+
end
|
data/spec/global_spec.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
describe 'global Country class' do
|
|
2
|
+
context "when loaded via 'iso3166' existance" do
|
|
3
|
+
subject { defined?(Country) }
|
|
4
|
+
|
|
5
|
+
it { is_expected.to be_falsey }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "when loaded via 'global'" do
|
|
9
|
+
before { require 'countries/global' }
|
|
10
|
+
|
|
11
|
+
describe 'existance' do
|
|
12
|
+
subject { defined?(Country) }
|
|
13
|
+
|
|
14
|
+
it { is_expected.to be_truthy }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe 'superclass' do
|
|
18
|
+
subject { Country.superclass }
|
|
19
|
+
|
|
20
|
+
it { is_expected.to eq(ISO3166::Country) }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe 'to_s' do
|
|
24
|
+
it 'should return the country name' do
|
|
25
|
+
expect(Country.new('GB').to_s).to eq('United Kingdom')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|