lib/nameable.rb in nameable-0.1.2 vs lib/nameable.rb in nameable-0.2.0
- old
+ new
@@ -13,31 +13,31 @@
##
# Regex's to match the detritus that people add to their names
module Patterns
PREFIX = {
- "Mr." => /^\(*(mr\.*|mister)\)*$/i,
- "Mrs." => /^\(*(mrs\.*|misses)\)*$/i,
- "Ms." => /^\(*(ms\.*|miss)\)*$/i,
- "Dr." => /^\(*(dr\.*|doctor)\)*$/i,
- "Rev." => /^\(*(rev\.*|reverand)\)*$/i,
- "Fr." => /^\(*(fr\.*|friar)\)*$/i,
+ "Mr." => /^\(*(mr\.*|mister)\)*$/i,
+ "Mrs." => /^\(*(mrs\.*|misses)\)*$/i,
+ "Ms." => /^\(*(ms\.*|miss)\)*$/i,
+ "Dr." => /^\(*(dr\.*|doctor)\)*$/i,
+ "Rev." => /^\(*(rev\.*|reverand)\)*$/i,
+ "Fr." => /^\(*(fr\.*|friar)\)*$/i,
"Master" => /^\(*(master)\)*$/i,
- "Sir" => /^\(*(sir)\)*$/i
+ "Sir" => /^\(*(sir)\)*$/i
}
SUFFIX = {
- "Sr." => /^\(*(sr\.|senior)\)*$/i,
- "Jr." => /^\(*(jr\.|junior)\)*$/i,
- "Esq." => /^\(*(esq\.|esquire)\)*$/i,
- "PhD." => /^\(*(phd\.)\)*$/i
+ "Sr." => /^\(*(sr\.|senior)\)*$/i,
+ "Jr." => /^\(*(jr\.|junior)\)*$/i,
+ "Esq." => /^\(*(esq\.|esquire)\)*$/i,
+ "Ph.D." => /^\(*(phd\.?)\)*$/i
}
SUFFIX_GENERATIONAL_ROMAN = /^\(*[IVX\.]+\)*$/i
SUFFIX_ACADEMIC = /^(APR|RPh|MD|MA|DMD|DDS|PharmD|EngD|DPhil|JD|DD|DO|BA|BS|BSc|BE|BFA|MA|MS|MSc|MFA|MLA|MBA)$/i
SUFFIX_PROFESSIONAL = /^(PE|CSA|CPA|CPL|CME|CEng|OFM|CSV|Douchebag)$/i
- SUFFIX_ABBREVIATION = /^[A-Z\.]+$/
+ SUFFIX_ABBREVIATION = /^[A-Z\.]+[A-Z\.]+$/ # It should be at least 2 letters
LAST_NAME_PRE_DANGLERS = /^(vere|von|van|de|del|della|di|da|pietro|vanden|du|st|la|ter|ten)$/i
LAST_NAME_PRE_CONCATS = /^(o'|o`|mc)$/i
end
@@ -126,11 +126,11 @@
@last = "O'#{@last}"
elsif name[n] =~ /-+/ and n > 0 and name[n-1]
@last = "#{name[n-1]}-#{@last}"
name[n-1] = nil
else
- @middle = name[n]
+ @middle = @middle ? "#{name[n]} #{@middle}" : name[n]
end
name.delete_at(n)
end
@@ -138,11 +138,17 @@
@middle = "#{@middle}." if @middle and @middle.size == 1
end
def parse(name)
if name.class == String
- name = name.split(/\s+/)
+ if name.index(',')
+ name = "#{$2} #{$1}" if name =~ /^([a-z]+),(.*)/i
+
+ #name = "#{$2} #{$1}" if name =~ /^([a-z]+),(.*)/i
+ end
+
+ name = name.strip.split(/\s+/)
end
name = name.first.split(/[^[:alnum:]]+/) if name.size == 1 and name.first.split(/[^[:alnum:]]+/)
extract_prefix(name)
@@ -155,18 +161,18 @@
self
end
def to_s
- [@prefix, @first, @middle, @last, @suffix].compact.join(' ')
+ [@prefix, @first, @middle, @last].compact.join(' ') + (@suffix ? ", #{@suffix}" : "")
end
def to_name
to_nameable
end
def to_fullname
- [@prefix, @first, @middle, @last, @suffix].compact.join(' ')
+ to_s
end
def to_nameable
[@first, @last].compact.join(' ')
end