typhoeus 0.3.3 → 0.4.0

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.
Files changed (59) hide show
  1. data/{CHANGELOG.markdown → CHANGELOG.md} +21 -12
  2. data/LICENSE +2 -0
  3. data/README.md +455 -0
  4. data/Rakefile +6 -26
  5. data/lib/typhoeus.rb +4 -6
  6. data/lib/typhoeus/curl.rb +453 -0
  7. data/lib/typhoeus/easy.rb +60 -358
  8. data/lib/typhoeus/easy/auth.rb +14 -0
  9. data/lib/typhoeus/easy/callbacks.rb +33 -0
  10. data/lib/typhoeus/easy/ffi_helper.rb +61 -0
  11. data/lib/typhoeus/easy/infos.rb +90 -0
  12. data/lib/typhoeus/easy/options.rb +115 -0
  13. data/lib/typhoeus/easy/proxy.rb +20 -0
  14. data/lib/typhoeus/easy/ssl.rb +82 -0
  15. data/lib/typhoeus/form.rb +30 -1
  16. data/lib/typhoeus/{normalized_header_hash.rb → header.rb} +2 -6
  17. data/lib/typhoeus/hydra.rb +9 -12
  18. data/lib/typhoeus/hydra_mock.rb +2 -2
  19. data/lib/typhoeus/multi.rb +118 -9
  20. data/lib/typhoeus/param_processor.rb +43 -0
  21. data/lib/typhoeus/request.rb +18 -21
  22. data/lib/typhoeus/response.rb +5 -4
  23. data/lib/typhoeus/utils.rb +14 -27
  24. data/lib/typhoeus/version.rb +1 -1
  25. metadata +155 -152
  26. data/Gemfile.lock +0 -37
  27. data/ext/typhoeus/.gitignore +0 -7
  28. data/ext/typhoeus/extconf.rb +0 -65
  29. data/ext/typhoeus/native.c +0 -12
  30. data/ext/typhoeus/native.h +0 -22
  31. data/ext/typhoeus/typhoeus_easy.c +0 -232
  32. data/ext/typhoeus/typhoeus_easy.h +0 -20
  33. data/ext/typhoeus/typhoeus_form.c +0 -59
  34. data/ext/typhoeus/typhoeus_form.h +0 -13
  35. data/ext/typhoeus/typhoeus_multi.c +0 -217
  36. data/ext/typhoeus/typhoeus_multi.h +0 -16
  37. data/lib/typhoeus/.gitignore +0 -1
  38. data/lib/typhoeus/service.rb +0 -20
  39. data/spec/fixtures/placeholder.gif +0 -0
  40. data/spec/fixtures/placeholder.txt +0 -1
  41. data/spec/fixtures/placeholder.ukn +0 -0
  42. data/spec/fixtures/result_set.xml +0 -60
  43. data/spec/servers/app.rb +0 -97
  44. data/spec/spec_helper.rb +0 -19
  45. data/spec/support/typhoeus_localhost_server.rb +0 -58
  46. data/spec/typhoeus/easy_spec.rb +0 -391
  47. data/spec/typhoeus/filter_spec.rb +0 -35
  48. data/spec/typhoeus/form_spec.rb +0 -117
  49. data/spec/typhoeus/hydra_mock_spec.rb +0 -300
  50. data/spec/typhoeus/hydra_spec.rb +0 -602
  51. data/spec/typhoeus/multi_spec.rb +0 -74
  52. data/spec/typhoeus/normalized_header_hash_spec.rb +0 -41
  53. data/spec/typhoeus/remote_method_spec.rb +0 -141
  54. data/spec/typhoeus/remote_proxy_object_spec.rb +0 -65
  55. data/spec/typhoeus/remote_spec.rb +0 -695
  56. data/spec/typhoeus/request_spec.rb +0 -387
  57. data/spec/typhoeus/response_spec.rb +0 -192
  58. data/spec/typhoeus/utils_spec.rb +0 -22
  59. data/typhoeus.gemspec +0 -33
