Sha256: 4d6057419296357ce2ee86e9d62c4444b03c784b51b6a2deddbb9f0216cf8720

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

require "namor/version"

module Namor
  def self.extract(name, args = {})
    return [] if name.nil?

    suppression_list = args[:suppress] || []
    suppression_re = suppression_list.join('|')

    detitled_name = name.upcase.gsub(/\b(#{suppression_re})\b/i, '').gsub(/\b(MD|JR|SR|I+|IV)\b/i, '').gsub(/\([^\(]*\)/, '').gsub(/[_.'-]/, '').gsub(/,\s*$/, '').gsub(/ +/, ' ').strip

    if detitled_name =~ /,/
      # "last, first[ middle]"
      lastname, firstname = detitled_name.split(/\s*,\s*/)
      lastname.gsub!(/ /, '')
      middlename = nil
      if firstname && firstname =~ / /
        pieces = firstname.split(/ +/)
        firstname = pieces.shift
        middlename = pieces.join if pieces.any?
      end
    else
      # "first [middle ]last"
      pieces = detitled_name.split(' ')
      firstname = pieces.shift
      middlename = nil
      if pieces.count > 1 && pieces.first.length == 1
        # assume this is a middle initial
        middlename = pieces.shift
      end

      lastname = pieces.join
    end

    firstname = nil if firstname.empty?
    middlename = nil if middlename && middlename.empty?
    lastname = nil if lastname.empty?

    fm = [firstname, middlename].compact.join(' ')
    fullname = [lastname, fm].compact.join(',')

    [firstname, middlename, lastname, fullname]
  end

  def self.extract_with_cluster(name, args = {})
    ary = extract(name, args)
    return [] if ary.empty?
    ary << ary.last.gsub(/\W/, '_')
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
namor-0.0.1 lib/namor.rb