Class: ISO3166::Country

Inherits:
Object
  • Object
show all
Extended by:
ConversionMethods, CountryClassMethods, CountryFinderMethods
Includes:
CountrySubdivisionMethods, Emoji, TimezoneExtensions
Defined in:
lib/countries/country.rb,
lib/countries/mongoid.rb

Overview

:reek:TooManyMethods

Direct Known Subclasses

Country

Constant Summary

Constants included from CountryFinderMethods

ISO3166::CountryFinderMethods::FIND_BY_REGEX, ISO3166::CountryFinderMethods::SEARCH_TERM_FILTER_REGEX

Constants included from Emoji

Emoji::CODE_POINTS

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CountryClassMethods

all, all_names_with_codes, all_translated, codes, collect_countries_with, collect_likely_countries_by_subdivision_name, new, pluck, translations

Methods included from ConversionMethods

from_alpha2_to_alpha3, from_alpha3_to_alpha2

Methods included from CountryFinderMethods

find_all_by, method_missing, respond_to_missing?, search

Methods included from TimezoneExtensions

#timezones

Methods included from CountrySubdivisionMethods

#find_subdivision_by_name, #humanized_subdivision_types, #subdivision_for_string?, #subdivision_names, #subdivision_names_with_codes, #subdivision_types, #subdivisions, #subdivisions?, #subdivisions_of_types

Methods included from Emoji

#emoji_flag

Constructor Details

#initialize(country_data) ⇒ Country

Returns a new instance of Country.



25
26
27
28
# File 'lib/countries/country.rb', line 25

def initialize(country_data)
  @country_data_or_code = country_data
  reload
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



11
12
13
# File 'lib/countries/country.rb', line 11

def data
  @data
end

Class Method Details

.demongoize(alpha2) ⇒ Object

Get the object as it was stored with Mongoid, and instantiate an ISO3166::Country.



21
22
23
# File 'lib/countries/mongoid.rb', line 21

def demongoize(alpha2)
  new(alpha2)
end

.evolve(country) ⇒ Object

Convert an ISO3166::Country to the data that is stored by Mongoid.



26
27
28
# File 'lib/countries/mongoid.rb', line 26

def evolve(country)
  mongoize(country)
end

.mongoize(country) ⇒ Object

Convert an ISO3166::Country to the data that is stored by Mongoid. :reek:NilCheck



12
13
14
15
16
17
18
# File 'lib/countries/mongoid.rb', line 12

def mongoize(country)
  if country.is_a?(self) && !country.data.nil?
    country.alpha2
  elsif send(:valid_alpha2?, country)
    new(country).alpha2
  end
end

Instance Method Details

#<=>(other) ⇒ Object



55
56
57
# File 'lib/countries/country.rb', line 55

def <=>(other)
  to_s <=> other.to_s
end

#==(other) ⇒ Object

:reek:FeatureEnvy :reek:ManualDispatch



43
44
45
# File 'lib/countries/country.rb', line 43

def ==(other)
  other.respond_to?(:alpha2) && other.alpha2 == alpha2
end

#[](key) ⇒ Object

Access country data by key, symbol or string. :reek:ManualDispatch



61
62
63
64
# File 'lib/countries/country.rb', line 61

def [](key)
  key = key.to_s if key.is_a?(Symbol)
  data[key] || send(key)
end

#common_nameString

Returns the “common name” of this Country in English.

Returns:

  • (String)

    the “common name” of this Country in English.



143
144
145
146
# File 'lib/countries/country.rb', line 143

def common_name
  ISO3166.configuration.locales = ISO3166.configuration.locales.append(:en).uniq
  translation('en')
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/countries/country.rb', line 47

def eql?(other)
  self == other
end

#gdpr_compliant?Boolean

true if this country is a member of the European Economic Area or it is UK

Returns:

  • (Boolean)


85
86
87
# File 'lib/countries/country.rb', line 85

def gdpr_compliant?
  data['eea_member'] || alpha2 == 'GB'
end

#hashObject



51
52
53
# File 'lib/countries/country.rb', line 51

def hash
  [alpha2, alpha3].hash
end

#in_eea?Boolean

true if this country is a member of the European Economic Area. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


91
92
93
# File 'lib/countries/country.rb', line 91

