net-http-persistent 1.2.5 → 1.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.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- Hɇ�h\�CKR�ʩ�F}�K�s�?#����˶�)�LlB�+��,(�Ob#N3�iz��7��឴���(C6��yl���.DaA��ޓ� QVeR0;ڣs��ku�:�׾�Y��N��㣣وd_���v`�W � �����޴K�&*)���.e����Id���s����j� ��7�Њ�D�,D�t�ѫD�$_]�i�/���>cs]E��o���.fH��W���=_�6o������z��$�;Gn�.R
1
+ )9���ϬT\4V ��I�i)n``]M+(>kN٣$2ע�7����<Hr�|5��������IY8��2�-
2
+ [S��Z��͑���Le�J��74K�o /*ͼ��-���%���v���}��Q�1R�u�s�,X#��j�7�����̍������{6�:H�B���$:�0z4��6{ͮ"�����c��{�I�#���J�NyA�:��;^��wU����-H����ܡ�C�g:X��������f�n9\��lC�I
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ === 1.3 / 2010-09-08
2
+
3
+ * Minor Enhancements
4
+ * HTTP versions are now recorded. This information is not currently used.
5
+
6
+ * Bug Fixes
7
+ * #shutdown no longer fails when an unstarted HTTP connection is shut down.
8
+
1
9
  === 1.2.5 / 2010-07-27
2
10
 
3
11
  * Bug Fixes
@@ -1,6 +1,7 @@
1
1
  require 'net/http'
2
2
  require 'net/http/faster'
3
3
  require 'uri'
4
+ require 'cgi' # for escaping
4
5
 
5
6
  ##
6
7
  # Persistent connections for Net::HTTP
@@ -36,7 +37,7 @@ class Net::HTTP::Persistent
36
37
  ##
37
38
  # The version of Net::HTTP::Persistent use are using
38
39
 
39
- VERSION = '1.2.5'
40
+ VERSION = '1.3'
40
41
 
41
42
  ##
42
43
  # Error class for errors raised by Net::HTTP::Persistent. Various
@@ -74,6 +75,12 @@ class Net::HTTP::Persistent
74
75
 
75
76
  attr_reader :headers
76
77
 
78
+ ##
79
+ # Maps host:port to an HTTP version. This allows us to enable version
80
+ # specific features.
81
+
82
+ attr_reader :http_versions
83
+
77
84
  ##
78
85
  # The value sent in the Keep-Alive header. Defaults to 30. Not needed for
79
86
  # HTTP/1.1 servers.
@@ -167,11 +174,12 @@ class Net::HTTP::Persistent
167
174
  @proxy_connection_id = [nil, *@proxy_args].join ':'
168
175
  end
169
176
 
170
- @debug_output = nil
171
- @headers = {}
172
- @keep_alive = 30
173
- @open_timeout = nil
174
- @read_timeout = nil
177
+ @debug_output = nil
178
+ @headers = {}
179
+ @http_versions = {}
180
+ @keep_alive = 30
181
+ @open_timeout = nil
182
+ @read_timeout = nil
175
183
 
176
184
  key = ['net_http_persistent', name, 'connections'].compact.join '_'
177
185
  @connection_key = key.intern
@@ -235,7 +243,7 @@ class Net::HTTP::Persistent
235
243
  # URI::escape wrapper
236
244
 
237
245
  def escape str
238
- URI.escape str if str
246
+ CGI.escape str if str
239
247
  end
240
248
 
241
249
  ##
@@ -248,6 +256,13 @@ class Net::HTTP::Persistent
248
256
  rescue IOError
249
257
  end
250
258
 
259
+ ##
260
+ # Returns the HTTP protocol version for +uri+
261
+
262
+ def http_version uri
263
+ @http_versions["#{uri.host}:#{uri.port}"]
264
+ end
265
+
251
266
  ##
252
267
  # Is +req+ idempotent according to RFC 2616?
253
268
 
@@ -338,7 +353,7 @@ class Net::HTTP::Persistent
338
353
  connection_id = connection.object_id
339
354
 
340
355
  begin
341
- count = Thread.current[@request_key][connection_id] += 1
356
+ Thread.current[@request_key][connection_id] += 1
342
357
  response = connection.request req, &block
343
358
 
344
359
  rescue Net::HTTPBadResponse => e
@@ -365,6 +380,8 @@ class Net::HTTP::Persistent
365
380
  retry
366
381
  end
367
382
 
383
+ @http_versions["#{uri.host}:#{uri.port}"] ||= response.http_version
384
+
368
385
  response
369
386
  end
370
387
 
@@ -378,7 +395,10 @@ class Net::HTTP::Persistent
378
395
  connections = Thread.current[@connection_key]
379
396
 
380
397
  connections.each do |_, connection|
381
- connection.finish
398
+ begin
399
+ connection.finish
400
+ rescue IOError
401
+ end
382
402
  end if connections
383
403
 
384
404
  Thread.current[@connection_key] = nil
@@ -4,6 +4,8 @@ require 'openssl'
4
4
  require 'stringio'
5
5
 
6
6
  class Net::HTTP
7
+ alias orig_connect connect
8
+
7
9
  def connect
8
10
  end
9
11
  end
@@ -28,29 +30,40 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
28
30
  end
29
31
  end
30
32
 
31
- def connection
33
+ def basic_connection
32
34
  c = Object.new
33
- # Net::HTTP
35
+ c.instance_variable_set :@finished, false
36
+ c.instance_variable_set :@reset, false
37
+ c.instance_variable_set :@started, false
38
+
34
39
  def c.finish; @finished = true end
35
- def c.request(req)
36
- @req = req
37
- r = Object.new
38
- def r.read_body() :read_body end
39
- yield r if block_given?
40
- :response
41
- end
42
40
  def c.reset; @reset = true end
43
41
  def c.start; end
44
42
 
45
- # util
46
43
  def c.req() @req; end
47
44
  def c.reset?; @reset end
48
45
  def c.started?; true end
49
46
  def c.finished?; @finished end
47
+
50
48
  conns["#{@uri.host}:#{@uri.port}"] = c
51
49
  c
52
50
  end
53
51
 
52
+ def connection
53
+ c = basic_connection
54
+
55
+ def c.request(req)
56
+ @req = req
57
+ r = Net::HTTPResponse.allocate
58
+ def r.http_version() '1.1' end
59
+ def r.read_body() :read_body end
60
+ yield r if block_given?
61
+ r
62
+ end
63
+
64
+ c
65
+ end
66
+
54
67
  def conns
55
68
  Thread.current[@http.connection_key] ||= {}
56
69
  end
@@ -191,11 +204,12 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
191
204
  def test_escape
192
205
  assert_nil @http.escape nil
193
206
 
194
- assert_equal '%20', @http.escape(' ')
207
+ assert_equal '+%3F', @http.escape(' ?')
195
208
  end
196
209
 
197
210
  def test_finish
198
211
  c = Object.new
212
+ c.instance_variable_set :@started, false
199
213
  def c.finish; @finished = true end
200
214
  def c.finished?; @finished end
201
215
  def c.start; @started = true end
@@ -211,6 +225,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
211
225
 
212
226
  def test_finish_io_error
213
227
  c = Object.new
228
+ c.instance_variable_set :@started, false
214
229
  def c.finish; @finished = true; raise IOError end
215
230
  def c.finished?; @finished end
216
231
  def c.start; @started = true end
@@ -223,6 +238,16 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
223
238
  assert c.finished?
224
239
  end
225
240
 
241
+ def test_http_version
242
+ assert_nil @http.http_version @uri
243
+
244
+ connection
245
+
246
+ @http.request @uri
247
+
248
+ assert_equal '1.1', @http.http_version(@uri)
249
+ end
250
+
226
251
  def test_idempotent_eh
227
252
  assert @http.idempotent? Net::HTTP::Delete.new '/'
228
253
  assert @http.idempotent? Net::HTTP::Get.new '/'
@@ -346,7 +371,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
346
371
  res = @http.request @uri
347
372
  req = c.req
348
373
 
349
- assert_equal :response, res
374
+ assert_kind_of Net::HTTPResponse, res
350
375
 
351
376
  assert_kind_of Net::HTTP::Get, req
352
377
  assert_equal '/path', req.path
@@ -358,7 +383,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
358
383
  end
359
384
 
360
385
  def test_request_bad_response
361
- c = connection
386
+ c = basic_connection
362
387
  def c.request(*a) raise Net::HTTPBadResponse end
363
388
 
364
389
  e = assert_raises Net::HTTP::Persistent::Error do
@@ -370,23 +395,23 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
370
395
  end
371
396
 
372
397
  def test_request_bad_response_retry
373
- c = connection
398
+ c = basic_connection
374
399
  def c.request(*a)
375
- def self.request(*a)
376
- :response
400
+ if defined? @called then
401
+ Net::HTTPResponse.allocate
402
+ else
403
+ @called = true
404
+ raise Net::HTTPBadResponse
377
405
  end
378
-
379
- raise Net::HTTPBadResponse
380
406
  end
381
407
 
382
- res = @http.request @uri
408
+ @http.request @uri
383
409
 
384
- assert_equal :response, res
385
410
  assert c.finished?
386
411
  end
387
412
 
388
413
  def test_request_bad_response_unsafe
389
- c = connection
414
+ c = basic_connection
390
415
  def c.request(*a)
391
416
  if instance_variable_defined? :@request then
392
417
  raise 'POST must not be retried'
@@ -415,7 +440,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
415
440
 
416
441
  req = c.req
417
442
 
418
- assert_equal :response, res
443
+ assert_kind_of Net::HTTPResponse, res
419
444
  refute_nil body
420
445
 
421
446
  assert_kind_of Net::HTTP::Get, req
@@ -428,7 +453,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
428
453
  end
429
454
 
430
455
  def test_request_reset
431
- c = connection
456
+ c = basic_connection
432
457
  def c.request(*a) raise Errno::ECONNRESET end
433
458
 
434
459
  e = assert_raises Net::HTTP::Persistent::Error do
@@ -440,23 +465,23 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
440
465
  end
441
466
 
442
467
  def test_request_reset_retry
443
- c = connection
468
+ c = basic_connection
444
469
  def c.request(*a)
445
- def self.request(*a)
446
- :response
470
+ if defined? @called then
471
+ Net::HTTPResponse.allocate
472
+ else
473
+ @called = true
474
+ raise Errno::ECONNRESET
447
475
  end
448
-
449
- raise Errno::ECONNRESET
450
476
  end
451
477
 
452
- res = @http.request @uri
478
+ @http.request @uri
453
479
 
454
- assert_equal :response, res
455
480
  assert c.finished?
456
481
  end
457
482
 
458
483
  def test_request_reset_unsafe
459
- c = connection
484
+ c = basic_connection
460
485
  def c.request(*a)
461
486
  if instance_variable_defined? :@request then
462
487
  raise 'POST must not be retried'
@@ -479,11 +504,9 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
479
504
 
480
505
  post = Net::HTTP::Post.new @uri.path
481
506
 
482
- res = @http.request @uri, post
507
+ @http.request @uri, post
483
508
  req = c.req
484
509
 
485
- assert_equal :response, res
486
-
487
510
  assert_same post, req
488
511
  end
489
512
 
@@ -505,6 +528,18 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
505
528
  refute_same rs, reqs
506
529
  end
507
530
 
531
+ def test_shutdown_not_started
532
+ c = Object.new
533
+ def c.finish() raise IOError end
534
+
535
+ conns["#{@uri.host}:#{@uri.port}"] = c
536
+
537
+ @http.shutdown
538
+
539
+ assert_nil Thread.current[@http.connection_key]
540
+ assert_nil Thread.current[@http.request_key]
541
+ end
542
+
508
543
  def test_shutdown_no_connections
509
544
  @http.shutdown
510
545
 
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: 21
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 2
9
- - 5
10
- version: 1.2.5
8
+ - 3
9
+ version: "1.3"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Eric Hodel
@@ -36,7 +35,7 @@ cert_chain:
36
35
  x52qPcexcYZR7w==
37
36
  -----END CERTIFICATE-----
38
37
 
39
- date: 2010-07-27 00:00:00 -07:00
38
+ date: 2010-09-08 00:00:00 -07:00
40
39
  default_executable:
41
40
  dependencies:
42
41
  - !ruby/object:Gem::Dependency
@@ -47,34 +46,18 @@ dependencies:
47
46
  requirements:
48
47
  - - ">="
49
48
  - !ruby/object:Gem::Version
50
- hash: 9
49
+ hash: 7
51
50
  segments:
52
51
  - 2
53
52
  - 0
54
- - 3
55
- version: 2.0.3
53
+ - 4
54
+ version: 2.0.4
56
55
  type: :development
57
56
  version_requirements: *id001
58
- - !ruby/object:Gem::Dependency
59
- name: gemcutter
60
- prerelease: false
61
- requirement: &id002 !ruby/object:Gem::Requirement
62
- none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- hash: 11
67
- segments:
68
- - 0
69
- - 5
70
- - 0
71
- version: 0.5.0
72
- type: :development
73
- version_requirements: *id002
74
57
  - !ruby/object:Gem::Dependency
75
58
  name: minitest
76
59
  prerelease: false
77
- requirement: &id003 !ruby/object:Gem::Requirement
60
+ requirement: &id002 !ruby/object:Gem::Requirement
78
61
  none: false
79
62
  requirements:
80
63
  - - ">="
@@ -86,23 +69,23 @@ dependencies:
86
69
  - 0
87
70
  version: 1.5.0
88
71
  type: :development
89
- version_requirements: *id003
72
+ version_requirements: *id002
90
73
  - !ruby/object:Gem::Dependency
91
74
  name: hoe
92
75
  prerelease: false
93
- requirement: &id004 !ruby/object:Gem::Requirement
76
+ requirement: &id003 !ruby/object:Gem::Requirement
94
77
  none: false
95
78
  requirements:
96
79
  - - ">="
97
80
  - !ruby/object:Gem::Version
98
- hash: 27
81
+ hash: 21
99
82
  segments:
100
83
  - 2
101
- - 5
102
- - 0
103
- version: 2.5.0
84
+ - 6
85
+ - 1
86
+ version: 2.6.1
104
87
  type: :development
105
- version_requirements: *id004
88
+ version_requirements: *id003
106
89
  description: |-
107
90
  Persistent connections using Net::HTTP plus a speed fix for 1.8. It's
108
91
  thread-safe too!
metadata.gz.sig CHANGED
Binary file