rack-client 0.3.1.pre.h → 0.3.1.pre.i

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,19 +15,26 @@ module Rack
15
15
  def sync_call(env)
16
16
  request = Rack::Request.new(env)
17
17
 
18
- net_response = connection_for(request).request(net_request_for(request), body_for(request))
18
+ net_connection, net_request = net_connection_for(request), net_request_for(request)
19
+
20
+ if streaming_body?(request)
21
+ net_response = net_connection.request(net_request)
22
+ else
23
+ net_response = net_connection.request(net_request, body_for(request))
24
+ end
25
+
19
26
  parse(net_response).finish
20
27
  end
21
28
 
22
29
  def async_call(env)
23
30
  request = Rack::Request.new(env)
24
31
 
25
- connection_for(request).request(net_request_for(request), body_for(request)) do |net_response|
32
+ net_connection_for(request).request(net_request_for(request), body_for(request)) do |net_response|
26
33
  yield parse_stream(net_response).finish
27
34
  end
28
35
  end
29
36
 
30
- def connection_for(request)
37
+ def net_connection_for(request)
31
38
  connection = Net::HTTP.new(request.host, request.port)
32
39
 
33
40
  if request.scheme == 'https'
@@ -48,7 +55,11 @@ module Rack
48
55
  when 'PUT' then Net::HTTP::Put
49
56
  end
50
57
 
51
- klass.new(request.fullpath, Headers.from(request.env).to_http)
58
+ net_request = klass.new(request.fullpath, Headers.from(request.env).to_http)
59
+
60
+ net_request.body_stream = request.body if streaming_body?(request)
61
+
62
+ net_request
52
63
  end
53
64
 
54
65
  def body_for(request)
@@ -60,6 +71,18 @@ module Rack
60
71
  end
61
72
  end
62
73
 
74
+ def streaming_body?(request)
75
+ request.request_method == 'POST' &&
76
+ required_streaming_headers?(request) &&
77
+ request.body.is_a?(IO) &&
78
+ !request.body.is_a?(StringIO)
79
+ end
80
+
81
+ def required_streaming_headers?(request)
82
+ request.env.keys.include?('HTTP_CONTENT_LENGTH') ||
83
+ request.env['HTTP_TRANSFER_ENCODING'] == 'chunked'
84
+ end
85
+
63
86
  def parse(net_response)
64
87
  body = (net_response.body.nil? || net_response.body.empty?) ? [] : StringIO.new(net_response.body)
65
88
  Response.new(net_response.code.to_i, parse_headers(net_response), body)
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Client
3
- VERSION = "0.3.1.pre.h"
3
+ VERSION = "0.3.1.pre.i"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1923832059
4
+ hash: 1923832060
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 1
10
10
  - pre
11
- - h
12
- version: 0.3.1.pre.h
11
+ - i
12
+ version: 0.3.1.pre.i
13
13
  platform: ruby
14
14
  authors:
15
15
  - Tim Carey-Smith
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-04-20 00:00:00 -07:00
20
+ date: 2011-04-28 00:00:00 -07:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -105,59 +105,59 @@ files:
105
105
  - LICENSE
106
106
  - README.textile
107
107
  - Rakefile
108
- - lib/rack/client.rb
109
- - lib/rack/client/middleware/cache.rb
110
- - lib/rack/client/middleware/follow_redirects.rb
108
+ - lib/rack/client/adapter/base.rb
109
+ - lib/rack/client/adapter/simple.rb
110
+ - lib/rack/client/adapter.rb
111
+ - lib/rack/client/body.rb
112
+ - lib/rack/client/core/dual_band.rb
113
+ - lib/rack/client/core/headers.rb
114
+ - lib/rack/client/core/response.rb
115
+ - lib/rack/client/core.rb
116
+ - lib/rack/client/handler/em-http.rb
117
+ - lib/rack/client/handler/excon.rb
118
+ - lib/rack/client/handler/net_http.rb
119
+ - lib/rack/client/handler/typhoeus.rb
120
+ - lib/rack/client/handler.rb
121
+ - lib/rack/client/middleware/auth/abstract/challenge.rb
122
+ - lib/rack/client/middleware/auth/basic.rb
123
+ - lib/rack/client/middleware/auth/digest/challenge.rb
124
+ - lib/rack/client/middleware/auth/digest/md5.rb
125
+ - lib/rack/client/middleware/auth/digest/params.rb
126
+ - lib/rack/client/middleware/auth.rb
111
127
  - lib/rack/client/middleware/cache/cachecontrol.rb
112
- - lib/rack/client/middleware/cache/options.rb
113
- - lib/rack/client/middleware/cache/response.rb
114
- - lib/rack/client/middleware/cache/request.rb
115
- - lib/rack/client/middleware/cache/metastore.rb
116
128
  - lib/rack/client/middleware/cache/context.rb
117
129
  - lib/rack/client/middleware/cache/entitystore.rb
118
- - lib/rack/client/middleware/cache/storage.rb
119
130
  - lib/rack/client/middleware/cache/key.rb
131
+ - lib/rack/client/middleware/cache/metastore.rb
132
+ - lib/rack/client/middleware/cache/options.rb
133
+ - lib/rack/client/middleware/cache/request.rb
134
+ - lib/rack/client/middleware/cache/response.rb
135
+ - lib/rack/client/middleware/cache/storage.rb
136
+ - lib/rack/client/middleware/cache.rb
137
+ - lib/rack/client/middleware/cookie_jar/context.rb
138
+ - lib/rack/client/middleware/cookie_jar/cookie.rb
139
+ - lib/rack/client/middleware/cookie_jar/cookiestore.rb
120
140
  - lib/rack/client/middleware/cookie_jar/options.rb
121
- - lib/rack/client/middleware/cookie_jar/response.rb
122
141
  - lib/rack/client/middleware/cookie_jar/request.rb
123
- - lib/rack/client/middleware/cookie_jar/context.rb
142
+ - lib/rack/client/middleware/cookie_jar/response.rb
124
143
  - lib/rack/client/middleware/cookie_jar/storage.rb
125
- - lib/rack/client/middleware/cookie_jar/cookiestore.rb
126
- - lib/rack/client/middleware/cookie_jar/cookie.rb
127
- - lib/rack/client/middleware/auth.rb
128
144
  - lib/rack/client/middleware/cookie_jar.rb
129
- - lib/rack/client/middleware/auth/basic.rb
130
- - lib/rack/client/middleware/auth/digest/params.rb
131
- - lib/rack/client/middleware/auth/digest/challenge.rb
132
- - lib/rack/client/middleware/auth/digest/md5.rb
133
- - lib/rack/client/middleware/auth/abstract/challenge.rb
134
- - lib/rack/client/body.rb
135
- - lib/rack/client/version.rb
145
+ - lib/rack/client/middleware/follow_redirects.rb
136
146
  - lib/rack/client/middleware.rb
137
147
  - lib/rack/client/parser/base.rb
148
+ - lib/rack/client/parser/body_collection.rb
149
+ - lib/rack/client/parser/context.rb
138
150
  - lib/rack/client/parser/json.rb
139
- - lib/rack/client/parser/response.rb
140
- - lib/rack/client/parser/request.rb
141
151
  - lib/rack/client/parser/middleware.rb
142
- - lib/rack/client/parser/context.rb
152
+ - lib/rack/client/parser/request.rb
153
+ - lib/rack/client/parser/response.rb
143
154
  - lib/rack/client/parser/yaml.rb
144
- - lib/rack/client/parser/body_collection.rb
145
- - lib/rack/client/core.rb
146
- - lib/rack/client/adapter/base.rb
147
- - lib/rack/client/adapter/simple.rb
148
155
  - lib/rack/client/parser.rb
149
- - lib/rack/client/handler/em-http.rb
150
- - lib/rack/client/handler/typhoeus.rb
151
- - lib/rack/client/handler/net_http.rb
152
- - lib/rack/client/handler/excon.rb
153
- - lib/rack/client/adapter.rb
154
- - lib/rack/client/core/headers.rb
155
- - lib/rack/client/core/response.rb
156
- - lib/rack/client/core/dual_band.rb
157
- - lib/rack/client/handler.rb
156
+ - lib/rack/client/version.rb
157
+ - lib/rack/client.rb
158
158
  - demo/client.rb
159
- - demo/demo_spec.rb
160
159
  - demo/demo.rb
160
+ - demo/demo_spec.rb
161
161
  has_rdoc: true
162
162
  homepage: http://github.com/halorgium/rack-client
163
163
  licenses: []
@@ -190,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
190
  requirements: []
191
191
 
192
192
  rubyforge_project:
193
- rubygems_version: 1.6.0
193
+ rubygems_version: 1.6.2
194
194
  signing_key:
195
195
  specification_version: 3
196
196
  summary: A client wrapper around a Rack app or HTTP