em-net-http 0.3.9 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6070eb6b7aae30b3ab077b936d68f5ee32b3b822
4
- data.tar.gz: 5fdcd37f3555645f559c5e276bd335c6e1068446
3
+ metadata.gz: 38af6438fd2b8255ce7756ad1bf1a313b3b1fcef
4
+ data.tar.gz: df1038c3a426d3733a714233ec956719c519070a
5
5
  SHA512:
6
- metadata.gz: acd7c4fc86030532a0fec13994b82c687d658b624183178155fdf5029011af5a9af228f3ef22b7d6a6b7169aec56f14207fe900e6fdba5cc5b677cf41fd4b070
7
- data.tar.gz: 64b6532a1a7219c99d74a8d9401a72e8b51c42c5c252ef417941f68c64036dd1f8317cc887e11e571191568eec872e1eb7558430ecad2bfeb01043ad5fd5e5a0
6
+ metadata.gz: f521f421707ec1a8342f01bda1af50018779bb0961509f3e064196c4f99d8cfe0ff051a7ada8b6a5ad47c944c30d25e2fc4edc55fdae006b5e1272bfecc0ec7b
7
+ data.tar.gz: 488044d712388932f55dc0c78da40d2bb6e0b68c9e19aea0d044f6715430b3df765e02b4c22f52f538d470e7f23c80801d7ae3a9eb3417a97919f53aa6790561
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.9
1
+ 0.3.10
@@ -26,8 +26,7 @@ Gem::Specification.new do |s|
26
26
  "lib/test_weary.rb",
27
27
  "spec/em-net-http_spec.rb",
28
28
  "spec/image.jpg",
29
- "spec/spec.opts",
30
- "spec/spec_helper.rb"
29
+ "spec/spec.opts"
31
30
  ]
32
31
  s.homepage = %q{http://github.com/jfairbairn/em-net-http}
33
32
  s.require_paths = ["lib"]
@@ -41,4 +40,3 @@ Gem::Specification.new do |s|
41
40
  s.add_development_dependency(%q<mimic>, [">= 0.3.0"])
42
41
  s.add_development_dependency(%q<weary>, [">= 0"])
43
42
  end
44
-
@@ -126,6 +126,7 @@ module Net
126
126
  sslopts[:cert_chain_file] = ca_file if ca_file
127
127
  end
128
128
  opts[:timeout] = self.read_timeout
129
+ opts[:decoding] = false
129
130
 
130
131
  headers = opts[:head] = {}
131
132
  req.each do |k, v|
@@ -135,8 +136,10 @@ module Net
135
136
  headers['content-type'] ||= "application/x-www-form-urlencoded"
136
137
 
137
138
  t0 = Time.now
139
+ http = EM::HttpRequest.new(uri)
138
140
  request_method = (req.respond_to?(:method) ? req.method : req.class::METHOD).downcase.to_sym
139
- httpreq = EM::HttpRequest.new(uri).send(request_method, opts)
141
+ request_method = :"a#{request_method}" if http.respond_to?(:"a#{request_method}")
142
+ httpreq = http.send(request_method, opts)
140
143
 
141
144
  f=Fiber.current
142
145
 
@@ -146,7 +149,11 @@ module Net
146
149
  nhresclass = Net::HTTPResponse.response_class(emres.code)
147
150
  nhres = nhresclass.new(emres.http_version, emres.code, emres.message)
148
151
  emres.to_hash.each do |k, v|
149
- nhres.add_field(k, v)
152
+ if v.is_a?(Array)
153
+ v.each {|e| nhres.add_field(k, e)}
154
+ else
155
+ nhres.add_field(k, v)
156
+ end
150
157
  end
151
158
  nhres.body = emres.body if req.response_body_permitted? && nhresclass.body_permitted?
152
159
  nhres.instance_variable_set '@read', true
@@ -161,11 +168,15 @@ module Net
161
168
  nhresclass = Net::HTTPResponse.response_class(emres.code)
162
169
  nhres = nhresclass.new(emres.http_version, emres.code, emres.message)
163
170
  emres.to_hash.each do |k, v|
164
- nhres.add_field(k, v)
171
+ if v.is_a?(Array)
172
+ v.each {|e| nhres.add_field(k, e)}
173
+ else
174
+ nhres.add_field(k, v)
175
+ end
165
176
  end
166
177
  f.resume nhres
167
178
  }