@@ -1,16 +0,0 @@
1
- #ifndef TYPHOEUS_MULTI
2
- #define TYPHOEUS_MULTI
3
-
4
- #include <native.h>
5
- #include <typhoeus_easy.h>
6
-
7
- VALUE cTyphoeusMulti;
8
- typedef struct {
9
- int running;
10
- int active;
11
- CURLM *multi;
12
- } CurlMulti;
13
-
14
- void init_typhoeus_multi();
15
-
16
- #endif
@@ -1 +0,0 @@
1
- native.bundle
@@ -1,20 +0,0 @@
1
- module Typhoeus
2
- class Service
3
- def initialize(host, port)
4
- @host = host
5
- @port = port
6
- end
7
-
8
- def get(resource, params)
9
- end
10
-
11
- def put(resource, params)
12
- end
13
-
14
- def post(resource, params)
15
- end
16
-
17
- def delete(resource, params)
18
- end
19
- end
20
- end
Binary file
@@ -1 +0,0 @@
1
- This file is used to test uploading.
File without changes
@@ -1,60 +0,0 @@
1
- <result_set>
2
- <ttl>20</ttl>
3
- <result>
4
- <id>1</id>
5
- <name>hello</name>
6
- <description>
7
- this is a long description for a text field of some kind.
8
- this is a long description for a text field of some kind.
9
- this is a long description for a text field of some kind.
10
- this is a long description for a text field of some kind.
11
- this is a long description for a text field of some kind.
12
- this is a long description for a text field of some kind.
13
- this is a long description for a text field of some kind.
14
- this is a long description for a text field of some kind.
15
- this is a long description for a text field of some kind.
16
- this is a long description for a text field of some kind.
17
- this is a long description for a text field of some kind.
18
- this is a long description for a text field of some kind.
19
- this is a long description for a text field of some kind.
20
- </description>
21
- </result>
22
- <result>
23
- <id>2</id>
24
- <name>hello</name>
25
- <description>
26
- this is a long description for a text field of some kind.
27
- this is a long description for a text field of some kind.
28
- this is a long description for a text field of some kind.
29
- this is a long description for a text field of some kind.
30
- this is a long description for a text field of some kind.
31
- this is a long description for a text field of some kind.
32
- this is a long description for a text field of some kind.
33
- this is a long description for a text field of some kind.
34
- this is a long description for a text field of some kind.
35
- this is a long description for a text field of some kind.
36
- this is a long description for a text field of some kind.
37
- this is a long description for a text field of some kind.
38
- this is a long description for a text field of some kind.
39
- </description>
40
- </result>
41
- <result>
42
- <id>3</id>
43
- <name>hello</name>
44
- <description>
45
- this is a long description for a text field of some kind.
46
- this is a long description for a text field of some kind.
47
- this is a long description for a text field of some kind.
48
- this is a long description for a text field of some kind.
49
- this is a long description for a text field of some kind.
50
- this is a long description for a text field of some kind.
51
- this is a long description for a text field of some kind.
52
- this is a long description for a text field of some kind.
53
- this is a long description for a text field of some kind.
54
- this is a long description for a text field of some kind.
55
- this is a long description for a text field of some kind.
56
- this is a long description for a text field of some kind.
57
- this is a long description for a text field of some kind.
58
- </description>
59
- </result>
60
- </result_set>
data/spec/servers/app.rb DELETED
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'sinatra'
4
- require 'json'
5
- require 'zlib'
6
-
7
- set :logging, false
8
-
9
- @@fail_count = 0
10
-
11
- post '/file' do
12
- {
13
- 'content-type' => params[:file][:type],
14
- 'filename' => params[:file][:filename],
15
- 'content' => params[:file][:tempfile].read,
16
- 'request-content-type' => request.env['CONTENT_TYPE']
17
- }.to_json
18
- end
19
-
20
- get '/multiple-headers' do
21
- [200, { 'Set-Cookie' => %w[ foo bar ], 'Content-Type' => 'text/plain' }, ['']]
22
- end
23
-
24
- get '/fail/:number' do
25
- if @@fail_count >= params[:number].to_i
26
- "ok"
27
- else
28
- @@fail_count += 1
29
- error 500, "oh noes!"
30
- end
31
- end
32
-
33
- get '/fail_forever' do
34
- error 500, "oh noes!"
35
- end
36
-
37
- get '/redirect' do
38
- redirect '/'
39
- end
40
-
41
- get '/bad_redirect' do
42
- redirect '/bad_redirect'
43
- end
44
-
45
- get '/auth_basic/:username/:password' do
46
- @auth ||= Rack::Auth::Basic::Request.new(request.env)
47
- # Check that we've got a basic auth, and that it's credentials match the ones
48
- # provided in the request
49
- if @auth.provided? && @auth.basic? && @auth.credentials == [ params[:username], params[:password] ]
50
- # auth is valid - confirm it
51
- true
52
- else
53
- # invalid auth - request the authentication
54
- response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth")
55
- throw(:halt, [401, "Not authorized\n"])
56
- end
57
- end
58
-
59
- get '/auth_ntlm' do
60
- # we're just checking for the existence if NTLM auth header here. It's validation
61
- # is too troublesome and really doesn't bother is much, it's up to libcurl to make
62
- # it valid
63
- response['WWW-Authenticate'] = 'NTLM'
64
- is_ntlm_auth = /^NTLM/ =~ request.env['HTTP_AUTHORIZATION']
65
- true if is_ntlm_auth
66
- throw(:halt, [401, "Not authorized\n"]) if !is_ntlm_auth
67
- end
68
-
69
- get '/gzipped' do
70
- req_env = request.env.to_json
71
- z = Zlib::Deflate.new
72
- gzipped_env = z.deflate(req_env, Zlib::FINISH)
73
- z.close
74
- response['Content-Encoding'] = 'gzip'
75
- gzipped_env
76
- end
77
-
78
- get '/**' do
79
- sleep params["delay"].to_i if params.has_key?("delay")
80
- request.env.merge!(:body => request.body.read).to_json
81
- end
82
-
83
- head '/**' do
84
- sleep params["delay"].to_i if params.has_key?("delay")
85
- end
86
-
87
- put '/**' do
88
- request.env.merge!(:body => request.body.read).to_json
89
- end
90
-
91
- post '/**' do
92
- request.env.merge!(:body => request.body.read).to_json
93
- end
94
-
95
- delete '/**' do
96
- request.env.merge!(:body => request.body.read).to_json
97
- end
data/spec/spec_helper.rb DELETED
@@ -1,19 +0,0 @@
1
- require "rubygems"
2
- require 'json'
3
- require "rspec"
4
-
5
- # gem install redgreen for colored test output
6
- begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
7
-
8
- path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
9
- $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
10
-
11
- require path + '/typhoeus'
12
-
13
- Dir['./spec/support/**/*.rb'].each { |f| require f }
14
-
15
- RSpec.configure do |config|
16
- config.before(:suite) do
17
- TyphoeusLocalhostServer.start_servers!
18
- end
19
- end
@@ -1,58 +0,0 @@
1
- require 'net/http'
2
- require 'uri'
3
-
4
- class TyphoeusLocalhostServer
5
- class << self
6
- attr_accessor :pid
7
-
8
- def start_servers!
9
- if self.pid = fork
10
- start_parent
11
- wait_for_servers_to_start
12
- else
13
- start_child
14
- end
15
- end
16
-
17
- private
18
-
19
- def start_parent
20
- # Cleanup.
21
- at_exit do
22
- Process.kill('QUIT', self.pid) if self.pid
23
- end
24
- end
25
-
26
- def start_child
27
- exec('rake', 'start_test_servers')
28
- end
29
-
30
- def wait_for_servers_to_start
31
- puts "Waiting for servers to start..."
32
- ports = [3000, 3001, 3002]
33
-
34
- Timeout::timeout(10) do
35
- loop do
36
- up = 0
37
- ports.each do |port|
38
- url = "http://localhost:#{port}/"
39
- begin
40
- response = Net::HTTP.get_response(URI.parse(url))
41
- if response.is_a?(Net::HTTPSuccess)
42
- up += 1
43
- end
44
- rescue SystemCallError => error
45
- end
46
- end
47
-
48
- if up == ports.size
49
- puts "Servers are up!"
50
- break
51
- end
52
- end
53
- end
54
- rescue Timeout::Error => error
55
- abort "Servers never started!"
56
- end
57
- end
58
- end
@@ -1,391 +0,0 @@
1
- # encoding: UTF-8
2
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
-
4
- if defined?(Encoding)
5
- Encoding.default_internal = 'utf-8'
6
- Encoding.default_external = 'utf-8'
7
- end
8
-
9
- describe Typhoeus::Easy do
10
- describe "ssl_version" do
11
- before(:each) do
12
- @easy = Typhoeus::Easy.new
13
- @easy.url = "http://localhost:3000"
14
- @easy.method = :get
15
- end
16
-
17
- it "should allow to set the SSL version to be used" do
18
- Typhoeus::Easy::SSL_VERSIONS.each do |k, v|
19
- @easy.ssl_version = k
20
- @easy.perform
21
- @easy.response_code.should == 200
22
- @easy.ssl_version.should == k
23
- end
24
- end
25
-
26
- it "complains when an incorrect SSL version is used" do
27
- expect { @easy.ssl_version = 'bogus' }.to raise_error
28
- end
29
-
30
- it "uses the default SSL version if nothing is supplied" do
31
- @easy.ssl_version.should == :default
32
- end
33
- end
34
-
35
- describe "#supports_zlib" do
36
- before(:each) do
37
- @easy = Typhoeus::Easy.new
38
- end
39
-
40
- it "should return true if the version string has zlib" do
41
- @easy.stub!(:curl_version).and_return("libcurl/7.20.0 OpenSSL/0.9.8l zlib/1.2.3 libidn/1.16")
42
- @easy.supports_zlib?.should be_true
43
- end
44
-
45
- it "should return false if the version string doesn't have zlib" do
46
- @easy.stub!(:curl_version).and_return("libcurl/7.20.0 OpenSSL/0.9.8l libidn/1.16")
47
- @easy.supports_zlib?.should be_false
48
- end
49
- end
50
-
51
- describe "curl errors" do
52
- it "should provide the CURLE_OPERATION_TIMEDOUT return code when a request times out" do
53
- e = Typhoeus::Easy.new
54
- e.url = "http://localhost:3001/?delay=1"
55
- e.method = :get
56
- e.timeout = 100
57
- e.perform
58
- e.curl_return_code.should == 28
59
- e.curl_error_message.should == "Timeout was reached"
60
- e.response_code.should == 0
61
- end
62
-
63
- it "should provide the CURLE_COULDNT_CONNECT return code when trying to connect to a non existent port" do
64
- e = Typhoeus::Easy.new
65
- e.url = "http://localhost:3999"
66
- e.method = :get
67
- e.connect_timeout = 100
68
- e.perform
69
- e.curl_return_code.should == 7
70
- e.curl_error_message.should == "Couldn't connect to server"
71
- e.response_code.should == 0
72
- end
73
-
74
- it "should not return an error message on a successful easy operation" do
75
- easy = Typhoeus::Easy.new
76
- easy.url = "http://localhost:3002"
77
- easy.method = :get
78
- easy.curl_error_message.should == nil
79
- easy.perform
80
- easy.response_code.should == 200
81
- easy.curl_return_code.should == 0
82
- easy.curl_error_message.should == "No error"
83
- end
84
-
85
- end
86
-
87
- describe "options" do
88
- it "should not follow redirects if not instructed to" do
89
- e = Typhoeus::Easy.new
90
- e.url = "http://localhost:3001/redirect"
91
- e.method = :get
92
- e.perform
93
- e.response_code.should == 302
94
- end
95
-
96
- it "should allow for following redirects" do
97
- e = Typhoeus::Easy.new
98
- e.url = "http://localhost:3001/redirect"
99
- e.method = :get
100
- e.follow_location = true
101
- e.perform
102
- e.response_code.should == 200
103
- JSON.parse(e.response_body)["REQUEST_METHOD"].should == "GET"
104
- end
105
-
106
- it "should allow you to set the user agent" do
107
- e = Typhoeus::Easy.new
108
- e.url = "http://localhost:3002"
109
- e.method = :get
110
- e.headers['User-Agent'] = 'myapp'
111
- e.perform
112
- e.response_code.should == 200
113
- JSON.parse(e.response_body)["HTTP_USER_AGENT"].should == "myapp"
114
- end
115
-
116
- it "should provide a timeout in milliseconds" do
117
- e = Typhoeus::Easy.new
118
- e.url = "http://localhost:3001/?delay=1"
119
- e.method = :get
120
- e.timeout = 10
121
- e.perform
122
- e.timed_out?.should == true
123
- end
124
-
125
- it "should allow the setting of the max redirects to follow" do
126
- e = Typhoeus::Easy.new
127
- e.url = "http://localhost:3001/redirect"
128
- e.method = :get
129
- e.follow_location = true
130
- e.max_redirects = 5
131
- e.perform
132
- e.response_code.should == 200
133
- end
134
-
135
- it "should handle our bad redirect action, provided we've set max_redirects properly" do
136
- e = Typhoeus::Easy.new
137
- e.url = "http://localhost:3001/bad_redirect"
138
- e.method = :get
139
- e.follow_location = true
140
- e.max_redirects = 5
141
- e.perform
142
- e.response_code.should == 302
143
- end
144
-
145
- it "should provide the primary IP address that was used to perform the HTTP request" do
146
- e = Typhoeus::Easy.new
147
- e.url = "http://localhost:3002"
148
- e.method = :get
149
- e.perform
150
- e.response_code.should == 200
151
- e.primary_ip.should == "127.0.0.1"
152
- end
153
- end
154
-
155
- describe "authentication" do
156
- it "should allow to set username and password" do
157
- e = Typhoeus::Easy.new
158
- username, password = 'foo', 'bar'
159
- e.auth = { :username => username, :password => password }
160
- e.url = "http://localhost:3001/auth_basic/#{username}/#{password}"
161
- e.method = :get
162
- e.perform
163
- e.response_code.should == 200
164
- end
165
-
166
- it "should allow to query auth methods support by the server" do
167
- e = Typhoeus::Easy.new
168
- e.url = "http://localhost:3001/auth_basic/foo/bar"
169
- e.method = :get
170
- e.perform
171
- e.auth_methods.should == Typhoeus::Easy::AUTH_TYPES[:CURLAUTH_BASIC]
172
- end
173
-
174
- it "should allow to set authentication method" do
175
- e = Typhoeus::Easy.new
176
- e.auth = { :username => 'username', :password => 'password', :method => Typhoeus::Easy::AUTH_TYPES[:CURLAUTH_NTLM] }
177
- e.url = "http://localhost:3001/auth_ntlm"
178
- e.method = :get
179
- e.perform
180
- e.response_code.should == 200
181
- end
182
- end
183
-
184
- describe "get" do
185
- it "should perform a get" do
186
- easy = Typhoeus::Easy.new
187
- easy.url = "http://localhost:3002"
188
- easy.method = :get
189
- easy.perform
190
- easy.response_code.should == 200
191
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "GET"
192
- end
193
- end
194
-
195
- describe "purge" do
196
- it "should set custom request to purge" do
197
- easy = Typhoeus::Easy.new
198
- easy.should_receive(:set_option).with(Typhoeus::Easy::OPTION_VALUES[:CURLOPT_CUSTOMREQUEST], "PURGE").once
199
- easy.method = :purge
200
- end
201
- end
202
-
203
- describe "head" do
204
- it "should perform a head" do
205
- easy = Typhoeus::Easy.new
206
- easy.url = "http://localhost:3002"
207
- easy.method = :head
208
- easy.perform
209
- easy.response_code.should == 200
210
- end
211
- end
212
-
213
- describe "start_time" do
214
- it "should be get/settable" do
215
- time = Time.now
216
- easy = Typhoeus::Easy.new
217
- easy.start_time.should be_nil
218
- easy.start_time = time
219
- easy.start_time.should == time
220
- end
221
- end
222
-
223
- describe "params=" do
224
- it "should handle arrays of params" do
225
- easy = Typhoeus::Easy.new
226
- easy.url = "http://localhost:3002/index.html"
227
- easy.method = :get
228
- easy.request_body = "this is a body!"
229
- easy.params = {
230
- :foo => 'bar',
231
- :username => ['dbalatero', 'dbalatero2']
232
- }
233
- easy.url.should =~ /\?.*foo=bar&username=dbalatero&username=dbalatero2/
234
- end
235
- end
236
-
237
-
238
- describe "put" do
239
- it "should perform a put" do
240
- easy = Typhoeus::Easy.new
241
- easy.url = "http://localhost:3002"
242
- easy.method = :put
243
- easy.perform
244
- easy.response_code.should == 200
245
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "PUT"
246
- end
247
-
248
- it "should send a request body" do
249
- easy = Typhoeus::Easy.new
250
- easy.url = "http://localhost:3002"
251
- easy.method = :put
252
- easy.request_body = "this is a body!"
253
- easy.perform
254
- easy.response_code.should == 200
255
- easy.response_body.should include("this is a body!")
256
- end
257
-
258
- it "should be able perform put with empty bodies on the same easy handle" do
259
- easy = Typhoeus::Easy.new
260
- easy.url = "http://localhost:3002"
261
- easy.method = :put
262
- easy.perform
263
- easy.response_code.should == 200
264
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "PUT"
265
-
266
- easy.reset
267
-
268
- easy.url = "http://localhost:3002"
269
- easy.method = :put
270
- easy.perform
271
- easy.response_code.should == 200
272
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "PUT"
273
- end
274
-
275
- it "should set content length correctly for a utf-8 string" do
276
- body = "this is a body with utf-8 content: Motörhead! WHÖÖ!"
277
- easy = Typhoeus::Easy.new
278
- easy.url = "http://localhost:3002"
279
- easy.method = :post
280
- easy.should_receive(:set_option).with(Typhoeus::Easy::OPTION_VALUES[:CURLOPT_POSTFIELDSIZE], 55)
281
- easy.should_receive(:set_option).with(Typhoeus::Easy::OPTION_VALUES[:CURLOPT_COPYPOSTFIELDS], body)
282
- easy.request_body = body
283
- end
284
- end
285
-
286
- describe "post" do
287
- it "should perform a post" do
288
- easy = Typhoeus::Easy.new
289
- easy.url = "http://localhost:3002"
290
- easy.method = :post
291
- easy.perform
292
- easy.response_code.should == 200
293
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "POST"
294
- end
295
-
296
- it "should send a request body" do
297
- easy = Typhoeus::Easy.new
298
- easy.url = "http://localhost:3002"
299
- easy.method = :post
300
- easy.request_body = "this is a body!"
301
- easy.perform
302
- easy.response_code.should == 200
303
- easy.response_body.should include("this is a body!")
304
- end
305
-
306
- it "should handle params" do
307
- easy = Typhoeus::Easy.new
308
- easy.url = "http://localhost:3002"
309
- easy.method = :post
310
- easy.params = {:foo => "bar"}
311
- easy.perform
312
- easy.response_code.should == 200
313
- easy.response_body.should =~ /foo=bar/
314
- end
315
-
316
- it "should use Content-Type: application/x-www-form-urlencoded for normal posts" do
317
- easy = Typhoeus::Easy.new
318
- easy.url = "http://localhost:3002/normal_post"
319
- easy.method = :post
320
- easy.params = { :a => 'b', :c => 'd',
321
- :e => { :f => { :g => 'h' } } }
322
- easy.perform
323
-
324
- request = JSON.parse(easy.response_body)
325
- request['CONTENT_TYPE'].should == 'application/x-www-form-urlencoded'
326
- request['rack.request.form_vars'].should == 'a=b&c=d&e[f][g]=h'
327
- end
328
-
329
- it "should handle a file upload, as multipart" do
330
- easy = Typhoeus::Easy.new
331
- easy.url = "http://localhost:3002/file"
332
- easy.method = :post
333
- easy.params = {:file => File.open(File.expand_path(File.dirname(__FILE__) + "/../fixtures/placeholder.txt"), "r")}
334
- easy.perform
335
- easy.response_code.should == 200
336
- result = JSON.parse(easy.response_body)
337
-
338
- { 'content-type' => 'text/plain',
339
- 'filename' => 'placeholder.txt',
340
- 'content' => 'This file is used to test uploading.'
341
- }.each do |key, val|
342
- result[key].should == val
343
- end
344
-
345
- result['request-content-type'].should =~ /multipart/
346
- end
347
- end
348
-
349
- describe "delete" do
350
- it "should perform a delete" do
351
- easy = Typhoeus::Easy.new
352
- easy.url = "http://localhost:3002"
353
- easy.method = :delete
354
- easy.perform
355
- easy.response_code.should == 200
356
- JSON.parse(easy.response_body)["REQUEST_METHOD"].should == "DELETE"
357
- end
358
-
359
- it "should send a request body" do
360
- easy = Typhoeus::Easy.new
361
- easy.url = "http://localhost:3002"
362
- easy.method = :delete
363
- easy.request_body = "this is a body!"
364
- easy.perform
365
- easy.response_code.should == 200
366
- easy.response_body.should include("this is a body!")
367
- end
368
- end
369
-
370
- describe "encoding/compression support" do
371
-
372
- it "should send valid encoding headers and decode the response" do
373
- easy = Typhoeus::Easy.new
374
- easy.url = "http://localhost:3002/gzipped"
375
- easy.method = :get
376
- easy.perform
377
- easy.response_code.should == 200
378
- JSON.parse(easy.response_body)["HTTP_ACCEPT_ENCODING"].should == "deflate, gzip"
379
- end
380
-
381
- it "should send valid encoding headers and decode the response after reset" do
382
- easy = Typhoeus::Easy.new
383
- easy.reset
384
- easy.url = "http://localhost:3002/gzipped"
385
- easy.method = :get
386
- easy.perform
387
- easy.response_code.should == 200
388
- JSON.parse(easy.response_body)["HTTP_ACCEPT_ENCODING"].should == "deflate, gzip"
389
- end
390
- end
391
- end