Class: Iso3166::Coder
- Inherits:
-
Object
- Object
- Iso3166::Coder
- Defined in:
- lib/iso_3166.rb
Class Method Summary collapse
- .add_alias(code, name) ⇒ Object
-
.for_code(code) ⇒ Object
Return ISO3166 data for a country code which could be of type 2 or 3, respectfully, 2 or 3 characters long, any case.
-
.for_name(name) ⇒ OpenStruct
Return ISO3166 data for a given country name, which is case insensitive but should correspond to this standard’s names.
-
.import_aliases(aliases) ⇒ Object
Just like import, same data, create aliases if need for the same codes.
-
.import_iso3166(iso3166) ⇒ Object
Import country definitions file.
- .to_objc ⇒ Object
Class Method Details
.add_alias(code, name) ⇒ Object
99 100 101 102 103 104 105 |
# File 'lib/iso_3166.rb', line 99 def add_alias code, name if (data = for_code(code)) && data.name != name data.name_aliases ||= [] data.name_aliases << name @countries[UnicodeUtils.upcase name] = data end end |
.for_code(code) ⇒ Object
Return ISO3166 data for a country code which could be of type 2 or 3, respectfully, 2 or 3 characters long, any case. For data format see Iso3166.for_name
56 57 58 |
# File 'lib/iso_3166.rb', line 56 def for_code code code.length == 2 ? @codes2[code.upcase] : @codes3[code.upcase] end |
.for_name(name) ⇒ OpenStruct
Return ISO3166 data for a given country name, which is case insensitive but should correspond to this standard’s names. There is no support for aliases or translations yet.
An OpenStruct instance with preset fields: data.name, data.code2, data.code3 and data.number which corresponds to the respective standard’s values e.g. Country, A 2, A 3, Number.
You can add more fields to this object (as it is an OpenStruct), it will be shared between all calls of for_name and for_code, unless import_iso3166 will be called, what will effectively reset all data objects to default state.
nil if there is no such country
50 51 52 |
# File 'lib/iso_3166.rb', line 50 def for_name name @countries[UnicodeUtils.upcase name] end |
.import_aliases(aliases) ⇒ Object
Just like import, same data, create aliases if need for the same codes
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/iso_3166.rb', line 85 def import_aliases aliases aliases.each_line { |a| begin @@alias_rex ||= /(.*?)\s+([A-Z]{2})($|\s)/u name, code2 = a.match(@@alias_rex)[1..-1] name.strip! add_alias code2, name rescue puts "Can't process alias line: '#{a.chomp}'" raise end } end |
.import_iso3166(iso3166) ⇒ Object
Import country definitions file. The file format is as for Iso3166, see below. There is no need to call this method unless you want to override standard definitions in the file below.
Note that it will redefine all country data objects so all user-added fields would be lost.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/iso_3166.rb', line 66 def import_iso3166 iso3166 rex = /(.*?)\s+([A-Z]{2})\s+([A-Z]{3})\s+(\d+)/ @countries = { } @codes2 = { } @codes3 = { } @numbers = { } iso3166.each_line { |s| name, code2, code3, number = s.match(rex)[1..-1] name.strip! data = OpenStruct.new name: name, code2: code2, code3: code3, number: number.to_i @countries[UnicodeUtils.upcase name] = data @codes2[code2] = data @codes3[code3] = data @numbers[number] = data } end |
.to_objc ⇒ Object
107 108 109 110 111 112 113 114 |
# File 'lib/iso_3166.rb', line 107 def to_objc res = ["NSMutableDictionary* countries = @{"] @countries.values.each { |c| res << " @\"#{c.code2}\" : @{ @\"name\" : @\"#{c.name}\", @\"code2\" : @\"#{c.code2}\", @\"code3\" : @\"#{c.code3}\" }," } res << "};" res.join "\n" end |