]> git.cworth.org Git - sup/blob - lib/sup/account.rb
moved evertying to devel
[sup] / lib / sup / account.rb
1 module Redwood
2
3 class Account < Person
4   attr_accessor :sendmail, :sig_file
5
6   def initialize h
7     super h[:name], h[:email]
8     @sendmail = h[:sendmail]
9     @sig_file = h[:signature]
10   end
11 end
12
13 class AccountManager
14   include Singleton
15
16   attr_accessor :default_account
17
18   def initialize accounts
19     @email_map = {}
20     @alternate_map = {}
21     @accounts = {}
22     @default_account = nil
23
24     accounts.each { |k, v| add_account v, k == :default }
25
26     self.class.i_am_the_instance self
27   end
28
29   def user_accounts; @accounts.keys; end
30   def user_emails; (@email_map.keys + @alternate_map.keys).uniq.select { |e| String === e }; end
31
32   def add_account hash, default=false
33     email = hash[:email]
34
35     next if @email_map.member? email
36     a = Account.new hash
37     @accounts[a] = true
38     @email_map[email] = a
39     hash[:alternates].each { |aa| @alternate_map[aa] = a }
40     if default
41       raise ArgumentError, "multiple default accounts" if @default_account
42       @default_account = a 
43     end
44   end
45
46   def is_account? p; @accounts.member? p; end
47   def account_for email
48     @email_map[email] || @alternate_map[email] || @alternate_map.argfind { |k, v| k === email && v }
49   end
50   def is_account_email? email; !account_for(email).nil?; end
51 end
52
53 end