<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -18,6 +18,14 @@ module ActiveResource
     end
   end
 
+  # Raised when a Timeout::Error occurs.
+  class TimeoutError &lt; ConnectionError
+    def initialize(message)
+      @message = message
+    end
+    def to_s; @message ;end
+  end
+
   # 3xx Redirection
   class Redirection &lt; ConnectionError # :nodoc:
     def to_s; response['Location'] ? &quot;#{super} =&gt; #{response['Location']}&quot; : super; end    
@@ -134,6 +142,8 @@ module ActiveResource
         time = Benchmark.realtime { result = http.send(method, path, *arguments) }
         logger.info &quot;--&gt; #{result.code} #{result.message} (#{result.body ? result.body : 0}b %.2fs)&quot; % time if logger
         handle_response(result)
+      rescue Timeout::Error =&gt; e
+        raise TimeoutError.new(e.message)
       end
 
       # Handles response and error codes from remote service.</diff>
      <filename>activeresource/lib/active_resource/connection.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,4 +7,16 @@ require 'active_resource/http_mock'
 $:.unshift &quot;#{File.dirname(__FILE__)}/../test&quot;
 require 'setter_trap'
 
-ActiveResource::Base.logger = Logger.new(&quot;#{File.dirname(__FILE__)}/debug.log&quot;)
\ No newline at end of file
+ActiveResource::Base.logger = Logger.new(&quot;#{File.dirname(__FILE__)}/debug.log&quot;)
+
+# Wrap tests that use Mocha and skip if unavailable.
+def uses_mocha(test_name)
+  unless Object.const_defined?(:Mocha)
+    require 'mocha'
+    require 'stubba'
+  end
+  yield
+rescue LoadError =&gt; load_error
+  raise unless load_error.message =~ /mocha/i
+  $stderr.puts &quot;Skipping #{test_name} tests. `gem install mocha` and try again.&quot;
+end
\ No newline at end of file</diff>
      <filename>activeresource/test/abstract_unit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -168,6 +168,15 @@ class ConnectionTest &lt; Test::Unit::TestCase
     assert_equal 200, response.code
   end
 
+  uses_mocha('test_timeout') do
+    def test_timeout
+      @http = mock('new Net::HTTP')
+      @conn.expects(:http).returns(@http)
+      @http.expects(:get).raises(Timeout::Error, 'execution expired')
+      assert_raises(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
+    end
+  end
+
   protected
     def assert_response_raises(klass, code)
       assert_raise(klass, &quot;Expected response code #{code} to raise #{klass}&quot;) do</diff>
      <filename>activeresource/test/connection_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>105910429d5873dce677ef32eef5f705e0625d86</id>
    </parent>
  </parents>
  <author>
    <name>Cheah Chu Yeow</name>
    <login>chuyeow</login>
    <email>chuyeow@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/cf32baf915442ffe153ec0e4d8148f147776c30a</url>
  <id>cf32baf915442ffe153ec0e4d8148f147776c30a</id>
  <committed-date>2008-04-21T14:30:56-07:00</committed-date>
  <authored-date>2008-04-16T03:39:19-07:00</authored-date>
  <message>Rescue from Timeout::Error in ActiveResource::Connection.

Signed-off-by: Michael Koziarski &lt;michael@koziarski.com&gt;</message>
  <tree>9405205f0ab6ddfceb49043206aa034f33a53cc1</tree>
  <committer>
    <name>Michael Koziarski</name>
    <login>NZKoz</login>
    <email>michael@koziarski.com</email>
  </committer>
</commit>
