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