168
- httpreq.errback {|err|f.resume(:error)}
179
+ httpreq.errback {|err|f.resume(err)}
169
180
 
170
181
  nhres = yield_with_error_check(t0)
171
182
  nhres.instance_variable_set :@httpreq, httpreq
@@ -174,7 +185,7 @@ module Net
174
185
  nhres
175
186
  else
176
187
  httpreq.callback &convert_em_http_response
177
- httpreq.errback {|err|f.resume(:error)}
188
+ httpreq.errback {|err|f.resume(err)}
178
189
 
179
190
  yield_with_error_check(t0)
180
191
  end
@@ -185,10 +196,7 @@ module Net
185
196
  def yield_with_error_check(t0)
186
197
  res = Fiber.yield
187
198
 
188
- if res == :error
189
- raise 'EM::HttpRequest error - request timed out' if Time.now - self.read_timeout > t0
190
- raise 'EM::HttpRequest error - unknown error'
191
- end
199
+ raise res.error if res.class == EM::HttpClient
192
200
 
193
201
  res
194
202
  end
@@ -1,94 +1,155 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'em-net-http'
4
+ require 'time'
5
+ require 'rspec'
6
+ require 'mimic'
2
7
 
3
8
  describe "em-net-http" do
9
+ around(:each) do |example|
10
+ Fiber.new do
11
+ example.run
12
+ end.resume
13
+ end
14
+
15
+ describe '' do
16
+ before(:all) do
17
+ Mimic.mimic do
18
+ Net::HTTPResponse::CODE_TO_OBJ.each do |code, klass|
19
+ get("/code/#{code}").returning("#{code} #{klass.name}", code.to_i, {})
20
+ end
4
21
 
5
- it 'should support streaming the response' do
6
- assert_identical(:streamed => true) {
7
- body = StringIO.new '', 'wb'
22
+ get('/hello').returning('Hello World!', 200, {'Content-Type'=>'text/plain'})
8
23
 
9
- Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
10
- http.request_get "/image" do |resp|
11
- resp.should be_a_kind_of(Net::HTTPOK)
12
- resp.read_body { |chunk| body.write chunk }
13
- resp
24
+ class BigImageResponse
25
+ def each
26
+ ::File.open('spec/image.jpg', "rb") { |file|
27
+ while part = file.read(8192)
28
+ yield part
29
+ end
30
+ }
31
+ end
14
32
  end
15
- end.tap do |resp|
16
- resp.instance_variable_set :@streamed_body, body.string
17
- end
18
- }
19
- end
33
+ resp = BigImageResponse.new
34
+ get('/image').returning(resp, 200, {"Content-Type" => 'image/jpeg'})
20
35
 
21
- it 'should support buffering the response' do
22
- assert_identical {
23
- Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
24
- respone = http.request_get "/image" do |resp|
25
- resp.should be_a_kind_of(Net::HTTPOK)
26
- resp.read_body # force reading the body before the test tears down the EM loop
27
- resp
36
+ post('/testpost') do
37
+ "You said #{request.body.read}."
28
38
  end
29
- respone.tap { respone.should be_a_kind_of(Net::HTTPOK) }
30
39
  end
31
- }
32
- end
40
+ end
41
+
42
+ it 'should support streaming the response' do
43
+ assert_identical(true) {
44
+ body = StringIO.new '', 'wb'
33
45
 
34
- describe 'should be compatible' do
35
- it 'for Net::HTTP.get()' do
36
- run_requests {Net::HTTP.get(URI.parse("http://localhost:#{Mimic::MIMIC_DEFAULT_PORT}/hello"))}
37
- @expected_res.should == @actual_res
46
+ Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
47
+ http.request_get "/image" do |resp|
48
+ resp.should be_a_kind_of(Net::HTTPOK)
49
+ resp.read_body { |chunk| body.write chunk }
50
+ resp
51
+ end
52
+ end.tap do |resp|
53
+ resp.instance_variable_set :@streamed_body, body.string
54
+ end
55
+ }
38
56
  end
39
57
 
