class Fias::Config

Attributes

aliases[R]
exceptions[R]
index[R]
longs[R]
proper_names[R]
replacements[R]
shorts[R]
synonyms[R]
synonyms_index[R]

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/fias/config.rb, line 3
def initialize
  @index = {}
  @longs = {}
  @shorts = {}
  @aliases = {}
  @exceptions = {}
  @proper_names = []
  @replacements = {}
  @synonyms = []
  @synonyms_index = {}

  yield(self)

  finalize_index
end

Public Instance Methods

add_exception(long, short) click to toggle source
# File lib/fias/config.rb, line 34
def add_exception(long, short)
  @exceptions[Unicode.downcase(short)] = [long, short]
  @exceptions[Unicode.downcase(long)] = [long, short]
end
add_name(long, short, aliases = []) click to toggle source
# File lib/fias/config.rb, line 22
def add_name(long, short, aliases = [])
  @longs[Unicode.downcase(short)] = long
  @shorts[Unicode.downcase(long)] = short
  @aliases[Unicode.downcase(long)] = aliases

  populate_index(long, short, aliases)
end
add_proper_name(name) click to toggle source
# File lib/fias/config.rb, line 39
def add_proper_name(name)
  @proper_names << name
end
add_replacement(target, value) click to toggle source
# File lib/fias/config.rb, line 30
def add_replacement(target, value)
  @replacements[Unicode.downcase(target)] = value
end
add_synonym(*names) click to toggle source
# File lib/fias/config.rb, line 43
def add_synonym(*names)
  @synonyms << names
  populate_synonyms_index(names)
end

Private Instance Methods

finalize_index() click to toggle source
# File lib/fias/config.rb, line 70
def finalize_index
  @index = @index.sort_by { |key, _| key.size }.reverse
  @index = Hash[*@index.flatten]
end
populate_index(long, short, aliases) click to toggle source
# File lib/fias/config.rb, line 50
def populate_index(long, short, aliases)
  long_downcase = Unicode.downcase(long)
  short_downcase = Unicode.downcase(short)

  populate_long_permutations(long)

  if long_downcase != short_downcase
    @index[short_downcase] = long
    @index[short_downcase[0..-2]] = long if short_downcase[-1] == '.'
  end

  aliases.each { |al| @index[Unicode.downcase(al)] = long }
end
populate_long_permutations(long) click to toggle source
# File lib/fias/config.rb, line 64
def populate_long_permutations(long)
  Unicode.downcase(long).split(' ').permutation.each do |variant|
    @index[variant.join(' ')] = long
  end
end
populate_synonyms_index(names) click to toggle source
# File lib/fias/config.rb, line 75
def populate_synonyms_index(names)
  names.each { |name| @synonyms_index[name] = names }
end