countries 4.2.3 → 5.0.2

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +70 -0
  3. data/.github/workflows/tests.yml +3 -7
  4. data/.rubocop.yml +40 -1
  5. data/.rubocop_todo.yml +8 -41
  6. data/CHANGELOG.md +21 -2
  7. data/Gemfile +5 -3
  8. data/README.markdown +48 -60
  9. data/Rakefile +13 -31
  10. data/UPGRADE.md +26 -0
  11. data/bin/console +1 -0
  12. data/countries.gemspec +7 -5
  13. data/lib/countries/cache/countries.json +1 -1
  14. data/lib/countries/cache/locales/en.json +1 -1
  15. data/lib/countries/configuration.rb +2 -0
  16. data/lib/countries/country/class_methods.rb +12 -97
  17. data/lib/countries/country/currency_methods.rb +2 -0
  18. data/lib/countries/country/emoji.rb +2 -3
  19. data/lib/countries/country/finder_methods.rb +81 -0
  20. data/lib/countries/country.rb +3 -40
  21. data/lib/countries/data/countries/KN.yaml +0 -1
  22. data/lib/countries/data/subdivisions/MX.yaml +3 -15
  23. data/lib/countries/data/subdivisions/PT.yaml +13 -13
  24. data/lib/countries/data/translation_corrections.yaml +2 -0
  25. data/lib/countries/data.rb +34 -37
  26. data/lib/countries/global.rb +2 -0
  27. data/lib/countries/iso3166.rb +3 -0
  28. data/lib/countries/kwarg_struct.rb +2 -0
  29. data/lib/countries/mongoid.rb +2 -0
  30. data/lib/countries/sources/cldr/downloader.rb +8 -8
  31. data/lib/countries/sources/cldr/subdivision.rb +3 -0
  32. data/lib/countries/sources/cldr/subdivision_updater.rb +23 -17
  33. data/lib/countries/sources/local/cached_loader.rb +3 -0
  34. data/lib/countries/sources/local/subdivision.rb +5 -2
  35. data/lib/countries/sources.rb +2 -0
  36. data/lib/countries/structure.rb +1 -1
  37. data/lib/countries/subdivision.rb +2 -0
  38. data/lib/countries/tasks/geocoding.rake +15 -6
  39. data/lib/countries/tasks/postal_codes.rake +5 -3
  40. data/lib/countries/timezones.rb +5 -2
  41. data/lib/countries/translations.rb +2 -0
  42. data/lib/countries/version.rb +3 -1
  43. data/lib/countries.rb +2 -0
  44. data/spec/00_global_spec.rb +2 -0
  45. data/spec/configuration_spec.rb +11 -5
  46. data/spec/country_spec.rb +71 -22
  47. data/spec/data_spec.rb +24 -18
  48. data/spec/mongoid_spec.rb +2 -2
  49. data/spec/perf_spec.rb +16 -16
  50. data/spec/spec_helper.rb +2 -0
  51. data/spec/subdivision_spec.rb +6 -4
  52. data/spec/thread_safety_spec.rb +4 -3
  53. data/spec/timezone_spec.rb +2 -0
  54. metadata +15 -12
  55. data/lib/countries/setup.rb +0 -18
