lib/sup/account.rb in sup-0.15.2 vs lib/sup/account.rb in sup-0.15.3

- old
+ new

@@ -29,34 +29,30 @@ attr_accessor :default_account def initialize accounts @email_map = {} - @hidden_email_map = {} - @email_map_dirty = false @accounts = {} @regexen = {} @default_account = nil add_account accounts[:default], true accounts.each { |k, v| add_account v, false unless k == :default } end def user_accounts; @accounts.keys; end - def user_emails(type = :all); email_map(type).keys.select { |e| String === e }; end + def user_emails; @email_map.keys.select { |e| String === e }; end ## must be called first with the default account. fills in missing ## values from the default account. def add_account hash, default=false raise ArgumentError, "no email specified for account" unless hash[:email] unless default [:name, :sendmail, :signature, :gpgkey].each { |k| hash[k] ||= @default_account.send(k) } end hash[:alternates] ||= [] - hash[:hidden_alternates] ||= [] fail "alternative emails are not an array: #{hash[:alternates]}" unless hash[:alternates].kind_of? Array - fail "hidden alternative emails are not an array: #{hash[:hidden_alternates]}" unless hash[:hidden_alternates].kind_of? Array [:name, :signature].each { |x| hash[x] ? hash[x].fix_encoding! : nil } a = Account.new hash @accounts[a] = true @@ -65,58 +61,30 @@ raise ArgumentError, "multiple default accounts" if @default_account @default_account = a end ([hash[:email]] + hash[:alternates]).each do |email| - add_email_to_map(:shown, email, a) + next if @email_map.member? email + @email_map[email] = a end - hash[:hidden_alternates].each do |email| - add_email_to_map(:hidden, email, a) - 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 is_account? p; is_account_email? p.email end def is_account_email? email; !account_for(email).nil? end - def account_for email - a = email_map[email] - a.nil? ? @regexen.argfind { |re, a| re =~ email && a } : a + if(a = @email_map[email]) + a + else + @regexen.argfind { |re, a| re =~ email && a } + end end - def full_address_for email a = account_for email Person.full_address a.name, email end - - private - - def add_email_to_map(type, email, acc) - type = :shown if type != :hidden - m = email_map(type) - unless m.member? email - m[email] = acc - @email_map_dirty = true - end - end - - def email_map(type = nil) - case type - when :shown, :public then @email_map - when :hidden then @hidden_email_map - else - if @email_map_dirty - @email_map_all = @hidden_email_map.merge(@email_map) - if @email_map_all.count != @email_map.count + @hidden_email_map.count - @hidden_email_map.reject! { |m| @email_map.member? m } - end - end - @email_map_all ||= {} - end - end -end # class AccountManager +end end