class Petrovich::Name

Public Class Methods

new(opts) click to toggle source
# File lib/petrovich/name.rb, line 9
def initialize(opts)
  @rule_set = Petrovich.rule_set
  @gender = opts[:gender]
  @name = Petrovich.normalize_name(
    lastname: opts[:lastname],
    firstname: opts[:firstname],
    middlename: opts[:middlename]
  )
end

Public Instance Methods

androgynous?() click to toggle source
# File lib/petrovich/name.rb, line 39
def androgynous?
  Gender.detect(@name) == :androgynous
end
female?() click to toggle source
# File lib/petrovich/name.rb, line 35
def female?
  Gender.detect(@name) == :female
end
gender() click to toggle source
# File lib/petrovich/name.rb, line 19
def gender
  if known_gender?
    @gender.to_sym
  else
    Gender.detect(@name)
  end
end
known_gender?() click to toggle source
# File lib/petrovich/name.rb, line 27
def known_gender?
  !@gender.nil? && Petrovich::GENDERS.include?(@gender.to_sym)
end
male?() click to toggle source
# File lib/petrovich/name.rb, line 31
def male?
  Gender.detect(@name) == :male
end
to(name_case) click to toggle source
# File lib/petrovich/name.rb, line 43
def to(name_case)
  Petrovich.assert_case!(name_case)
  Inflected.new(inflect(@name.dup, gender, name_case))
end
to_s() click to toggle source
# File lib/petrovich/name.rb, line 48
def to_s
  [lastname, firstname, middlename].join(' ')
end

Private Instance Methods

inflect(name, gender, name_case) click to toggle source
# File lib/petrovich/name.rb, line 60
def inflect(name, gender, name_case)
  inflector = Inflector.new(name, gender, name_case)
  known_gender = known_gender?
  find = proc { |x| @rule_set.find_all_case_rules(name.send(x), gender, x, known_gender) }

  if !name.lastname.nil? && (rules = find.call(:lastname))
    name.lastname = inflector.inflect_lastname(rules)
  end

  if !name.firstname.nil? && (rules = find.call(:firstname))
    name.firstname = inflector.inflect_firstname(rules)
  end

  if !name.middlename.nil? && (rules = find.call(:middlename))
    name.middlename = inflector.inflect_middlename(rules)
  end

  name
end