class Redwood::Person
Attributes
email[RW]
name[RW]
Public Class Methods
from_address(s)
click to toggle source
# File lib/sup/person.rb, line 100 def from_address s return nil if s.nil? ## try and parse an email address and name name, email = case s when /(.+?) ((\S+?)@\S+) \3/ ## ok, this first match cause is insane, but bear with me. email ## addresses are stored in the to/from/etc fields of the index in a ## weird format: "name address first-part-of-address", i.e. spaces ## separating those three bits, and no <>'s. this is the output of ## #indexable_content. here, we reverse-engineer that format to extract ## a valid address. ## ## we store things this way to allow searches on a to/from/etc field to ## match any of those parts. a more robust solution would be to store a ## separate, non-indexed field with the proper headers. but this way we ## save precious bits, and it's backwards-compatible with older indexes. [$1, $2] when /["'](.*?)["'] <(.*?)>/, /([^,]+) <(.*?)>/ a, b = $1, $2 [a.gsub('\"', '"'), b] when /<((\S+?)@\S+?)>/ [$2, $1] when /((\S+?)@\S+)/ [$2, $1] else [nil, s] end from_name_and_email name, email end
from_address_list(ss)
click to toggle source
# File lib/sup/person.rb, line 132 def from_address_list ss return [] if ss.nil? ss.dup.split_on_commas.map { |s| self.from_address s } end
from_name_and_email(name, email)
click to toggle source
return “canonical” person using contact manager or create one if not found or contact manager not available
# File lib/sup/person.rb, line 96 def from_name_and_email name, email ContactManager.instantiated? && ContactManager.person_for(email) || Person.new(name, email) end
full_address(name, email)
click to toggle source
# File lib/sup/person.rb, line 82 def full_address name, email if name && email if name =~ /[",@]/ "#{name.inspect} <#{email}>" # escape quotes else "#{name} <#{email}>" end else email end end
new(name, email)
click to toggle source
# File lib/sup/person.rb, line 6 def initialize name, email raise ArgumentError, "email can't be nil" unless email email.fix_encoding! @name = if name name.fix_encoding! name = name.strip.gsub(/\s+/, " ") name =~ /^(['"]\s*)(.*?)(\s*["'])$/ ? $2 : name name.gsub('\\\\', '\\') end @email = email.strip.gsub(/\s+/, " ") end
Public Instance Methods
eql?(o;)
click to toggle source
# File lib/sup/person.rb, line 71 def eql? o; email.eql? o.email end
full_address()
click to toggle source
# File lib/sup/person.rb, line 51 def full_address Person.full_address @name, @email end
hash()
click to toggle source
# File lib/sup/person.rb, line 72 def hash; email.hash end
indexable_content()
click to toggle source
see comments in self.from_address
# File lib/sup/person.rb, line 76 def indexable_content [name, email, email.split(/@/).first].join(" ") end
longname()
click to toggle source
# File lib/sup/person.rb, line 47 def longname to_s end
mediumname()
click to toggle source
# File lib/sup/person.rb, line 45 def mediumname; @name || @email; end
shortname()
click to toggle source
def == o; o && o.email == email; end alias :eql? :==
# File lib/sup/person.rb, line 32 def shortname case @name when /\S+, (\S+)/ $1 when /(\S+) \S+/ $1 when nil @email else @name end end
sort_by_me()
click to toggle source
when sorting addresses, sort by this
# File lib/sup/person.rb, line 56 def sort_by_me case @name when /^(\S+), \S+/ $1 when /^\S+ \S+ (\S+)/ $1 when /^\S+ (\S+)/ $1 when nil @email else @name end.downcase end
to_s()
click to toggle source
# File lib/sup/person.rb, line 21 def to_s if @name "#@name <#@email>" else @email end end