module Fias::Name::Split

Constants

BRACKETS
DOTWORD
QUOTAS

Public Class Methods

split(name) click to toggle source
# File lib/fias/name/split.rb, line 5
def split(name)
  words = sanitize(name).scan(Fias.word)
  words = cleanup_brackets(words)
  words = split_all_initials(words)
  words = split_all_dotwords(words)

  words
    .reject(&:blank?)
    .flatten
    .uniq
end

Private Class Methods

cleanup_brackets(words) click to toggle source
# File lib/fias/name/split.rb, line 23
def cleanup_brackets(words)
  words.map { |word, _| word.gsub(BRACKETS, '') }
end
sanitize(name) click to toggle source
# File lib/fias/name/split.rb, line 19
def sanitize(name)
  Unicode.downcase(name).gsub('ё', 'е').gsub(QUOTAS, '')
end
split_all_dotwords(words) click to toggle source
# File lib/fias/name/split.rb, line 42
def split_all_dotwords(words)
  words
    .map { |word, _| split_dotwords(word) || word }
    .compact
end
split_all_initials(words) click to toggle source
# File lib/fias/name/split.rb, line 27
def split_all_initials(words)
  words
    .map { |word, _| split_initials(word) || word }
    .compact
    .flatten
end
split_dotwords(word) click to toggle source
# File lib/fias/name/split.rb, line 48
def split_dotwords(word)
  return unless word =~ DOTWORD
  dotwords = word.gsub(DOTWORD, '\1 ')
  dotwords.split(' ').uniq.delete_if(&:blank?)
end
split_initials(word) click to toggle source
# File lib/fias/name/split.rb, line 34
def split_initials(word)
  m_matches = word.match(Fias::INITIALS)
  return m_matches.values_at(1, 3) if m_matches

  s_matches = word.match(Fias::SINGLE_INITIAL)
  return s_matches.values_at(2, 3) if s_matches
end