@@ -1 +1 @@
1
- {"AW":"Aruba","AF":"Afghanistan","AO":"Angola","AI":"Anguilla","AX":"Åland Islands","AL":"Albania","AD":"Andorra","AE":"United Arab Emirates","AR":"Argentina","AM":"Armenia","AS":"American Samoa","AQ":"Antarctica","TF":"French Southern Territories","AG":"Antigua and Barbuda","AU":"Australia","AT":"Austria","AZ":"Azerbaijan","BI":"Burundi","BE":"Belgium","BJ":"Benin","BQ":"Bonaire, Sint Eustatius and Saba","BF":"Burkina Faso","BD":"Bangladesh","BG":"Bulgaria","BH":"Bahrain","BS":"Bahamas","BA":"Bosnia and Herzegovina","BL":"Saint Barthélemy","BY":"Belarus","BZ":"Belize","BM":"Bermuda","BO":"Bolivia","BR":"Brazil","BB":"Barbados","BN":"Brunei Darussalam","BT":"Bhutan","BV":"Bouvet Island","BW":"Botswana","CF":"Central African Republic","CA":"Canada","CC":"Cocos (Keeling) Islands","CH":"Switzerland","CL":"Chile","CN":"China","CI":"Côte d'Ivoire","CM":"Cameroon","CD":"Congo, The Democratic Republic of the","CG":"Congo","CK":"Cook Islands","CO":"Colombia","KM":"Comoros","CV":"Cabo Verde","CR":"Costa Rica","CU":"Cuba","CW":"Curaçao","CX":"Christmas Island","KY":"Cayman Islands","CY":"Cyprus","CZ":"Czechia","DE":"Germany","DJ":"Djibouti","DM":"Dominica","DK":"Denmark","DO":"Dominican Republic","DZ":"Algeria","EC":"Ecuador","EG":"Egypt","ER":"Eritrea","EH":"Western Sahara","ES":"Spain","EE":"Estonia","ET":"Ethiopia","FI":"Finland","FJ":"Fiji","FK":"Falkland Islands (Malvinas)","FR":"France","FO":"Faroe Islands","FM":"Micronesia, Federated States of","GA":"Gabon","GB":"United Kingdom","GE":"Georgia","GG":"Guernsey","GH":"Ghana","GI":"Gibraltar","GN":"Guinea","GP":"Guadeloupe","GM":"Gambia","GW":"Guinea-Bissau","GQ":"Equatorial Guinea","GR":"Greece","GD":"Grenada","GL":"Greenland","GT":"Guatemala","GF":"French Guiana","GU":"Guam","GY":"Guyana","HK":"Hong Kong","HM":"Heard Island and McDonald Islands","HN":"Honduras","HR":"Croatia","HT":"Haiti","HU":"Hungary","ID":"Indonesia","IM":"Isle of Man","IN":"India","IO":"British Indian Ocean Territory","IE":"Ireland","IR":"Iran, Islamic Republic of","IQ":"Iraq","IS":"Iceland","IL":"Israel","IT":"Italy","JM":"Jamaica","JE":"Jersey","JO":"Jordan","JP":"Japan","KZ":"Kazakhstan","KE":"Kenya","KG":"Kyrgyzstan","KH":"Cambodia","KI":"Kiribati","KN":"Saint Kitts and Nevis","KR":"South Korea","KW":"Kuwait","LA":"Lao People's Democratic Republic","LB":"Lebanon","LR":"Liberia","LY":"Libya","LC":"Saint Lucia","LI":"Liechtenstein","LK":"Sri Lanka","LS":"Lesotho","LT":"Lithuania","LU":"Luxembourg","LV":"Latvia","MO":"Macao","MF":"Saint Martin (French part)","MA":"Morocco","MC":"Monaco","MD":"Moldova","MG":"Madagascar","MV":"Maldives","MX":"Mexico","MH":"Marshall Islands","MK":"North Macedonia","ML":"Mali","MT":"Malta","MM":"Myanmar","ME":"Montenegro","MN":"Mongolia","MP":"Northern Mariana Islands","MZ":"Mozambique","MR":"Mauritania","MS":"Montserrat","MQ":"Martinique","MU":"Mauritius","MW":"Malawi","MY":"Malaysia","YT":"Mayotte","NA":"Namibia","NC":"New Caledonia","NE":"Niger","NF":"Norfolk Island","NG":"Nigeria","NI":"Nicaragua","NU":"Niue","NL":"Netherlands","NO":"Norway","NP":"Nepal","NR":"Nauru","NZ":"New Zealand","OM":"Oman","PK":"Pakistan","PA":"Panama","PN":"Pitcairn","PE":"Peru","PH":"Philippines","PW":"Palau","PG":"Papua New Guinea","PL":"Poland","PR":"Puerto Rico","KP":"North Korea","PT":"Portugal","PY":"Paraguay","PS":"Palestine, State of","PF":"French Polynesia","QA":"Qatar","RE":"Réunion","RO":"Romania","RU":"Russian Federation","RW":"Rwanda","SA":"Saudi Arabia","SD":"Sudan","SN":"Senegal","SG":"Singapore","GS":"South Georgia and the South Sandwich Islands","SH":"Saint Helena, Ascension and Tristan da Cunha","SJ":"Svalbard and Jan Mayen","SB":"Solomon Islands","SL":"Sierra Leone","SV":"El Salvador","SM":"San Marino","SO":"Somalia","PM":"Saint Pierre and Miquelon","RS":"Serbia","SS":"South Sudan","ST":"Sao Tome and Principe","SR":"Suriname","SK":"Slovakia","SI":"Slovenia","SE":"Sweden","SZ":"Eswatini","SX":"Sint Maarten (Dutch part)","SC":"Seychelles","SY":"Syrian Arab Republic","TC":"Turks and Caicos Islands","TD":"Chad","TG":"Togo","TH":"Thailand","TJ":"Tajikistan","TK":"Tokelau","TM":"Turkmenistan","TL":"Timor-Leste","TO":"Tonga","TT":"Trinidad and Tobago","TN":"Tunisia","TR":"Turkey","TV":"Tuvalu","TW":"Taiwan","TZ":"Tanzania","UG":"Uganda","UA":"Ukraine","UM":"United States Minor Outlying Islands","UY":"Uruguay","US":"United States","UZ":"Uzbekistan","VA":"Holy See (Vatican City State)","VC":"Saint Vincent and the Grenadines","VE":"Venezuela","VG":"Virgin Islands, British","VI":"Virgin Islands, U.S.","VN":"Vietnam","VU":"Vanuatu","WF":"Wallis and Futuna","WS":"Samoa","YE":"Yemen","ZA":"South Africa","ZM":"Zambia","ZW":"Zimbabwe"}
1
+ {"AW":"Aruba","AF":"Afghanistan","AO":"Angola","AI":"Anguilla","AX":"Åland Islands","AL":"Albania","AD":"Andorra","AE":"United Arab Emirates","AR":"Argentina","AM":"Armenia","AS":"American Samoa","AQ":"Antarctica","TF":"French Southern Territories","AG":"Antigua and Barbuda","AU":"Australia","AT":"Austria","AZ":"Azerbaijan","BI":"Burundi","BE":"Belgium","BJ":"Benin","BQ":"Bonaire, Sint Eustatius and Saba","BF":"Burkina Faso","BD":"Bangladesh","BG":"Bulgaria","BH":"Bahrain","BS":"Bahamas","BA":"Bosnia and Herzegovina","BL":"Saint Barthélemy","BY":"Belarus","BZ":"Belize","BM":"Bermuda","BO":"Bolivia","BR":"Brazil","BB":"Barbados","BN":"Brunei Darussalam","BT":"Bhutan","BV":"Bouvet Island","BW":"Botswana","CF":"Central African Republic","CA":"Canada","CC":"Cocos (Keeling) Islands","CH":"Switzerland","CL":"Chile","CN":"China","CI":"Côte d'Ivoire","CM":"Cameroon","CD":"Congo, The Democratic Republic of the","CG":"Congo","CK":"Cook Islands","CO":"Colombia","KM":"Comoros","CV":"Cabo Verde","CR":"Costa Rica","CU":"Cuba","CW":"Curaçao","CX":"Christmas Island","KY":"Cayman Islands","CY":"Cyprus","CZ":"Czechia","DE":"Germany","DJ":"Djibouti","DM":"Dominica","DK":"Denmark","DO":"Dominican Republic","DZ":"Algeria","EC":"Ecuador","EG":"Egypt","ER":"Eritrea","EH":"Western Sahara","ES":"Spain","EE":"Estonia","ET":"Ethiopia","FI":"Finland","FJ":"Fiji","FK":"Falkland Islands (Malvinas)","FR":"France","FO":"Faroe Islands","FM":"Micronesia, Federated States of","GA":"Gabon","GB":"United Kingdom","GE":"Georgia","GG":"Guernsey","GH":"Ghana","GI":"Gibraltar","GN":"Guinea","GP":"Guadeloupe","GM":"Gambia","GW":"Guinea-Bissau","GQ":"Equatorial Guinea","GR":"Greece","GD":"Grenada","GL":"Greenland","GT":"Guatemala","GF":"French Guiana","GU":"Guam","GY":"Guyana","HK":"Hong Kong","HM":"Heard Island and McDonald Islands","HN":"Honduras","HR":"Croatia","HT":"Haiti","HU":"Hungary","ID":"Indonesia","IM":"Isle of Man","IN":"India","IO":"British Indian Ocean Territory","IE":"Ireland","IR":"Iran","IQ":"Iraq","IS":"Iceland","IL":"Israel","IT":"Italy","JM":"Jamaica","JE":"Jersey","JO":"Jordan","JP":"Japan","KZ":"Kazakhstan","KE":"Kenya","KG":"Kyrgyzstan","KH":"Cambodia","KI":"Kiribati","KN":"Saint Kitts and Nevis","KR":"South Korea","KW":"Kuwait","LA":"Lao People's Democratic Republic","LB":"Lebanon","LR":"Liberia","LY":"Libya","LC":"Saint Lucia","LI":"Liechtenstein","LK":"Sri Lanka","LS":"Lesotho","LT":"Lithuania","LU":"Luxembourg","LV":"Latvia","MO":"Macao","MF":"Saint Martin (French part)","MA":"Morocco","MC":"Monaco","MD":"Moldova","MG":"Madagascar","MV":"Maldives","MX":"Mexico","MH":"Marshall Islands","MK":"North Macedonia","ML":"Mali","MT":"Malta","MM":"Myanmar","ME":"Montenegro","MN":"Mongolia","MP":"Northern Mariana Islands","MZ":"Mozambique","MR":"Mauritania","MS":"Montserrat","MQ":"Martinique","MU":"Mauritius","MW":"Malawi","MY":"Malaysia","YT":"Mayotte","NA":"Namibia","NC":"New Caledonia","NE":"Niger","NF":"Norfolk Island","NG":"Nigeria","NI":"Nicaragua","NU":"Niue","NL":"Netherlands","NO":"Norway","NP":"Nepal","NR":"Nauru","NZ":"New Zealand","OM":"Oman","PK":"Pakistan","PA":"Panama","PN":"Pitcairn","PE":"Peru","PH":"Philippines","PW":"Palau","PG":"Papua New Guinea","PL":"Poland","PR":"Puerto Rico","KP":"North Korea","PT":"Portugal","PY":"Paraguay","PS":"Palestine, State of","PF":"French Polynesia","QA":"Qatar","RE":"Réunion","RO":"Romania","RU":"Russian Federation","RW":"Rwanda","SA":"Saudi Arabia","SD":"Sudan","SN":"Senegal","SG":"Singapore","GS":"South Georgia and the South Sandwich Islands","SH":"Saint Helena, Ascension and Tristan da Cunha","SJ":"Svalbard and Jan Mayen","SB":"Solomon Islands","SL":"Sierra Leone","SV":"El Salvador","SM":"San Marino","SO":"Somalia","PM":"Saint Pierre and Miquelon","RS":"Serbia","SS":"South Sudan","ST":"Sao Tome and Principe","SR":"Suriname","SK":"Slovakia","SI":"Slovenia","SE":"Sweden","SZ":"Eswatini","SX":"Sint Maarten (Dutch part)","SC":"Seychelles","SY":"Syrian Arab Republic","TC":"Turks and Caicos Islands","TD":"Chad","TG":"Togo","TH":"Thailand","TJ":"Tajikistan","TK":"Tokelau","TM":"Turkmenistan","TL":"Timor-Leste","TO":"Tonga","TT":"Trinidad and Tobago","TN":"Tunisia","TR":"Turkey","TV":"Tuvalu","TW":"Taiwan","TZ":"Tanzania","UG":"Uganda","UA":"Ukraine","UM":"United States Minor Outlying Islands","UY":"Uruguay","US":"United States","UZ":"Uzbekistan","VA":"Holy See (Vatican City State)","VC":"Saint Vincent and the Grenadines","VE":"Venezuela","VG":"Virgin Islands, British","VI":"Virgin Islands, U.S.","VN":"Vietnam","VU":"Vanuatu","WF":"Wallis and Futuna","WS":"Samoa","YE":"Yemen","ZA":"South Africa","ZM":"Zambia","ZW":"Zimbabwe"}
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class << self
3
5
  attr_writer :configuration
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sixarm_ruby_unaccent'
2
4
 