def in_eea?
  data['eea_member'].nil? ? false : data['eea_member']
end

#in_esm?Boolean

true if this country is a member of the European Single Market. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


97
98
99
# File 'lib/countries/country.rb', line 97

def in_esm?
  data['esm_member'].nil? ? in_eea? : data['esm_member']
end

#in_eu?Boolean

true if this country is a member of the European Union. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


68
69
70
# File 'lib/countries/country.rb', line 68

def in_eu?
  data['eu_member'].nil? ? false : data['eu_member']
end

#in_eu_vat?Boolean

true if this country is a member of the EU VAT Area. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


103
104
105
# File 'lib/countries/country.rb', line 103

def in_eu_vat?
  data['euvat_member'].nil? ? in_eu? : data['euvat_member']
end

#in_g20?Boolean

true if this country is a member of the G20. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


80
81
82
# File 'lib/countries/country.rb', line 80

def in_g20?
  data['g20_member'].nil? ? false : data['g20_member']
end

#in_g7?Boolean

true if this country is a member of the G7. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


74
75
76
# File 'lib/countries/country.rb', line 74

def in_g7?
  data['g7_member'].nil? ? false : data['g7_member']
end

#in_un?Boolean

true if this country is a member of the United Nations. :reek:NilCheck :reek:DuplicateMethodCall

Returns:

  • (Boolean)


109
110
111
# File 'lib/countries/country.rb', line 109

def in_un?
  data['un_member'].nil? ? false : data['un_member']
end

#iso_short_name_lower_caseString

Returns The ISO 3166-1 “Short name lower case” value for this Country.

Returns:

  • (String)

    The ISO 3166-1 “Short name lower case” value for this Country.



114
115
116
# File 'lib/countries/country.rb', line 114

def iso_short_name_lower_case
  data['iso_short_name_lower_case'].nil? ? data['iso_short_name'] : data['iso_short_name_lower_case']
end

#local_nameString

Returns The name for this Country, in this Country’s locale.

Returns:

  • (String)

    The name for this Country, in this Country’s locale.



157
158
159
# File 'lib/countries/country.rb', line 157

def local_name
  @local_name ||= local_names.first
end

#local_namesArray<String>

Returns The list of names for this Country, in this Country’s locales.

Returns:

  • (Array<String>)

    The list of names for this Country, in this Country’s locales.



149
150
151
152
153
154
# File 'lib/countries/country.rb', line 149

def local_names
  ISO3166.configuration.locales = (ISO3166.configuration.locales + languages.map(&:to_sym)).uniq
  reload

  @local_names ||= languages.map { |language| translations[language] }
end

#mongoizeObject



5
6
7
# File 'lib/countries/mongoid.rb', line 5

def mongoize
  ISO3166::Country.mongoize(self)
end

#postal_code_formatString

Returns The regex for valid postal codes in this Country.

Returns:

  • (String)

    The regex for valid postal codes in this Country



119
120
121
# File 'lib/countries/country.rb', line 119

def postal_code_format
  "\\A#{data['postal_code_format']}\\Z" if postal_code
end

#to_sObject



123
124
125
# File 'lib/countries/country.rb', line 123

def to_s
  data['iso_short_name']
end

#translated_namesArray<String>

Returns the list of names for this Country in all loaded locales.

Returns:

  • (Array<String>)

    the list of names for this Country in all loaded locales.



128
129
130
# File 'lib/countries/country.rb', line 128

def translated_names
  data['translations'].values.compact
end

#translation(locale = :en) ⇒ String

:reek:FeatureEnvy

Parameters:

  • locale (String) (defaults to: :en)

    The locale to use for translations.

Returns:

  • (String)

    the name of this Country in the selected locale.



135
136
137
138
139
140
# File 'lib/countries/country.rb', line 135

def translation(locale = :en)
  locale = locale.to_sym if locale.is_a?(String)
  locale = locale.downcase if locale.match?(/[A-Z]/)

  data['translations'][locale]
end

#valid?Boolean

:reek:NilCheck

Returns:

  • (Boolean)


31
32
33
# File 'lib/countries/country.rb', line 31

def valid?
  !(data.nil? || data.empty?)
end

#zip_formatObject



38
# File 'lib/countries/country.rb', line 38

alias zip_format postal_code_format