class Governator::NameParser

Parses a name into it's component parts

Example

name = "Firstname Two Middlenames 'Nick Name' Lastname, Suffix."
name_parser = NameParser.new(name)
parsed_name = name_parser.parse
parsed_name.first_name # => "Firstname"
parsed_name.middle_name # => "Two Middlenames"
parsed_name.nickname # => "Nick Name"
parsed_name.last_name # => "Lastname"
parsed_name.suffix # => "Suffix"

Attributes

first[R]
last[R]
middle[R]
nickname[R]
original[R]
suffix[R]

Public Class Methods

new(original) click to toggle source

Initialize a new NameParser object

@param original [String] the original name to parse

# File lib/governator/name_parser.rb, line 19
def initialize(original)
  @original = original
end

Public Instance Methods

parse() click to toggle source

Parse the name into its component parts

@api public

@return [Governator::Name]

# File lib/governator/name_parser.rb, line 28
def parse
  split_name
  Governator::Name.new(original, first, middle, nickname, last, suffix)
end

Private Instance Methods

detect_nickname() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 91
def detect_nickname
  match_data = parsing_copy.match(/\s["'][\w\s]+["']/)
  return unless match_data
  @nickname = match_data.to_s if match_data
  parsing_copy.sub!(nickname, '')
  nickname.sub!(' ', '')
end
detect_suffix() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 100
def detect_suffix
  match_data = parsing_copy.match(/,\s\w+\.?/)
  return unless match_data
  @suffix = match_data.to_s if match_data
  parsing_copy.sub!(suffix, '')
  suffix.delete!(', ')
end
first_middle_last() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 38
def first_middle_last
  @_first_middle_last ||= parsing_copy.split(' ')
end
initialed_first_name?() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 61
def initialed_first_name?
  first_middle_last[0].include?('.') && first_middle_last[1].include?('.')
end
parsing_copy() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 109
def parsing_copy
  @_parsing_copy ||= original.dup
end
set_first_and_last() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 71
def set_first_and_last
  @first = first_middle_last.first
  @last  = first_middle_last.last
end
set_first_last_and_middle() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 84
def set_first_last_and_middle
  @first  = first_middle_last.first
  @last   = first_middle_last.last
  @middle = first_middle_last[1..-2].join(' ')
end
set_name_with_initialed_first() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 77
def set_name_with_initialed_first
  @first  = "#{first_middle_last.first} #{first_middle_last[1]}"
  @last   = first_middle_last.last
  @middle = first_middle_last[2..-2].join(' ')
end
split_name() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 43
def split_name
  detect_nickname
  detect_suffix
  if two_part_name?
    set_first_and_last
  elsif initialed_first_name?
    set_name_with_initialed_first
  elsif three_or_more_part_name?
    set_first_last_and_middle
  end
end
three_or_more_part_name?() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 56
def three_or_more_part_name?
  first_middle_last.length >= 3
end
two_part_name?() click to toggle source

@api private

# File lib/governator/name_parser.rb, line 66
def two_part_name?
  first_middle_last.length == 2
end