3
5
  module ISO3166
4
6
  UNSEARCHABLE_METHODS = [:translations].freeze
5
7
 
6
- def self::Country(country_data_or_country)
8
+ def self.Country(country_data_or_country)
7
9
  case country_data_or_country
8
10
  when ISO3166::Country
9
11
  country_data_or_country
@@ -15,9 +17,6 @@ module ISO3166
15
17
  end
16
18
 
17
19
  module CountryClassMethods
18
- FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/
19
- SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/
20
-
21
20
  def new(country_data)
22
21
  super if country_data.is_a?(Hash) || codes.include?(country_data.to_s.upcase)
23
22
  end
@@ -33,10 +32,6 @@ module ISO3166
33
32
 
34
33
  alias countries all
35
34
 
36
- def all_translated(locale = 'en')
37
- translations(locale).values
38
- end
39
-
40
35
  def all_names_with_codes(locale = 'en')
41
36
  Country.all.map do |c|
42
37
  lc = (c.translation(locale) || c.iso_short_name)
@@ -50,6 +45,10 @@ module ISO3166
50
45
  end
51
46
  end
52
47
 
48
+ def all_translated(locale = 'en')
49
+ translations(locale).values
50
+ end
51
+
53
52
  def translations(locale = 'en')
54
53
  i18n_data_countries = I18nData.countries(locale.upcase)
