class Ladyboy::Parser

Attributes

first_name[R]
full_name[R]
gender[R]
sex[R]

Public Class Methods

new(full_name) click to toggle source
# File lib/ladyboy/parser.rb, line 6
def initialize(full_name)
  @full_name = full_name
  parse!
end

Private Instance Methods

major_name_and_sex_for_full_name(full_name) click to toggle source
# File lib/ladyboy/parser.rb, line 31
def major_name_and_sex_for_full_name(full_name)
  tokens = full_name.to_s.scan(/[[:word:]]+/)
  [2, 1].map do |size|
    tokens.each_cons(size).map.with_index do |slice, i|
      token = slice * " "
      name = normalize_name(token)
      if name
        sex = Ladyboy.sexes[name] || Ladyboy.sexes_es[name] || Ladyboy.sexes_es[token] || [nil, Float::INFINITY]
        [name, *sex, -size, i]
      end
    end
  end.flatten(1).compact.sort_by{ |n| [n[4], n[3]] }.first
end
normalize_name(name) click to toggle source
# File lib/ladyboy/parser.rb, line 13
def normalize_name(name)
  name = Unicode.downcase(name.to_s).gsub(/\d+/, '').tr(
    "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž",
    "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz"
  ) # .gsub("ё", "е")
  (Ladyboy.sexes[Ladyboy.names[name]] && Ladyboy.names[name]) or 
    (Ladyboy.sexes[name] && name) or 
    (Ladyboy.sexes_es[name] && name)
end
parse!() click to toggle source
# File lib/ladyboy/parser.rb, line 23
def parse!
  major = major_name_and_sex_for_full_name(@full_name)
  return unless major

  @first_name = major[0].split(" ").map{|m| Unicode.capitalize(m) } * " " if major[0]
  @gender = SEX[major[1]]
end