typhoeus 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ 0.2.4
2
+ -----
3
+ * Fix form POSTs to only use multipart for file uploads, otherwise use application/x-www-form-urlencoded [dbalatero]
4
+
1
5
  0.2.3
2
6
  -----
3
7
  * Code duplication in Typhoeus::Form led to nested URL param errors on POST only. Fixed [dbalatero]
data/README.textile CHANGED
@@ -59,6 +59,11 @@ request = Typhoeus::Request.new("http://www.pauldix.net",
59
59
  # the options are all optional. The default for :method is :get. Timeout is measured in milliseconds.
60
60
  # cache_timeout is measured in seconds.
61
61
 
62
+ # Run the request via Hydra.
63
+ hydra = Typhoeus::Hydra.new
64
+ hydra.queue(request)
65
+ hydra.run
66
+
62
67
  # the response object will be set after the request is run
63
68
  response = request.response
64
69
  response.code # http status code
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
data/lib/typhoeus/easy.rb CHANGED
@@ -226,7 +226,11 @@ module Typhoeus
226
226
 
227
227
  if method == :post
228
228
  @form.process!
229
- set_option(OPTION_VALUES[:CURLOPT_HTTPPOST], @form)
229
+ if @form.multipart?
230
+ set_option(OPTION_VALUES[:CURLOPT_HTTPPOST], @form)
231
+ else
232
+ self.post_data = @form.to_s
233
+ end
230
234
  else
231
235
  self.url = "#{url}?#{@form.to_s}"
232
236
  end
data/lib/typhoeus/form.rb CHANGED
@@ -21,6 +21,10 @@ module Typhoeus
21
21
  traversal[:files].each { |file_args| formadd_file(*file_args) }
22
22
  end
23
23
 
24
+ def multipart?
25
+ !traversal[:files].empty?
26
+ end
27
+
24
28
  def to_s
25
29
  Typhoeus::Utils.traversal_to_param_string(traversal, false)
26
30
  end
data/spec/servers/app.rb CHANGED
@@ -10,7 +10,8 @@ post '/file' do
10
10
  {
11
11
  'content-type' => params[:file][:type],
12
12
  'filename' => params[:file][:filename],
13
- 'content' => params[:file][:tempfile].read
13
+ 'content' => params[:file][:tempfile].read,
14
+ 'request-content-type' => request.env['CONTENT_TYPE']
14
15
  }.to_json
15
16
  end
16
17
 
@@ -244,21 +244,39 @@ describe Typhoeus::Easy do
244
244
  easy.params = {:foo => "bar"}
245
245
  easy.perform
246
246
  easy.response_code.should == 200
247
- easy.response_body.should include("name=\\\"foo\\\"\\r\\n\\r\\nbar")
247
+ easy.response_body.should =~ /foo=bar/
248
248
  end
249
249
 
250
- it "should handle a file upload" do
250
+ it "should use Content-Type: application/x-www-form-urlencoded for normal posts" do
251
+ easy = Typhoeus::Easy.new
252
+ easy.url = "http://localhost:3002/normal_post"
253
+ easy.method = :post
254
+ easy.params = { :a => 'b', :c => 'd',
255
+ :e => { :f => { :g => 'h' } } }
256
+ easy.perform
257
+
258
+ request = JSON.parse(easy.response_body)
259
+ request['CONTENT_TYPE'].should == 'application/x-www-form-urlencoded'
260
+ request['rack.request.form_vars'].should == 'a=b&c=d&e%5Bf%5D%5Bg%5D=h'
261
+ end
262
+
263
+ it "should handle a file upload, as multipart" do
251
264
  easy = Typhoeus::Easy.new
252
265
  easy.url = "http://localhost:3002/file"
253
266
  easy.method = :post
254
267
  easy.params = {:file => File.open(File.expand_path(File.dirname(__FILE__) + "/../fixtures/placeholder.txt"), "r")}
255
268
  easy.perform
256
269
  easy.response_code.should == 200
257
- JSON.parse(easy.response_body).should == {
258
- 'content-type' => 'text/plain',
270
+ result = JSON.parse(easy.response_body)
271
+
272
+ { 'content-type' => 'text/plain',
259
273
  'filename' => 'placeholder.txt',
260
274
  'content' => 'This file is used to test uploading.'
261
- }
275
+ }.each do |key, val|
276
+ result[key].should == val
277
+ end
278
+
279
+ result['request-content-type'].should =~ /multipart/
262
280
  end
263
281
  end
264
282
 
data/typhoeus.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{typhoeus}
8
- s.version = "0.2.3"
8
+ s.version = "0.2.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Paul Dix", "David Balatero"]
12
- s.date = %q{2011-02-19}
12
+ s.date = %q{2011-02-24}
13
13
  s.description = %q{Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.}
14
14
  s.email = %q{dbalatero@gmail.com}
15
15
  s.extensions = ["ext/typhoeus/extconf.rb"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typhoeus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Paul Dix
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-02-19 00:00:00 -08:00
19
+ date: 2011-02-24 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency