glebtv-httpclient 3.1.1 → 3.2.0

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +8 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +6 -0
  7. data/CHANGELOG.rdoc +653 -0
  8. data/Gemfile +12 -0
  9. data/Gemfile.lock +284 -0
  10. data/README.md +7 -2
  11. data/Rakefile +22 -0
  12. data/bin/httpclient +1 -1
  13. data/dist_key/cacerts.pem +1808 -0
  14. data/dist_key/cert.pem +24 -0
  15. data/dist_key/gen_dist_cert.rb +29 -0
  16. data/httpclient.gemspec +33 -0
  17. data/lib/httpclient.rb +59 -15
  18. data/lib/httpclient/lru_cache.rb +171 -0
  19. data/lib/httpclient/lru_threadsafe.rb +29 -0
  20. data/lib/httpclient/session.rb +52 -13
  21. data/lib/httpclient/ssl_config.rb +4 -3
  22. data/lib/httpclient/version.rb +1 -1
  23. data/sample/ssl/trust_certs/.keep_me +0 -0
  24. data/spec/http_message_spec.rb +124 -0
  25. data/spec/httpclient_spec.rb +322 -0
  26. data/spec/keepalive_spec.rb +129 -0
  27. data/spec/spec_helper.rb +40 -0
  28. data/spec/support/1024x768.gif +0 -0
  29. data/spec/support/1x1.png +0 -0
  30. data/spec/support/base_server.rb +36 -0
  31. data/spec/support/file.txt +1 -0
  32. data/spec/support/ht_helpers.rb +10 -0
  33. data/spec/support/main_server.rb +155 -0
  34. data/spec/support/proxy_server.rb +14 -0
  35. data/spec/support/test_servlet.rb +73 -0
  36. data/stress-test/Gemfile +4 -0
  37. data/stress-test/Gemfile.lock +16 -0
  38. data/stress-test/client.rb +72 -0
  39. data/stress-test/config.ru +4 -0
  40. data/stress-test/unicorn.conf +2 -0
  41. data/test.rb +19 -0
  42. data/test/helper.rb +4 -3
  43. data/test/test_httpclient.rb +19 -677
  44. metadata +226 -38
  45. data/lib/httpclient/timeout.rb +0 -140
  46. data/test/runner.rb +0 -2
metadata CHANGED
@@ -1,15 +1,142 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glebtv-httpclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
+ - Hiroshi Nakamura
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-17 00:00:00.000000000 Z
12
- dependencies: []
12
+ date: 2014-02-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: PriorityQueue
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: addressable
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: test-unit
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rdoc
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: coveralls
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
13
140
  description:
14
141
  email: glebtv@gmail.com
15
142
  executables:
@@ -17,59 +144,91 @@ executables:
17
144
  extensions: []
18
145
  extra_rdoc_files: []
19
146
  files:
147
+ - .coveralls.yml
148
+ - .gitignore
149
+ - .ruby-gemset
150
+ - .ruby-version
151
+ - .travis.yml
152
+ - CHANGELOG.rdoc
153
+ - Gemfile
154
+ - Gemfile.lock
155
+ - README.md
156
+ - Rakefile
20
157
  - bin/httpclient
21
- - lib/httpclient.rb
158
+ - dist_key/cacerts.pem
159
+ - dist_key/cert.pem
160
+ - dist_key/gen_dist_cert.rb
161
+ - httpclient.gemspec
22
162
  - lib/glebtv-httpclient.rb
163
+ - lib/hexdump.rb
164
+ - lib/httpclient.rb
165
+ - lib/httpclient/auth.rb
166
+ - lib/httpclient/cacert.p7s
23
167
  - lib/httpclient/connection.rb
168
+ - lib/httpclient/cookie.rb
24
169
  - lib/httpclient/http.rb
25
- - lib/httpclient/version.rb
26
170
  - lib/httpclient/include_client.rb
27
- - lib/httpclient/auth.rb
28
- - lib/httpclient/cookie.rb
29
- - lib/httpclient/util.rb
30
- - lib/httpclient/timeout.rb
31
- - lib/httpclient/ssl_config.rb
171
+ - lib/httpclient/lru_cache.rb
172
+ - lib/httpclient/lru_threadsafe.rb
32
173
  - lib/httpclient/session.rb
33
- - lib/httpclient/cacert.p7s
34
- - lib/hexdump.rb
174
+ - lib/httpclient/ssl_config.rb
175
+ - lib/httpclient/util.rb
176
+ - lib/httpclient/version.rb
35
177
  - lib/oauthclient.rb
