class CzechName::NameFactory

Attributes

parsed[R]
raw[R]

Public Class Methods

new(name) click to toggle source
# File lib/czech_name/name_factory.rb, line 5
def initialize(name)
  @raw = name
  @parsed = @raw && @raw.split(' ')
end

Public Instance Methods

create() click to toggle source
# File lib/czech_name/name_factory.rb, line 10
def create
  return nil if raw.nil? || raw.empty?

  case
  when any_name_is_female_first? then create_female_name
  when all_names_are_female?     then create_female_name
  when all_names_are_male?       then create_male_name
  else nil
  end
end

Private Instance Methods

all_names_are_female?() click to toggle source
# File lib/czech_name/name_factory.rb, line 27
def all_names_are_female?
  parsed.all? { |name| female_first_name_database.include?(name) || female_last_name_database.include?(name) }
end
all_names_are_male?() click to toggle source
# File lib/czech_name/name_factory.rb, line 31
def all_names_are_male?
  parsed.all? { |name| male_first_name_database.include?(name) || male_last_name_database.include?(name) }
end
any_name_is_female_first?() click to toggle source
# File lib/czech_name/name_factory.rb, line 23
def any_name_is_female_first?
  parsed.any? { |name| female_first_name_database.include?(name) }
end
create_female_name() click to toggle source
# File lib/czech_name/name_factory.rb, line 35
def create_female_name
  first_names, names = parsed.partition { |fm| female_first_name_database.include?(fm) }
  first_names_in_vocative = first_names.map { |fm| female_first_name_database.vocative(fm) }

  last_names, names  = names.partition { |fm| female_last_name_database.include?(fm) }
  last_names_in_vocative = last_names.map { |fm| female_last_name_database.vocative(fm) }

  male_last_names, names  = names.partition { |fm| male_last_name_database.include?(fm) }

  return nil unless names.empty?

  vocative = [first_names_in_vocative, last_names_in_vocative, male_last_names].flatten.join(' ')

  FemaleName.new(@raw, vocative)
end
create_male_name() click to toggle source
# File lib/czech_name/name_factory.rb, line 51
def create_male_name
  first_names, names = parsed.partition { |fm| male_first_name_database.include?(fm) }
  first_names_in_vocative = first_names.map { |fm| male_first_name_database.vocative(fm) }

  last_names, names  = names.partition { |fm| male_last_name_database.include?(fm) }
  last_names_in_vocative = last_names.map { |fm| male_last_name_database.vocative(fm) }

  return nil unless names.empty?

  vocative = [first_names_in_vocative, last_names_in_vocative].flatten.join(' ')

  MaleName.new(@raw, vocative)
end
female_first_name_database() click to toggle source
# File lib/czech_name/name_factory.rb, line 73
def female_first_name_database
  Database.new(Configuration.female_first_name_database_file_path)
end
female_last_name_database() click to toggle source
# File lib/czech_name/name_factory.rb, line 77
def female_last_name_database
  Database.new(Configuration.female_last_name_database_file_path)
end
male_first_name_database() click to toggle source
# File lib/czech_name/name_factory.rb, line 65
def male_first_name_database
  Database.new(Configuration.male_first_name_database_file_path)
end
male_last_name_database() click to toggle source
# File lib/czech_name/name_factory.rb, line 69
def male_last_name_database
  Database.new(Configuration.male_last_name_database_file_path)
end