55
54
 
@@ -62,54 +61,6 @@ module ISO3166
62
61
  i18n_data_countries.merge(custom_countries)
63
62
  end
64
63
 
65
- def search(query)
66
- country = new(query.to_s.upcase)
67
- country && country.valid? ? country : nil
68
- end
69
-
70
- def [](query)
71
- search(query)
72
- end
73
-
74
- def method_missing(method_name, *arguments)
75
- matches = method_name.to_s.match(FIND_BY_REGEX)
76
- return_all = matches[1]
77
- super unless matches
78
-
79
- if matches[3] == 'names'
80
- if RUBY_VERSION =~ /^3\.\d\.\d/
81
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
82
- else
83
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1
84
- end
85
- end
86
-
87
- countries = find_by(matches[3], arguments[0], matches[2])
88
- return_all ? countries : countries.last
89
- end
90
-
91
- def respond_to_missing?(method_name, include_private = false)
92
- matches = method_name.to_s.match(FIND_BY_REGEX)
93
- if matches && matches[3]
94
- instance_methods.include?(matches[3].to_sym)
95
- else
96
- super
97
- end
98
- end
99
-
100
- def find_all_by(attribute, val)
101
- attributes, lookup_value = parse_attributes(attribute, val)
102
-
103
- ISO3166::Data.cache.select do |_, v|
104
- country = Country.new(v)
105
- attributes.any? do |attr|
106
- Array(country.send(attr)).any? do |n|
107
- lookup_value === cached(n) { parse_value(n) }
108
- end
109
- end
110
- end
111
- end
112
-
113
64
  def subdivisions(alpha2)
