astro-em-http-request 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/em-http/client.rb +20 -3
- data/lib/em-http/request.rb +10 -0
- data/test/test_request.rb +23 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/lib/em-http/client.rb
CHANGED
@@ -198,7 +198,14 @@ module EventMachine
|
|
198
198
|
|
199
199
|
# start HTTP request once we establish connection to host
|
200
200
|
def connection_completed
|
201
|
+
if @options[:max_connection_duration]
|
202
|
+
EM.add_timer(@options[:max_connection_duration]) {
|
203
|
+
@aborted = true
|
204
|
+
on_error("Max Connection Duration Exceeded (#{@options[:max_connection_duration]}s.)")
|
205
|
+
}
|
206
|
+
end
|
201
207
|
ssl = @options[:tls] || @options[:ssl] || {}
|
208
|
+
@bytes_received = 0
|
202
209
|
start_tls(ssl) if @uri.scheme == "https" #or @uri.port == 443 # A user might not want https even on port 443.
|
203
210
|
|
204
211
|
send_request_header
|
@@ -276,8 +283,13 @@ module EventMachine
|
|
276
283
|
end
|
277
284
|
|
278
285
|
def receive_data(data)
|
279
|
-
@
|
280
|
-
|
286
|
+
@bytes_received += data.size
|
287
|
+
if @options[:max_bytes].nil? or @options[:max_bytes] > @bytes_received
|
288
|
+
@data << data
|
289
|
+
dispatch
|
290
|
+
else
|
291
|
+
on_error("Bytes received exceeds limit (#{@bytes_received} vs. #{ @options[:max_bytes]})")
|
292
|
+
end
|
281
293
|
end
|
282
294
|
|
283
295
|
# Called when part of the body has been read
|
@@ -302,7 +314,12 @@ module EventMachine
|
|
302
314
|
end
|
303
315
|
|
304
316
|
def unbind
|
305
|
-
if @state == :finished || (
|
317
|
+
if @state == :finished || (
|
318
|
+
@state == :body &&
|
319
|
+
@bytes_remaining.nil? &&
|
320
|
+
(!@options[:max_bytes] or @bytes_received < @options[:max_bytes]) &&
|
321
|
+
(!@options[:max_connection_duration] or !@aborted)
|
322
|
+
)
|
306
323
|
succeed(self)
|
307
324
|
else
|
308
325
|
fail(self)
|
data/lib/em-http/request.rb
CHANGED
@@ -48,6 +48,16 @@ module EventMachine
|
|
48
48
|
# host: String
|
49
49
|
# Manually specify TCP connect host address, independent of
|
50
50
|
# Host: header
|
51
|
+
#
|
52
|
+
# max_bytes: Integer
|
53
|
+
# Explictly specify a maximum number of bytes that this connection may receive before shutting down.
|
54
|
+
# Default : none.
|
55
|
+
#
|
56
|
+
# max_connection_duration: Integer
|
57
|
+
# Explictly specify a maximum number of second for the connection. This is useful to avoid dealing with never ending connections (AtomStream-like)
|
58
|
+
# Default : none.
|
59
|
+
#
|
60
|
+
|
51
61
|
|
52
62
|
def get options = {}; send_request(:get, options); end
|
53
63
|
def head options = {}; send_request(:head, options); end
|
data/test/test_request.rb
CHANGED
@@ -444,4 +444,27 @@ describe EventMachine::HttpRequest do
|
|
444
444
|
}
|
445
445
|
}
|
446
446
|
end
|
447
|
+
|
448
|
+
it "should return an error if the response size exceeds the :max_bytes option" do
|
449
|
+
EventMachine.run {
|
450
|
+
http = EventMachine::HttpRequest.new("http://127.0.0.1:8080/").get(:max_bytes => 3)
|
451
|
+
http.errback { |http|
|
452
|
+
http.errors.should match /Bytes received exceeds limit/
|
453
|
+
EventMachine.stop
|
454
|
+
}
|
455
|
+
http.callback { failed }
|
456
|
+
}
|
457
|
+
end
|
458
|
+
|
459
|
+
it "should return an error if the connection duration exceeds the :max_connection_duration option" do
|
460
|
+
EventMachine.run {
|
461
|
+
http = EventMachine::HttpRequest.new("http://updates.sixapart.com/atom-stream.xml").get(:max_connection_duration => 3)
|
462
|
+
http.errback { |http|
|
463
|
+
http.errors.should match /Max Connection Duration Exceeded/
|
464
|
+
EventMachine.stop
|
465
|
+
}
|
466
|
+
http.callback { failed }
|
467
|
+
}
|
468
|
+
end
|
469
|
+
|
447
470
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: astro-em-http-request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Grigorik
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-11-03 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|