lib/sup/account.rb in sup-0.3 vs lib/sup/account.rb in sup-0.4

- old
+ new

@@ -1,12 +1,14 @@ module Redwood class Account < Person attr_accessor :sendmail, :signature - def initialize email, h - super h[:name], email, 0, true + def initialize h + raise ArgumentError, "no name for account" unless h[:name] + raise ArgumentError, "no name for email" unless h[:name] + super h[:name], h[:email], 0, true @sendmail = h[:sendmail] @signature = h[:signature] end end @@ -16,14 +18,15 @@ attr_accessor :default_account def initialize accounts @email_map = {} @accounts = {} + @regexen = {} @default_account = nil add_account accounts[:default], true - accounts.each { |k, v| add_account v unless k == :default } + accounts.each { |k, v| add_account v, false unless k == :default } self.class.i_am_the_instance self end def user_accounts; @accounts.keys; end @@ -36,26 +39,36 @@ unless default [:name, :sendmail, :signature].each { |k| hash[k] ||= @default_account.send(k) } end hash[:alternates] ||= [] - main_email = hash[:email] + a = Account.new hash + PersonManager.register a + @accounts[a] = true + + if default + raise ArgumentError, "multiple default accounts" if @default_account + @default_account = a + end + ([hash[:email]] + hash[:alternates]).each do |email| next if @email_map.member? email - a = Account.new main_email, hash - PersonManager.register a - @accounts[a] = true @email_map[email] = a end - if default - raise ArgumentError, "multiple default accounts" if @default_account - @default_account = @email_map[main_email] - end + hash[:regexen].each do |re| + @regexen[Regexp.new(re)] = a + end if hash[:regexen] end def is_account? p; is_account_email? p.email end - def account_for email; @email_map[email] end def is_account_email? email; !account_for(email).nil? end + def account_for email + if(a = @email_map[email]) + a + else + @regexen.argfind { |re, a| re =~ email && a } + end + end end end