114
65
  @subdivisions ||= {}
115
66
  @subdivisions[alpha2] ||= create_subdivisions(subdivision_data(alpha2))
@@ -124,51 +75,14 @@ module ISO3166
124
75
 
125
76
  protected
126
77
 
127
- def strip_accents(v)
128
- if v.is_a?(Regexp)
129
- Regexp.new(v.source.unaccent, 'i')
78
+ def strip_accents(string)
79
+ if string.is_a?(Regexp)
80
+ Regexp.new(string.source.unaccent, 'i')
130
81
  else
131
- v.to_s.unaccent.downcase
132
- end
133
- end
134
-
135
- def parse_attributes(attribute, val)
136
- raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
137
-
138
- attributes = Array(attribute.to_s)
139
- if attribute.to_s == 'name'
140
- if RUBY_VERSION =~ /^3\.\d\.\d/
141
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1, category: :deprecated
142
- else
143
- warn "DEPRECATION WARNING: 'find_by_name' and 'find_*_by_name' methods are deprecated, please refer to the README file for more information on this change.", uplevel: 1
144
- end
145
- # 'find_by_name' and 'find_*_by_name' will be changed for 5.0
146
- # The addition of 'iso_short_name' here ensures the behaviour of 4.1 is kept for 4.2
147
- attributes = %w[iso_short_name unofficial_names translated_names]
148
- end
149
-
150
- [attributes, parse_value(val)]
151
- end
152
-
153
- def searchable_attribute?(attribute)
154
- searchable_attributes.include?(attribute.to_sym)
155
- end
156
-
157
- def searchable_attributes
158
- instance_methods - UNSEARCHABLE_METHODS
159
- end
160
-
161
- def find_by(attribute, value, obj = nil)
162
- find_all_by(attribute.downcase, value).map do |country|
163
- obj.nil? ? country : new(country.last)
82
+ string.to_s.unaccent.downcase
164
83
  end