36
- - sample/ssl/webrick_httpsd.rb
178
+ - sample/async.rb
179
+ - sample/auth.rb
180
+ - sample/cookie.rb
181
+ - sample/dav.rb
182
+ - sample/howto.rb
183
+ - sample/oauth_buzz.rb
184
+ - sample/oauth_friendfeed.rb
185
+ - sample/oauth_twitter.rb
186
+ - sample/ssl/0cert.pem
37
187
  - sample/ssl/0key.pem
38
- - sample/ssl/htdocs/index.html
39
188
  - sample/ssl/1000cert.pem
40
- - sample/ssl/0cert.pem
41
189
  - sample/ssl/1000key.pem
190
+ - sample/ssl/htdocs/index.html
42
191
  - sample/ssl/ssl_client.rb
192
+ - sample/ssl/trust_certs/.keep_me
193
+ - sample/ssl/webrick_httpsd.rb
43
194
  - sample/stream.rb
44
- - sample/async.rb
45
- - sample/howto.rb
46
- - sample/auth.rb
47
- - sample/cookie.rb
48
- - sample/wcat.rb
49
- - sample/oauth_buzz.rb
50
195
  - sample/thread.rb
51
- - sample/dav.rb
52
- - sample/oauth_twitter.rb
53
- - sample/oauth_friendfeed.rb
196
+ - sample/wcat.rb
197
+ - spec/http_message_spec.rb
198
+ - spec/httpclient_spec.rb
199
+ - spec/keepalive_spec.rb
200
+ - spec/spec_helper.rb
201
+ - spec/support/1024x768.gif
202
+ - spec/support/1x1.png
203
+ - spec/support/base_server.rb
204
+ - spec/support/file.txt
205
+ - spec/support/ht_helpers.rb
206
+ - spec/support/main_server.rb
207
+ - spec/support/proxy_server.rb
208
+ - spec/support/test_servlet.rb
209
+ - stress-test/Gemfile
210
+ - stress-test/Gemfile.lock
211
+ - stress-test/client.rb
212
+ - stress-test/config.ru
213
+ - stress-test/unicorn.conf
214
+ - test.rb
54
215
  - test/ca-chain.cert
55
- - test/test_hexdump.rb
56
- - test/htdigest
57
- - test/server.key
58
- - test/test_cookie.rb
216
+ - test/ca.cert
59
217
  - test/client.cert
218
+ - test/client.key
219
+ - test/helper.rb
220
+ - test/htdigest
60
221
  - test/htpasswd
61
222
  - test/server.cert
62
- - test/ca.cert
63
- - test/helper.rb
64
- - test/test_auth.rb
223
+ - test/server.key
65
224
  - test/sslsvr.rb
66
- - test/client.key
67
- - test/test_ssl.rb
68
225
  - test/subca.cert
69
- - test/test_include_client.rb
70
- - test/runner.rb
226
+ - test/test_auth.rb
227
+ - test/test_cookie.rb
228
+ - test/test_hexdump.rb
71
229
  - test/test_httpclient.rb
72
- - README.md
230
+ - test/test_include_client.rb
231
+ - test/test_ssl.rb
73
232
  homepage: http://github.com/glebtv/httpclient
74
233
  licenses:
75
234
  - ruby
@@ -90,9 +249,38 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
249
  version: '0'
91
250
  requirements: []
92
251
  rubyforge_project:
93
- rubygems_version: 2.1.10
252
+ rubygems_version: 2.2.1
94
253
  signing_key:
95
254
  specification_version: 4
96
255
  summary: Fork of httpclient with some fixes and patches I needed. Please use original
97
256
  gem instead
98
- test_files: []
257
+ test_files:
258
+ - spec/http_message_spec.rb
259
+ - spec/httpclient_spec.rb
260
+ - spec/keepalive_spec.rb
261
+ - spec/spec_helper.rb
262
+ - spec/support/1024x768.gif
263
+ - spec/support/1x1.png
264
+ - spec/support/base_server.rb
265
+ - spec/support/file.txt
266
+ - spec/support/ht_helpers.rb
267
+ - spec/support/main_server.rb
268
+ - spec/support/proxy_server.rb
269
+ - spec/support/test_servlet.rb
270
+ - test/ca-chain.cert
271
+ - test/ca.cert
272
+ - test/client.cert
273
+ - test/client.key
274
+ - test/helper.rb
275
+ - test/htdigest
276
+ - test/htpasswd
277
+ - test/server.cert
278
+ - test/server.key
279
+ - test/sslsvr.rb
280
+ - test/subca.cert
281
+ - test/test_auth.rb
282
+ - test/test_cookie.rb
283
+ - test/test_hexdump.rb
284
+ - test/test_httpclient.rb
285
+ - test/test_include_client.rb
286
+ - test/test_ssl.rb
@@ -1,140 +0,0 @@
1
- # HTTPClient - HTTP client library.
2
- # Copyright (C) 2000-2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
- #
4
- # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
- # redistribute it and/or modify it under the same terms of Ruby's license;
6
- # either the dual license version in 2003, or any later version.
7
-
8
-
9
- require 'timeout'
10
- require 'thread'
11
-
12
-
13
- class HTTPClient
14
-
15
-
16
- # Replaces timeout.rb to avoid Thread creation and scheduling overhead.
17
- #
18
- # You should check another timeout replace in WEBrick.
19
- # See lib/webrick/utils.rb in ruby/1.9.
20
- #
21
- # About this implementation:
22
- # * Do not create Thread for each timeout() call. Just create 1 Thread for
23
- # timeout scheduler.
24
- # * Do not wakeup the scheduler thread so often. Let scheduler thread sleep
25
- # until the nearest period.
26
- if !defined?(JRUBY_VERSION) and RUBY_VERSION < '1.9'
27
- class TimeoutScheduler
28
-
29
- # Represents timeout period.
30
- class Period
31
- attr_reader :thread, :time
32
-
33
- # Creates new Period.
34
- def initialize(thread, time, ex)
35
- @thread, @time, @ex = thread, time, ex
36
- @lock = Mutex.new
37
- end
38
-
39
- # Raises if thread exists and alive.
40
- def raise(message)
41
- @lock.synchronize do
42
- if @thread and @thread.alive?
43
- @thread.raise(@ex, message)
44
- end
45
- end
46
- end
47
-
48
- # Cancel this Period. Mutex is needed to avoid too-late exception.
49
- def cancel
50
- @lock.synchronize do
51
- @thread = nil
52
- end
53
- end
54
- end
55
-
56
- # Creates new TimeoutScheduler.
57
- def initialize
58
- @pool = {}
59
- @next = nil
60
- @thread = start_timer_thread
61
- end
62
-
63
- # Registers new timeout period.
64
- def register(thread, sec, ex)
65
- period = Period.new(thread, Time.now + sec, ex || ::Timeout::Error)
66
- @pool[period] = true
67
- if @next.nil? or period.time < @next
68
- begin
69
- @thread.wakeup
70
- rescue ThreadError
71
- # Thread may be dead by fork.
72
- @thread = start_timer_thread
73
- end
74
- end
75
- period
76
- end
77
-
78
- # Cancels the given period.
79
- def cancel(period)
80
- @pool.delete(period)
81
- period.cancel
82
- end
83
-
84
- private
85
-
86
- def start_timer_thread
87
- thread = Thread.new {
88
- while true
89
- if @pool.empty?
90
- @next = nil
91
- sleep
92
- else
93
- min, = @pool.min { |a, b| a[0].time <=> b[0].time }
94
- @next = min.time
95
- sec = @next - Time.now
96
- if sec > 0
97
- sleep(sec)
98
- end
99
- end
100
- now = Time.now
101
- @pool.keys.each do |period|
102
- if period.time < now
103
- period.raise('execution expired')
104
- cancel(period)
105
- end
106
- end
107
- end
108
- }
109
- Thread.pass while thread.status != 'sleep'
110
- thread
111
- end
112
- end
113
-
114
- class << self
115
- # CAUTION: caller must aware of race condition.
116
- def timeout_scheduler
117
- @timeout_scheduler ||= TimeoutScheduler.new
118
- end
119
- end
120
- timeout_scheduler # initialize at first time.
121
- end
122
-
123
- module Timeout
124
- if !defined?(JRUBY_VERSION) and RUBY_VERSION < '1.9'
125
- def timeout(sec, ex = nil, &block)
126
- return yield if sec == nil or sec.zero?
127
- scheduler = nil
128
- begin
129
- scheduler = HTTPClient.timeout_scheduler
130
- period = scheduler.register(Thread.current, sec, ex)
131
- yield(sec)
132
- ensure
133
- scheduler.cancel(period) if scheduler and period
134
- end
135
- end
136
- end
137
- end
138
-
139
-
140
- end