diff options
Diffstat (limited to 'fake-service/lib/pixelated_service/contacts.rb')
-rw-r--r-- | fake-service/lib/pixelated_service/contacts.rb | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/fake-service/lib/pixelated_service/contacts.rb b/fake-service/lib/pixelated_service/contacts.rb deleted file mode 100644 index 2f57387d..00000000 --- a/fake-service/lib/pixelated_service/contacts.rb +++ /dev/null @@ -1,84 +0,0 @@ -require 'mail' -require 'set' - -module PixelatedService - class Contacts - include Enumerable - - def initialize(persona) - @persona = persona - @contacts = nil - @contacts_cache = {} - @contacts_lookup = {} - end - - def contact(ix) - @contacts_lookup[ix] - end - - def each - curr = @contacts - while curr - yield curr - curr = curr.next - end - end - - def normalize(addr) - addr.downcase - end - - def parse(a) - ::Mail::Address.new(a) - end - - def update c, addr - @contacts_cache[normalize(addr.address)] = c - c.name = addr.display_name if addr.display_name - (c.addresses ||= Set.new) << addr.address - end - - def create_new_contact(addr) - old_first = @contacts - c = Contact.new - c.ident = addr.hash.abs.to_s - c.next = old_first - @contacts_lookup[c.ident] = c - @contacts = c - update c, addr - c - end - - def find_or_create(addr) - parsed = parse(addr) - if cc = @contacts_cache[normalize(parsed.address)] - update cc, parsed - cc - else - create_new_contact(parsed) - end - end - - def latest(prev, n) - if prev && prev > n - prev - else - n - end - end - - def new_mail_from(a, t) - contact = find_or_create(a) - contact.last_received = latest(contact.last_received, t) - contact.mails_received ||= 0 - contact.mails_received += 1 - end - - def new_mail_to(a, t) - contact = find_or_create(a) - contact.last_sent = latest(contact.last_sent, t) - contact.mails_sent ||= 0 - contact.mails_sent += 1 - end - end -end |