Module: ISO3166::CountryClassMethods
- Included in:
- Country
- Defined in:
- lib/countries/country/class_methods.rb
Instance Method Summary collapse
- #all(&blk) ⇒ Object (also: #countries)
- #all_names_with_codes(locale = 'en') ⇒ Object
- #all_translated(locale = 'en') ⇒ Object
- #codes ⇒ Object
-
#collect_countries_with(query_val, query_method = :alpha2, result_method = :itself) ⇒ Array
An array of countries matching the provided query, or the result of applying ‘result_method` to the array of `Country` objects.
-
#collect_likely_countries_by_subdivision_name(subdivision_str, result_method = :itself) ⇒ Array
An array of countries with subdivisions matching the provided name, or the result of applying ‘result_method` to the array of `Country` objects.
- #new(country_data) ⇒ Object
- #pluck(*attributes) ⇒ Object
- #translations(locale = 'en') ⇒ Object
Instance Method Details
#all(&blk) ⇒ Object Also known as: countries
28 29 30 31 |
# File 'lib/countries/country/class_methods.rb', line 28 def all(&blk) blk ||= proc { |_alpha2, d| ISO3166::Country.new(d) } ISO3166::Data.cache.map(&blk) end |
#all_names_with_codes(locale = 'en') ⇒ Object
35 36 37 38 39 40 |
# File 'lib/countries/country/class_methods.rb', line 35 def all_names_with_codes(locale = 'en') Country.all.map do |c| lc = c.translation(locale) || c.iso_short_name [lc.respond_to?('html_safe') ? lc.html_safe : lc, c.alpha2] end.sort end |
#all_translated(locale = 'en') ⇒ Object
46 47 48 |
# File 'lib/countries/country/class_methods.rb', line 46 def all_translated(locale = 'en') translations(locale).values end |
#codes ⇒ Object
24 25 26 |
# File 'lib/countries/country/class_methods.rb', line 24 def codes ISO3166::Data.codes end |
#collect_countries_with(query_val, query_method = :alpha2, result_method = :itself) ⇒ Array
Returns An array of countries matching the provided query, or the result of applying ‘result_method` to the array of `Country` objects.
69 70 71 72 73 74 |
# File 'lib/countries/country/class_methods.rb', line 69 def collect_countries_with(query_val, query_method = :alpha2, result_method = :itself) return nil unless [query_method, result_method].map { |e| method_defined? e }.all? all.select { |country| country.send(query_method).include? query_val } .map { |country| country.send(result_method) } end |
#collect_likely_countries_by_subdivision_name(subdivision_str, result_method = :itself) ⇒ Array
Returns An array of countries with subdivisions matching the provided name, or the result of applying ‘result_method` to the array of `Country` objects.
79 80 81 82 83 84 |
# File 'lib/countries/country/class_methods.rb', line 79 def collect_likely_countries_by_subdivision_name(subdivision_str, result_method = :itself) return nil unless method_defined? result_method all.select { |country| country.subdivision_for_string?(subdivision_str) } .map { |country| country.send(result_method) } end |
#new(country_data) ⇒ Object
20 21 22 |
# File 'lib/countries/country/class_methods.rb', line 20 def new(country_data) super if country_data.is_a?(Hash) || codes.include?(country_data.to_s.upcase) end |
#pluck(*attributes) ⇒ Object
42 43 44 |
# File 'lib/countries/country/class_methods.rb', line 42 def pluck(*attributes) all.map { |country| country.data.fetch_values(*attributes.map(&:to_s)) } end |
#translations(locale = 'en') ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/countries/country/class_methods.rb', line 50 def translations(locale = 'en') locale = locale.downcase.freeze file_path = ISO3166::Data.datafile_path(%W[locales #{locale}.json]) translations = JSON.parse(File.read(file_path)) custom_countries = {} (ISO3166::Data.codes - ISO3166::Data.loaded_codes).each do |code| country = ISO3166::Country[code] translation = country.translations[locale] || country.iso_short_name custom_countries[code] = translation end translations.merge(custom_countries) end |