glebtv-httpclient 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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