module Redwood class ContactManager include Singleton def initialize fn @fn = fn @people = {} 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 end end self.class.i_am_the_instance self end def contacts; @people; end def set_contact person, aalias oldentry = @people.find { |a, p| p == person } @people.delete oldentry.first if oldentry @people[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 save File.open(@fn, "w") do |f| @people.keys.sort.each do |aalias| f.puts "#{aalias}: #{@people[aalias].full_address}" end end end end end