6 attr_accessor :name, :email
8 def initialize name, email
9 raise ArgumentError, "email can't be nil" unless email
12 name.gsub(/^\s+|\s+$/, "").gsub(/\s+/, " ")
16 @email = email.gsub(/^\s+|\s+$/, "").gsub(/\s+/, " ").downcase
17 @@email_map[@email] = self
20 def == o; o && o.email == email; end
59 "#{@name.inspect} <#@email>"
83 def self.for_several s
87 s.split_on_commas.map { |ss| self.for ss }
88 rescue StandardError => e
89 raise "#{e.message}: for #{s.inspect}"
97 when /["'](.*?)["'] <(.*?)>/, /([^,]+) <(.*?)>/
99 [a.gsub('\"', '"'), b]
100 when /<((\S+?)@\S+?)>/
108 if name && (p = @@email_map[email])
109 ## all else being equal, prefer longer names, unless the prior name
110 ## doesn't contain any capitalization
111 p.name = name if (p.name.nil? || p.name.length < name.length) unless
112 p.name =~ /[A-Z]/ || (AccountManager.instantiated? && AccountManager.is_account?(p))
115 Person.new name, email