<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -11,12 +11,15 @@ module Animoto
     
     module ClassMethods
       def with_settings(name, options={}, &amp;block)
+        options[:retry] ||= :default
+      
         self.class_inheritable_accessor :smtp_settings
         self.smtp_settings = mail_servers[name]
-        rescue_servers = [options[:retry]].flatten.compact
+
+        rescue_servers = Array(options[:retry])
         begin
           yield self
-        rescue =&gt; e
+        rescue Exception =&gt; e
           raise e if rescue_servers.empty?
           retry_server = rescue_servers.shift
           with_settings(retry_server, :retry =&gt; rescue_servers, &amp;block)          
@@ -29,11 +32,11 @@ module Animoto
           mail_servers[key.to_sym] = value.to_options!
           self.smtp_settings = mail_servers[:default]
         end
-        rescue
-          puts &quot;=&gt; \&quot;#{file_path}\&quot; not found! Using default SMTP settings (if any).&quot;
+      rescue
+        puts &quot;=&gt; \&quot;#{file_path}\&quot; not found! Using default SMTP settings (if any).&quot;
       end
     end
   end
 end
 
-ActionMailer::Base.send :include, Animoto::ManyMailers
\ No newline at end of file
+ActionMailer::Base.send :include, Animoto::ManyMailers</diff>
      <filename>lib/many_mailers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,6 @@ rescue LoadError
   require 'action_mailer'
   require File.dirname(__FILE__) + '/../lib/many_mailers.rb'
 end
-require 'fixtures/user_mailer'
-require 'fixtures/party_mailer'
-require 'test/unit'
-require 'mocha'
\ No newline at end of file
+require File.join(File.dirname(__FILE__), 'fixtures/user_mailer')
+require File.join(File.dirname(__FILE__), 'fixtures/party_mailer')
+require 'test/unit'
\ No newline at end of file</diff>
      <filename>test/abstract_unit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,4 @@
 class UserMailer &lt; ActionMailer::Base
-  self.template_root = &quot;#{RAILS_ROOT}/views&quot;
-
   def feedback(message)
     from       'Service &lt;service@example.com&gt;'
     recipients 'Feedback &lt;feedback@example.com&gt;'</diff>
      <filename>test/fixtures/user_mailer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,16 @@
-require 'abstract_unit'
+require File.join(File.dirname(__FILE__), 'abstract_unit')
+require 'mocha'
 
 class ManyMailersTest &lt; Test::Unit::TestCase
+
+  def setup
+    # need to override a possible /config/mail_servers.yml with the test settings
+    ActionMailer::Base.load_settings!(File.join(File.dirname(__FILE__), 'fixtures/config/mail_servers.yml'))
+    ActionMailer::Base.delivery_method = :test
+    ActionMailer::Base.perform_deliveries = true
+    ActionMailer::Base.raise_delivery_errors = true
+    ActionMailer::Base.deliveries = []
+  end
   
   def test_should_load_settings_properly
     settings = ActionMailer::Base.mail_servers[:default]
@@ -33,12 +43,26 @@ class ManyMailersTest &lt; Test::Unit::TestCase
       assert_equal ActionMailer::Base.mail_servers[:default], PartyMailer.smtp_settings, &quot;Changed settings globally!&quot;
     end
   end
-  
+
   def test_should_retry_with_failovers
     UserMailer.with_settings(:internal, :retry =&gt; :default) do |mailer|
       begin; mailer.deliver_feedback('Oh, thanks.')
       rescue; assert_equal ActionMailer::Base.mail_servers[:default], UserMailer.smtp_settings end
     end
   end
-
-end
\ No newline at end of file
+    
+  def test_should_retry_with_default_failovers
+    UserMailer.with_settings(:internal) do |mailer|
+      begin; mailer.deliver_feedback('Oh, thanks.')
+      rescue; assert_equal ActionMailer::Base.mail_servers[:default], UserMailer.smtp_settings end
+    end
+  end
+    
+  def test_should_handle_server_timeout
+    UserMailer.expects(:deliver_feedback).times(2).raises(Timeout::Error, 'mail server timed out').then.returns(nil)
+    UserMailer.with_settings(:default, :retry =&gt; :internal) do |mailer|
+      mailer.deliver_feedback('test message')
+      assert_equal ActionMailer::Base.mail_servers[:internal], UserMailer.smtp_settings
+    end
+  end
+end</diff>
      <filename>test/many_mailers_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4f55700869ae739348ec1424222667d5098766c9</id>
    </parent>
  </parents>
  <author>
    <name>Jeff Jolma</name>
    <email>jeff@animoto.com</email>
  </author>
  <url>http://github.com/nakajima/many-mailers/commit/cb665922742d33b2a593a52a4da2f3aac060c9db</url>
  <id>cb665922742d33b2a593a52a4da2f3aac060c9db</id>
  <committed-date>2008-11-26T11:54:09-08:00</committed-date>
  <authored-date>2008-11-26T11:54:09-08:00</authored-date>
  <message>a few fixes:
1. rescue any Exception (e.g. TimeoutException) when trying the
   primary mailer
2. if no :retry is passed in to with_settings then use :default.  This
   requires less typing for an app with many call sites
3. fix tests

Note: tests require mocha</message>
  <tree>d411ca3df954cfd4db5887738d9feefce6fb9318</tree>
  <committer>
    <name>Jeff Jolma</name>
    <email>jeff@animoto.com</email>
  </committer>
</commit>
