net-http-persistent 1.6.1 → 1.7
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.tar.gz.sig +0 -0
- data/History.txt +11 -2
- data/lib/net/http/persistent.rb +27 -5
- data/test/test_net_http_persistent.rb +45 -6
- metadata +8 -11
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,12 +1,21 @@
|
|
1
|
+
=== 1.7 / 2011-04-17
|
2
|
+
|
3
|
+
* Minor Enhancement
|
4
|
+
* Added Net::HTTP::Persistent#pipeline which integrates with
|
5
|
+
net-http-pipeline when it is present.
|
6
|
+
* Bug Fix
|
7
|
+
* Perform a case-insensitive check of the URI scheme for HTTPS URIs
|
8
|
+
|
1
9
|
=== 1.6.1 / 2011-03-08
|
2
10
|
|
3
11
|
* Bug Fix
|
4
12
|
* Net::HTTP::Persistent#request now handles Errno::EINVAL as a connection
|
5
|
-
reset and will be retried for idempotent requests.
|
13
|
+
reset and will be retried for idempotent requests. Reported by Aaron
|
14
|
+
Qian.
|
6
15
|
|
7
16
|
=== 1.6 / 2011-03-01
|
8
17
|
|
9
|
-
* Minor
|
18
|
+
* Minor Enhancement
|
10
19
|
* Added Net::HTTP::Persistent#socket_options to set multiple socket options
|
11
20
|
at socket startup.
|
12
21
|
|
data/lib/net/http/persistent.rb
CHANGED
@@ -3,6 +3,11 @@ require 'net/http/faster'
|
|
3
3
|
require 'uri'
|
4
4
|
require 'cgi' # for escaping
|
5
5
|
|
6
|
+
begin
|
7
|
+
require 'net/http/pipeline'
|
8
|
+
rescue LoadError
|
9
|
+
end
|
10
|
+
|
6
11
|
##
|
7
12
|
# Persistent connections for Net::HTTP
|
8
13
|
#
|
@@ -37,7 +42,7 @@ class Net::HTTP::Persistent
|
|
37
42
|
##
|
38
43
|
# The version of Net::HTTP::Persistent use are using
|
39
44
|
|
40
|
-
VERSION = '1.
|
45
|
+
VERSION = '1.7'
|
41
46
|
|
42
47
|
##
|
43
48
|
# Error class for errors raised by Net::HTTP::Persistent. Various
|
@@ -228,7 +233,7 @@ class Net::HTTP::Persistent
|
|
228
233
|
unless connection = connections[connection_id] then
|
229
234
|
connections[connection_id] = Net::HTTP.new(*net_http_args)
|
230
235
|
connection = connections[connection_id]
|
231
|
-
ssl connection if uri.scheme == 'https'
|
236
|
+
ssl connection if uri.scheme.downcase == 'https'
|
232
237
|
end
|
233
238
|
|
234
239
|
unless connection.started? then
|
@@ -239,7 +244,7 @@ class Net::HTTP::Persistent
|
|
239
244
|
connection.start
|
240
245
|
|
241
246
|
socket = connection.instance_variable_get :@socket
|
242
|
-
|
247
|
+
|
243
248
|
if socket then # for fakeweb
|
244
249
|
@socket_options.each do |option|
|
245
250
|
socket.io.setsockopt(*option)
|
@@ -307,6 +312,23 @@ class Net::HTTP::Persistent
|
|
307
312
|
(uri =~ /^https?:/) ? uri : "http://#{uri}"
|
308
313
|
end
|
309
314
|
|
315
|
+
##
|
316
|
+
# Pipelines +requests+ to the HTTP server at +uri+ yielding responses if a
|
317
|
+
# block is given. Returns all responses recieved.
|
318
|
+
#
|
319
|
+
# See
|
320
|
+
# Net::HTTP::Pipeline[http://docs.seattlerb.org/net-http-pipeline/Net/HTTP/Pipeline.html]
|
321
|
+
# for further details.
|
322
|
+
#
|
323
|
+
# Only if <tt>net-http-pipeline</tt> was required before
|
324
|
+
# <tt>net-http-persistent</tt> #pipeline will be present.
|
325
|
+
|
326
|
+
def pipeline uri, requests, &block # :yields: responses
|
327
|
+
connection = connection_for uri
|
328
|
+
|
329
|
+
connection.pipeline requests, &block
|
330
|
+
end
|
331
|
+
|
310
332
|
##
|
311
333
|
# Creates a URI for an HTTP proxy server from ENV variables.
|
312
334
|
#
|
@@ -417,7 +439,7 @@ class Net::HTTP::Persistent
|
|
417
439
|
|
418
440
|
##
|
419
441
|
# Shuts down all connections for +thread+.
|
420
|
-
#
|
442
|
+
#
|
421
443
|
# Uses the current thread by default.
|
422
444
|
#
|
423
445
|
# If you've used Net::HTTP::Persistent across multiple threads you should
|
@@ -451,7 +473,7 @@ class Net::HTTP::Persistent
|
|
451
473
|
# connections! Call #shutdown at the appropriate time instead!
|
452
474
|
#
|
453
475
|
# Use this method only as a last resort!
|
454
|
-
|
476
|
+
|
455
477
|
def shutdown_in_all_threads
|
456
478
|
Thread.list.each do |thread|
|
457
479
|
shutdown thread
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'minitest/autorun'
|
2
3
|
require 'net/http/persistent'
|
3
4
|
require 'openssl'
|
@@ -61,21 +62,24 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
61
62
|
@finished += 1
|
62
63
|
@socket = nil
|
63
64
|
end
|
65
|
+
def finished?
|
66
|
+
@finished >= 1
|
67
|
+
end
|
68
|
+
def pipeline requests, &block
|
69
|
+
requests.map { |r| r.path }
|
70
|
+
end
|
71
|
+
def reset?
|
72
|
+
@started == @finished + 1
|
73
|
+
end
|
64
74
|
def start
|
65
75
|
@started += 1
|
66
76
|
io = Object.new
|
67
77
|
def io.setsockopt(*a) @setsockopts ||= []; @setsockopts << a end
|
68
78
|
@socket = Net::BufferedIO.new io
|
69
79
|
end
|
70
|
-
def reset?
|
71
|
-
@started == @finished + 1
|
72
|
-
end
|
73
80
|
def started?
|
74
81
|
@started >= 1
|
75
82
|
end
|
76
|
-
def finished?
|
77
|
-
@finished >= 1
|
78
|
-
end
|
79
83
|
end
|
80
84
|
|
81
85
|
def basic_connection
|
@@ -285,6 +289,22 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
285
289
|
assert_equal expected, socket.io.instance_variable_get(:@setsockopts)
|
286
290
|
end
|
287
291
|
|
292
|
+
def test_connection_for_ssl
|
293
|
+
uri = URI.parse 'https://example.com/path'
|
294
|
+
c = @http.connection_for uri
|
295
|
+
|
296
|
+
assert c.started?
|
297
|
+
assert c.use_ssl?
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_connection_for_ssl_case
|
301
|
+
uri = URI.parse 'HTTPS://example.com/path'
|
302
|
+
c = @http.connection_for uri
|
303
|
+
|
304
|
+
assert c.started?
|
305
|
+
assert c.use_ssl?
|
306
|
+
end
|
307
|
+
|
288
308
|
def test_error_message
|
289
309
|
c = basic_connection
|
290
310
|
reqs[c.object_id] = 5
|
@@ -347,6 +367,25 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
347
367
|
assert_equal 'https://example', @http.normalize_uri('https://example')
|
348
368
|
end
|
349
369
|
|
370
|
+
def test_pipeline
|
371
|
+
skip 'net-http-pipeline not installed' unless defined?(Net::HTTP::Pipeline)
|
372
|
+
|
373
|
+
cached = basic_connection
|
374
|
+
cached.start
|
375
|
+
conns['example.com:80'] = cached
|
376
|
+
|
377
|
+
requests = [
|
378
|
+
Net::HTTP::Get.new((@uri + '1').request_uri),
|
379
|
+
Net::HTTP::Get.new((@uri + '2').request_uri),
|
380
|
+
]
|
381
|
+
|
382
|
+
responses = @http.pipeline @uri, requests
|
383
|
+
|
384
|
+
assert_equal 2, responses.length
|
385
|
+
assert_equal '/1', responses.first
|
386
|
+
assert_equal '/2', responses.last
|
387
|
+
end
|
388
|
+
|
350
389
|
def test_proxy_from_env
|
351
390
|
ENV['HTTP_PROXY'] = 'proxy.example'
|
352
391
|
ENV['HTTP_PROXY_USER'] = 'johndoe'
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-http-persistent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 1.6.1
|
8
|
+
- 7
|
9
|
+
version: "1.7"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Eric Hodel
|
@@ -36,8 +35,7 @@ cert_chain:
|
|
36
35
|
x52qPcexcYZR7w==
|
37
36
|
-----END CERTIFICATE-----
|
38
37
|
|
39
|
-
date: 2011-
|
40
|
-
default_executable:
|
38
|
+
date: 2011-04-17 00:00:00 Z
|
41
39
|
dependencies:
|
42
40
|
- !ruby/object:Gem::Dependency
|
43
41
|
name: minitest
|
@@ -63,12 +61,12 @@ dependencies:
|
|
63
61
|
requirements:
|
64
62
|
- - ">="
|
65
63
|
- !ruby/object:Gem::Version
|
66
|
-
hash:
|
64
|
+
hash: 35
|
67
65
|
segments:
|
68
66
|
- 2
|
69
67
|
- 9
|
70
|
-
-
|
71
|
-
version: 2.9.
|
68
|
+
- 4
|
69
|
+
version: 2.9.4
|
72
70
|
type: :development
|
73
71
|
version_requirements: *id002
|
74
72
|
description: |-
|
@@ -102,7 +100,6 @@ files:
|
|
102
100
|
- lib/net/http/faster.rb
|
103
101
|
- lib/net/http/persistent.rb
|
104
102
|
- test/test_net_http_persistent.rb
|
105
|
-
has_rdoc: true
|
106
103
|
homepage: http://seattlerb.rubyforge.org/net-http-persistent
|
107
104
|
licenses: []
|
108
105
|
|
@@ -133,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
130
|
requirements: []
|
134
131
|
|
135
132
|
rubyforge_project: net-http-persistent
|
136
|
-
rubygems_version: 1.
|
133
|
+
rubygems_version: 1.7.2
|
137
134
|
signing_key:
|
138
135
|
specification_version: 3
|
139
136
|
summary: Manages persistent connections using Net::HTTP plus a speed fix for 1.8
|
metadata.gz.sig
CHANGED
Binary file
|