165
84
  end
166
85
 
167
- def parse_value(value)
168
- value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
169
- strip_accents(value)
170
- end
171
-
172
86
  def subdivision_data(alpha2)
173
87
  file = subdivision_file_path(alpha2)
174
88
  File.exist?(file) ? YAML.load_file(file) : {}
@@ -190,6 +104,7 @@ module ISO3166
190
104
  def cached(value)
191
105
  @_parsed_values_cache ||= {}
192
106
  return @_parsed_values_cache[value] if @_parsed_values_cache[value]
107
+
193
108
  @_parsed_values_cache[value] = yield
194
109
  end
195
110
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'money'
2
4
 
3
5
  module ISO3166
@@ -1,5 +1,4 @@
1
- #!/bin/env ruby
2
- # encoding: utf-8
1
+ # frozen_string_literal: true
3
2
 
4
3
  module ISO3166
5
4
  module Emoji
@@ -36,7 +35,7 @@ module ISO3166
36
35
  #
37
36
  # The emoji flag for this country, using Unicode Regional Indicator characters. e.g: "U+1F1FA U+1F1F8" for 🇺🇸
38
37
  def emoji_flag
39
- alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join('')
38
+ alpha2.downcase.chars.map { |c| CODE_POINTS[c] }.join
40
39
  end
41
40
  end
42
41
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ISO3166
4
+ module CountryFinderMethods
5
+ FIND_BY_REGEX = /^find_(all_)?(country_|countries_)?by_(.+)/.freeze
6
+ SEARCH_TERM_FILTER_REGEX = /\(|\)|\[\]|,/.freeze
7
+
8
+ def search(query)
9
+ country = new(query.to_s.upcase)
10
+ country&.valid? ? country : nil
11
+ end
12
+
13
+ def [](query)
14
+ search(query)
15
+ end
16
+
17
+ def find_all_by(attribute, val)
18
+ attributes, lookup_value = parse_attributes(attribute, val)
19
+
20
+ ISO3166::Data.cache.select do |_, v|
21
+ country = Country.new(v)
22
+ attributes.any? do |attr|
23
+ Array(country.send(attr)).any? do |n|
24
+ lookup_value === cached(n) { parse_value(n) }
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ def method_missing(method_name, *arguments)
31
+ matches = method_name.to_s.match(FIND_BY_REGEX)
32
+ return_all = matches[1]
33
+ super unless matches
34
+
35
+ countries = find_by(matches[3], arguments[0], matches[2])
36
+ return_all ? countries : countries.last
37
+ end
38
+
39
+ def respond_to_missing?(method_name, include_private = false)
40
+ matches = method_name.to_s.match(FIND_BY_REGEX)
41
+ if matches && matches[3]
42
+ instance_methods.include?(matches[3].to_sym)
43
+ else
44
+ super
45
+ end
46
+ end
47
+
48
+ protected
49
+
50
+ def find_by(attribute, value, obj = nil)
51
+ find_all_by(attribute.downcase, value).map do |country|
52
+ obj.nil? ? country : new(country.last)
53
+ end
54
+ end
55
+
56
+ def parse_attributes(attribute, val)
57
+ raise "Invalid attribute name '#{attribute}'" unless searchable_attribute?(attribute.to_sym)
58
+
59
+ attributes = Array(attribute.to_s)
60
+ if attribute.to_s == 'any_name'
61
+ attributes = %w[iso_long_name iso_short_name unofficial_names translated_names]
62
+ end
63
+
64
+ [attributes, parse_value(val)]
65
+ end
66
+
67
+ def parse_value(value)
68
+ value = value.gsub(SEARCH_TERM_FILTER_REGEX, '') if value.respond_to?(:gsub)
69
+ strip_accents(value)
70
+ end
71
+
72
+ def searchable_attribute?(attribute)
73
+ searchable_attributes.include?(attribute.to_sym)
74
+ end
75
+
76
+ def searchable_attributes
77
+ # Add name and names until we complete the deprecation of the finders
78
+ instance_methods - UNSEARCHABLE_METHODS + [:name, :names, :any_name]
79
+ end
80
+ end
81
+ end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ISO3166
2
4
  class Country
