lib/sup/contact.rb in sup-0.0.6 vs lib/sup/contact.rb in sup-0.0.7

- old
+ new

@@ -3,36 +3,46 @@ class ContactManager include Singleton def initialize fn @fn = fn - @people = {} + @p2a = {} # person to alias map + @a2p = {} # alias to person map if File.exists? fn IO.foreach(fn) do |l| l =~ /^(\S+): (.*)$/ or raise "can't parse #{fn} line #{l.inspect}" aalias, addr = $1, $2 - @people[aalias] = Person.for addr + p = Person.for addr + @p2a[p] = aalias + @a2p[aalias] = p end end self.class.i_am_the_instance self end - def contacts; @people; end + def contacts; @p2a.keys; end def set_contact person, aalias - oldentry = @people.find { |a, p| p == person } - @people.delete oldentry.first if oldentry - @people[aalias] = person + if(pold = @a2p[aalias]) && (pold != person) + drop_contact pold + end + @p2a[person] = aalias + @a2p[aalias] = person end - def drop_contact person; @people.delete person; end - def delete t; @people.delete t; end - def resolve aalias; @people[aalias]; end - + def drop_contact person + if(aalias = @p2a[person]) + @p2a.delete person + @a2p.delete aalias + end + end + def person_with aalias; @a2p[aalias]; end + def alias_for person; @p2a[person]; end + def is_contact? person; @p2a.member? person; end def save File.open(@fn, "w") do |f| - @people.keys.sort.each do |aalias| - f.puts "#{aalias}: #{@people[aalias].full_address}" + @p2a.each do |p, a| + f.puts "#{a}: #{p.full_address}" end end end end