40
- # it 'for Net::HTTP.get_print()' do
41
- # run_requests {Net::HTTP.get_print(URI.parse('http://localhost/hello'))}
42
- # @expected_res.should == @actual_res
43
- # end
58
+ it 'should support buffering the response' do
59
+ assert_identical {
60
+ Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
61
+ respone = http.request_get "/image" do |resp|
62
+ resp.should be_a_kind_of(Net::HTTPOK)
63
+ resp.read_body # force reading the body before the test tears down the EM loop
64
+ resp
65
+ end
66
+ respone.tap { respone.should be_a_kind_of(Net::HTTPOK) }
67
+ end
68
+ }
69
+ end
70
+
71
+ describe 'should be compatible' do
72
+ it 'with Net::HTTP.get()' do
73
+ run_requests {Net::HTTP.get(URI.parse("http://localhost:#{Mimic::MIMIC_DEFAULT_PORT}/hello"))}
74
+ @expected_res.should == @actual_res
75
+ end
44
76
 
45
- # We don't test responses like 100 Continue at the moment.
46
- %w(200 201 202 203 204 205 206 300 301 302 303 307 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505).each do |code|
47
- it "for Net::HTTP.start(host, port, &block) with response code #{code}" do
77
+ # it 'for Net::HTTP.get_print()' do
78
+ # run_requests {Net::HTTP.get_print(URI.parse('http://localhost/hello'))}
79
+ # @expected_res.should == @actual_res
80
+ # end
81
+
82
+ # We don't test responses like 100 Continue at the moment.
83
+ %w(200 201 202 203 204 205 206 300 301 302 303 307 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505).each do |code|
84
+ it "with Net::HTTP.start(host, port, &block) with response code #{code}" do
85
+ assert_identical {
86
+ Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
87
+ http.get("/code/#{code}").tap { |resp|
88
+ # Force the response to be buffered while we are still in the EM loop, since we shut it down EM before the verifications
89
+ resp.body
90
+ }
91
+ end
92
+ }
93
+ end
94
+
95
+ it "with Net::HTTP.new(host, port).start(&block) with response code #{code}" do
96
+ assert_identical {
97
+ h = Net::HTTP.new('localhost', Mimic::MIMIC_DEFAULT_PORT)
98
+ h.start do |http|
99
+ http.get("/code/#{code}")
100
+ end
101
+ }
102
+ end
103
+ end
104
+
105
+ it "with response code 304" do
48
106
  assert_identical {
49
107
  Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
50
- http.get("/code/#{code}").tap { |resp|
51
- # Force the response to be buffered while we are still in the EM loop, since we shut it down EM before the verifications
52
- resp.body
53
- }
108
+ req = Net::HTTP::Get.new('/code/304')
109
+ req['If-Modified-Since'] = Time.now.rfc2822
110
+ http.request(req)
54
111
  end
55
112
  }
113
+
56
114
  end
57
-
58
- it "for Net::HTTP.new(host, port).start(&block) with response code #{code}" do
115
+
116
+ it 'with post' do
59
117
  assert_identical {
60
- h = Net::HTTP.new('localhost', Mimic::MIMIC_DEFAULT_PORT)
61
- h.start do |http|
62
- http.get("/code/#{code}")
118
+ Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
119
+ req = Net::HTTP::Post.new('/testpost')
120
+ req.body = 'hello mimic'
121
+ http.request(req)
63
122
  end
64
123
  }
124
+
65
125
  end
126
+
66
127
  end
67
-
68
- it "with response code 304" do
69
- assert_identical {
70
- Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
71
- req = Net::HTTP::Get.new('/code/304')
72
- req['If-Modified-Since'] = Time.now.rfc2822
73
- http.request(req)
74
- end
75
- }
76
-
128
+
129
+
130
+
131
+ after(:all) do
132
+ Mimic.cleanup!
77
133
  end
78
-
79
- it 'with post' do
80
- assert_identical {
81
- Net::HTTP.start('localhost', Mimic::MIMIC_DEFAULT_PORT) do |http|
82
- req = Net::HTTP::Post.new('/testpost')
83
- req.body = 'hello mimic'
84
- http.request(req)
134
+
135
+ end
136
+
137
+ it 'should raise relevant exceptions' do
138
+ EM.run do
139
+ Fiber.new do
140
+ begin
141
+ Net::HTTP.start('localhost', 1) do |r|
142
+ r.get('/')
143
+ end
144
+ fail('expected exception to be raised')
145
+ rescue => expected
146
+ expected.class.should == Errno::ECONNREFUSED
147
+ EM.stop_event_loop
85
148
  end
86
- }
87
-
149
+ end.resume
88
150
  end