3
5
  extend CountryClassMethods
6
+ extend CountryFinderMethods
4
7
  include Emoji
5
8
  attr_reader :data
6
9
 
@@ -31,24 +34,6 @@ module ISO3166
31
34
  alias zip_format postal_code_format
32
35
  alias languages languages_official
33
36
 
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
42
-
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
51
-
52
37
  def ==(other)
53
38
  other.respond_to?(:alpha2) && other.alpha2 == alpha2
54
39
  end
@@ -136,28 +121,6 @@ module ISO3166
136
121
  @local_name ||= local_names.first
137
122
  end
138
123
 
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
146
- end
147
- iso_short_name
148
- end
149
-
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
157
- end
158
- unofficial_names
159
- end
160
-
161
124
  # @!attribute alpha2
162
125
  # @return [String] the ISO3166 alpha-2 code for this Country
163
126
  #
@@ -9,7 +9,6 @@ KN:
9
9
  geo:
10
10
  latitude: 17.357822
11
11
  longitude: -62.782998
12
- longitude_dec: "-62.643184661865234"
13
12
  max_latitude: 17.4205891
14
13
  max_longitude: -62.52369989999999
15
14
  min_latitude: 17.07861
@@ -565,7 +565,7 @@ CMX:
565
565
  COA:
566
566
  name: Coahuila
567
567
  code:
568
- unofficial_names: Coahuila
568
+ unofficial_names: Coahuila de Zaragoza
569
569
  geo:
570
570
  latitude: 27.058676
571
571
  longitude: -101.7068294
@@ -1170,7 +1170,7 @@ MEX:
1170
1170
  MIC:
1171
1171
  name: Michoacán
1172
1172
  code:
1173
- unofficial_names: Michoacán
1173
+ unofficial_names: Michoacán de Ocampo
1174
1174
  geo:
1175
1175
  latitude: 19.5665192
1176
1176
  longitude: -101.7068294
@@ -2234,7 +2234,7 @@ TLA:
2234
2234
  VER:
2235
2235
  name: Veracruz
2236
2236
  code:
2237
- unofficial_names: Veracruz
2237
+ unofficial_names: Veracruz de Ignacio de la Llave
2238
2238
  geo:
2239
2239
  latitude: 19.173773
2240
2240
  longitude: -96.1342241
@@ -2463,15 +2463,3 @@ ZAC:
2463
2463
  mk: Закатекас
2464
2464
  'no': Zacatecas
2465
2465
  comments:
2466
- DIF:
2467
- name: Mexico City
2468
- code:
2469
- unofficial_names:
2470
- geo:
2471
- latitude: 19.3663162
2472
- longitude: -99.1593231
2473
- translations:
2474
- en: Mexico City
2475
- ccp: "\U0001111F\U0001112C\U00011107\U00011134\U00011125\U00011128\U00011107\U0001112E
2476
- \U00011125\U00011128\U00011111\U00011128"
2477
- comments:
@@ -86,7 +86,7 @@
86
86
  nb: Beja
87
87
  nl: Beja
88
88
  pl: Dystrykt Beja
89
- pt: Distrito de Beja
89
+ pt: Beja
90
90
  ro: Districtul Beja
91
91
  ru: Бежа
92
92
  si: බෙජා දිස්ත්‍රික්කය
@@ -147,7 +147,7 @@
147
147
  nb: Braga
148
148
  nl: Braga
149
149
  pl: Dystrykt Braga
150
- pt: Distrito de Braga
150
+ pt: Braga
151
151
  ro: Districtul Braga
152
152
  ru: Брага
153
153
  si: බ්‍රගා දිස්ත්‍රික්කය
@@ -252,7 +252,7 @@
252
252
  nb: Castelo Branco
253
253
  nl: Castelo Branco
254
254
  pl: Dystrykt Castelo Branco
255
- pt: Distrito de Castelo Branco
255
+ pt: Castelo Branco
256
256
  ro: Districtul Castelo Branco
