public this repo is viewable by everyone
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Rescue from Timeout::Error in ActiveResource::Connection.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
chuyeow (author)
about 1 month ago
NZKoz (committer)
24 days ago
commit  cf32baf915442ffe153ec0e4d8148f147776c30a
tree    9405205f0ab6ddfceb49043206aa034f33a53cc1
parent  105910429d5873dce677ef32eef5f705e0625d86
...
18
19
20
 
 
 
 
 
 
 
 
21
22
23
...
134
135
136
 
 
137
138
139
...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
...
142
143
144
145
146
147
148
149
0
@@ -18,6 +18,14 @@ module ActiveResource
0
     end
0
   end
0
 
0
+ # Raised when a Timeout::Error occurs.
0
+ class TimeoutError < ConnectionError
0
+ def initialize(message)
0
+ @message = message
0
+ end
0
+ def to_s; @message ;end
0
+ end
0
+
0
   # 3xx Redirection
0
   class Redirection < ConnectionError # :nodoc:
0
     def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end
0
@@ -134,6 +142,8 @@ module ActiveResource
0
         time = Benchmark.realtime { result = http.send(method, path, *arguments) }
0
         logger.info "--> #{result.code} #{result.message} (#{result.body ? result.body : 0}b %.2fs)" % time if logger
0
         handle_response(result)
0
+ rescue Timeout::Error => e
0
+ raise TimeoutError.new(e.message)
0
       end
0
 
0
       # Handles response and error codes from remote service.
...
7
8
9
10
11
 
 
 
 
 
 
 
 
 
 
 
 
 
12
...
7
8
9
 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
0
@@ -7,4 +7,16 @@ require 'active_resource/http_mock'
0
 $:.unshift "#{File.dirname(__FILE__)}/../test"
0
 require 'setter_trap'
0
 
0
-ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/debug.log")
0
\ No newline at end of file
0
+ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/debug.log")
0
+
0
+# Wrap tests that use Mocha and skip if unavailable.
0
+def uses_mocha(test_name)
0
+ unless Object.const_defined?(:Mocha)
0
+ require 'mocha'
0
+ require 'stubba'
0
+ end
0
+ yield
0
+rescue LoadError => load_error
0
+ raise unless load_error.message =~ /mocha/i
0
+ $stderr.puts "Skipping #{test_name} tests. `gem install mocha` and try again."
0
+end
0
\ No newline at end of file
...
168
169
170
 
 
 
 
 
 
 
 
 
171
172
173
...
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
0
@@ -168,6 +168,15 @@ class ConnectionTest < Test::Unit::TestCase
0
     assert_equal 200, response.code
0
   end
0
 
0
+ uses_mocha('test_timeout') do
0
+ def test_timeout
0
+ @http = mock('new Net::HTTP')
0
+ @conn.expects(:http).returns(@http)
0
+ @http.expects(:get).raises(Timeout::Error, 'execution expired')
0
+ assert_raises(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
0
+ end
0
+ end
0
+
0
   protected
0
     def assert_response_raises(klass, code)
0
       assert_raise(klass, "Expected response code #{code} to raise #{klass}") do

Comments

    No one has commented yet.