89
-
90
151
  end
91
-
152
+
92
153
  def run_requests(&block)
93
154
  @expected_res = yield
94
155
  EM.run do
@@ -100,23 +161,23 @@ describe "em-net-http" do
100
161
  end
101
162
  end
102
163
  end
103
-
164
+
104
165
  def assert_identical(streamed=false, &block)
105
166
  run_requests(&block)
106
167
  @actual_res.should be_a_kind_of(Net::HTTPResponse)
107
- @actual_res.should match_response(@expected_res, :streamed => streamed)
168
+ @actual_res.should match_response(@expected_res, streamed)
108
169
  end
109
-
170
+
110
171
  def match_response(expected, streamed=false)
111
172
  ResponseMatcher.new(expected, streamed)
112
173
  end
113
-
174
+
114
175
  class ResponseMatcher
115
176
  def initialize(expected, streamed=false)
116
177
  @expected = expected
117
178
  @streamed = streamed
118
179
  end
119
-
180
+
120
181
  def matches?(actual)
121
182
  # Dates could differ slightly :(
122
183
  expected_date = Time.parse(@expected.delete('date').join)
@@ -136,6 +197,6 @@ describe "em-net-http" do
136
197
  end
137
198
  true
138
199
  end
139
-
200
+
140
201
  end
141
202
  end
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-net-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fairbairn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-28 00:00:00.000000000 Z
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: eventmachine
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.12.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.12.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: addressable
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: em-http-request
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.2.10
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.2.10
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '2.5'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.5'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: mimic
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.3.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.3.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: weary
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: Monkeypatching Net::HTTP to use em-http-request under the hood.
@@ -116,7 +116,7 @@ extra_rdoc_files:
116
116
  - LICENSE
117
117
  - README.md
118
118
  files:
119
- - .document
119
+ - ".document"
120
120
  - Gemfile
121
121
  - LICENSE
122
122
  - README.md
@@ -130,7 +130,6 @@ files:
130
130
  - spec/em-net-http_spec.rb
131
131
  - spec/image.jpg
132
132
  - spec/spec.opts
133
- - spec/spec_helper.rb
134
133
  homepage: http://github.com/jfairbairn/em-net-http
135
134
  licenses: []
136
135
  metadata: {}
@@ -140,18 +139,19 @@ require_paths:
140
139
  - lib
141
140
  required_ruby_version: !ruby/object:Gem::Requirement
142
141
  requirements:
143
- - - '>='
142
+ - - ">="
144
143
  - !ruby/object:Gem::Version
145
144
  version: '0'
146
145
  required_rubygems_version: !ruby/object:Gem::Requirement
147
146
  requirements:
148
- - - '>='
147
+ - - ">="
149
148
  - !ruby/object:Gem::Version
150
149
  version: '0'
151
150
  requirements: []
152
151
  rubyforge_project:
153
- rubygems_version: 2.0.3
152
+ rubygems_version: 2.4.5.1
154
153
  signing_key:
155
154
  specification_version: 4
156
155
  summary: Non-blocking replacement for Net::HTTP, for use in EventMachine
157
156
  test_files: []
157
+ has_rdoc:
@@ -1,39 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'em-net-http'
4
- require 'time'
5
- require 'rspec'
6
-
7
- require 'mimic'
8
-
9
- RSpec.configure do |config|
10
- config.before(:all) do
11
- Mimic.mimic do
12
- Net::HTTPResponse::CODE_TO_OBJ.each do |code, klass|
13
- get("/code/#{code}").returning("#{code} #{klass.name}", code.to_i, {})
14
- end
15
-
16
- get('/hello').returning('Hello World!', 200, {'Content-Type'=>'text/plain'})
17
-
18
- class BigImageResponse
19
- def each
20
- ::File.open('spec/image.jpg', "rb") { |file|
21
- while part = file.read(8192)
22
- yield part
23
- end
24
- }
25
- end
26
- end
27
- resp = BigImageResponse.new
28
- get('/image').returning(resp, 200, {"Content-Type" => 'image/jpeg'})
29
-
30
- post('/testpost') do
31
- "You said #{request.body.read}."
32
- end
33
- end
34
- end
35
-
36
- config.after(:all) do
37
- Mimic.cleanup!
38
- end
39
- end