257
257
  ru: Каштелу-Бранку
258
258
  si: කැස්ටෙලෝ බ්‍රන්කෝ දිස්ත්‍රික්කය
@@ -313,7 +313,7 @@
313
313
  nb: Coimbra
314
314
  nl: Coimbra
315
315
  pl: Dystrykt Coimbra
316
- pt: Distrito de Coimbra
316
+ pt: Coimbra
317
317
  ro: Districtul Coimbra
318
318
  ru: Коимбра
319
319
  si: කොයිම්බ්‍රා දිස්ත්‍රික්කය
@@ -372,7 +372,7 @@
372
372
  nb: Évora
373
373
  nl: Évora
374
374
  pl: Dystrykt Évora
375
- pt: Distrito de Évora
375
+ pt: Évora
376
376
  ro: Districtul Évora
377
377
  ru: Эвора
378
378
  si: එවොරා දිස්ත්‍රික්කය
@@ -432,7 +432,7 @@
432
432
  nb: Faro
433
433
  nl: Faro
434
434
  pl: Dystrykt Faro
435
- pt: Distrito de Faro
435
+ pt: Faro
436
436
  ro: Districtul Faro
437
437
  ru: Фару
438
438
  si: ෆාරො දිස්ත්‍රික්කය
@@ -486,7 +486,7 @@
486
486
  nb: Guarda
487
487
  nl: Guarda
488
488
  pl: Dystrykt Guarda
489
- pt: Distrito da Guarda
489
+ pt: Guarda
490
490
  ro: Districtul Guarda
491
491
  ru: Гуарда
492
492
  sr: Гварда
@@ -539,7 +539,7 @@
539
539
  nb: Leiria
540
540
  nl: Leiria
541
541
  pl: Dystrykt Leiria
542
- pt: Distrito de Leiria
542
+ pt: Leiria
543
543
  ro: Districtul Leiria
544
544
  ru: Лейрия
545
545
  si: ලේයිරියා දිස්ත්‍රික්කය
@@ -597,7 +597,7 @@
597
597
  nb: Lisboa
598
598
  nl: Lissabon
599
599
  pl: Dystrykt Lizbona
600
- pt: Distrito de Lisboa
600
+ pt: Lisboa
601
601
  ro: Districtul Lisabona
602
602
  ru: Лиссабон
603
603
  sr: Лисабон
@@ -642,7 +642,7 @@
642
642
  nb: Portalegre
643
643
  nl: Portalegre
644
644
  pl: Dystrykt Portalegre
645
- pt: Distrito de Portalegre
645
+ pt: Portalegre
646
646
  ro: Districtul Portalegre
647
647
  ru: Порталегри
648
648
  sr: Порталегре
@@ -741,7 +741,7 @@
741
741
  nb: Santarém
742
742
  nl: Santarém
743
743
  pl: Dystrykt Santarém
744
- pt: Distrito de Santarém
744
+ pt: Santarém
745
745
  ro: Districtul Santarém
746
746
  ru: Сантарен
747
747
  si: සැන්ටරේම් දිස්ත්‍රික්කය
@@ -802,7 +802,7 @@
802
802
  nb: Setúbal
803
803
  nl: Setúbal
804
804
  pl: Dystrykt Setúbal
805
- pt: Distrito de Setúbal
805
+ pt: Setúbal
806
806
  ro: Districtul Setúbal
807
807
  ru: Сетубал
808
808
  si: සෙටුබල් දිස්ත්‍රික්කය
@@ -862,7 +862,7 @@
862
862
  nb: Viana do Castelo
863
863
  nl: Viana do Castelo
864
864
  pl: Dystrykt Viana do Castelo
865
- pt: Distrito de Viana do Castelo
865
+ pt: Viana do Castelo
866
866
  ro: Districtul Viana do Castelo
867
867
  ru: Виана-ду-Каштелу
868
868
  si: වියානා ඩො කැස්ටෙලෝ දිස්ත්‍රික්කය
@@ -21,6 +21,8 @@ ar:
21
21
  CW: "كوراساو"
22
22
  da:
23
23
  CZ: 'Tjekkiet'
24
+ en:
25
+ IR: 'Iran'
24
26
  fa:
25
27
  IR: "ایران"
26
28
  he: