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

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.
@@ -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