tech-angels-typhoeus 0.1.36

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.gitignore +2 -0
  2. data/README.textile +312 -0
  3. data/Rakefile +39 -0
  4. data/VERSION +1 -0
  5. data/benchmarks/profile.rb +25 -0
  6. data/benchmarks/vs_nethttp.rb +35 -0
  7. data/examples/twitter.rb +21 -0
  8. data/ext/typhoeus/.gitignore +5 -0
  9. data/ext/typhoeus/Makefile +157 -0
  10. data/ext/typhoeus/extconf.rb +65 -0
  11. data/ext/typhoeus/native.c +11 -0
  12. data/ext/typhoeus/native.h +21 -0
  13. data/ext/typhoeus/typhoeus_easy.c +207 -0
  14. data/ext/typhoeus/typhoeus_easy.h +19 -0
  15. data/ext/typhoeus/typhoeus_multi.c +225 -0
  16. data/ext/typhoeus/typhoeus_multi.h +16 -0
  17. data/lib/typhoeus.rb +55 -0
  18. data/lib/typhoeus/.gitignore +1 -0
  19. data/lib/typhoeus/easy.rb +329 -0
  20. data/lib/typhoeus/filter.rb +28 -0
  21. data/lib/typhoeus/hydra.rb +235 -0
  22. data/lib/typhoeus/multi.rb +35 -0
  23. data/lib/typhoeus/remote.rb +306 -0
  24. data/lib/typhoeus/remote_method.rb +108 -0
  25. data/lib/typhoeus/remote_proxy_object.rb +48 -0
  26. data/lib/typhoeus/request.rb +159 -0
  27. data/lib/typhoeus/response.rb +49 -0
  28. data/lib/typhoeus/service.rb +20 -0
  29. data/profilers/valgrind.rb +24 -0
  30. data/spec/fixtures/result_set.xml +60 -0
  31. data/spec/servers/app.rb +73 -0
  32. data/spec/spec.opts +2 -0
  33. data/spec/spec_helper.rb +11 -0
  34. data/spec/typhoeus/easy_spec.rb +236 -0
  35. data/spec/typhoeus/filter_spec.rb +35 -0
  36. data/spec/typhoeus/hydra_spec.rb +311 -0
  37. data/spec/typhoeus/multi_spec.rb +74 -0
  38. data/spec/typhoeus/remote_method_spec.rb +141 -0
  39. data/spec/typhoeus/remote_proxy_object_spec.rb +65 -0
  40. data/spec/typhoeus/remote_spec.rb +695 -0
  41. data/spec/typhoeus/request_spec.rb +169 -0
  42. data/spec/typhoeus/response_spec.rb +63 -0
  43. data/typhoeus.gemspec +112 -0
  44. metadata +203 -0
@@ -0,0 +1,169 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Typhoeus::Request do
4
+ describe "#params_string" do
5
+ it "should dump a sorted string" do
6
+ request = Typhoeus::Request.new(
7
+ "http://google.com",
8
+ :params => {
9
+ 'b' => 'fdsa',
10
+ 'a' => 'jlk',
11
+ 'c' => '789'
12
+ }
13
+ )
14
+
15
+ request.params_string.should == "a=jlk&b=fdsa&c=789"
16
+ end
17
+
18
+ it "should accept symboled keys" do
19
+ request = Typhoeus::Request.new('http://google.com',
20
+ :params => {
21
+ :b => 'fdsa',
22
+ :a => 'jlk',
23
+ :c => '789'
24
+ })
25
+ request.params_string.should == "a=jlk&b=fdsa&c=789"
26
+ end
27
+ end
28
+
29
+ describe "quick request methods" do
30
+ it "can run a GET synchronously" do
31
+ response = Typhoeus::Request.get("http://localhost:3000", :params => {:q => "hi"}, :headers => {:foo => "bar"})
32
+ response.code.should == 200
33
+ JSON.parse(response.body)["REQUEST_METHOD"].should == "GET"
34
+ end
35
+
36
+ it "can run a POST synchronously" do
37
+ response = Typhoeus::Request.post("http://localhost:3000", :params => {:q => "hi"}, :headers => {:foo => "bar"})
38
+ response.code.should == 200
39
+ json = JSON.parse(response.body)
40
+ json["REQUEST_METHOD"].should == "POST"
41
+ json["rack.request.query_hash"]["q"].should == "hi"
42
+ end
43
+
44
+ it "can run a PUT synchronously" do
45
+ response = Typhoeus::Request.put("http://localhost:3000", :params => {:q => "hi"}, :headers => {:foo => "bar"})
46
+ response.code.should == 200
47
+ JSON.parse(response.body)["REQUEST_METHOD"].should == "PUT"
48
+ end
49
+
50
+ it "can run a DELETE synchronously" do
51
+ response = Typhoeus::Request.delete("http://localhost:3000", :params => {:q => "hi"}, :headers => {:foo => "bar"})
52
+ response.code.should == 200
53
+ JSON.parse(response.body)["REQUEST_METHOD"].should == "DELETE"
54
+ end
55
+ end
56
+
57
+ it "takes url as the first argument" do
58
+ Typhoeus::Request.new("http://localhost:3000").url.should == "http://localhost:3000"
59
+ end
60
+
61
+ it "should parse the host from the url" do
62
+ Typhoeus::Request.new("http://localhost:3000/whatever?hi=foo").host.should == "http://localhost:3000"
63
+ Typhoeus::Request.new("http://localhost:3000?hi=foo").host.should == "http://localhost:3000"
64
+ Typhoeus::Request.new("http://localhost:3000").host.should == "http://localhost:3000"
65
+ end
66
+
67
+ it "takes method as an option" do
68
+ Typhoeus::Request.new("http://localhost:3000", :method => :get).method.should == :get
69
+ end
70
+
71
+ it "takes headers as an option" do
72
+ headers = {:foo => :bar}
73
+ request = Typhoeus::Request.new("http://localhost:3000", :headers => headers)
74
+ request.headers.should == headers
75
+ end
76
+
77
+ it "takes params as an option and adds them to the url" do
78
+ Typhoeus::Request.new("http://localhost:3000", :params => {:foo => "bar"}).url.should == "http://localhost:3000?foo=bar"
79
+ end
80
+
81
+ it "takes request body as an option" do
82
+ Typhoeus::Request.new("http://localhost:3000", :body => "whatever").body.should == "whatever"
83
+ end
84
+
85
+ it "takes timeout as an option" do
86
+ Typhoeus::Request.new("http://localhost:3000", :timeout => 10).timeout.should == 10
87
+ end
88
+
89
+ it "takes cache_timeout as an option" do
90
+ Typhoeus::Request.new("http://localhost:3000", :cache_timeout => 60).cache_timeout.should == 60
91
+ end
92
+
93
+ it "takes follow_location as an option" do
94
+ Typhoeus::Request.new("http://localhost:3000", :follow_location => true).follow_location.should == true
95
+ end
96
+
97
+ it "takes max_redirects as an option" do
98
+ Typhoeus::Request.new("http://localhost:3000", :max_redirects => 10).max_redirects.should == 10
99
+ end
100
+
101
+ it "has the associated response object" do
102
+ request = Typhoeus::Request.new("http://localhost:3000")
103
+ request.response = :foo
104
+ request.response.should == :foo
105
+ end
106
+
107
+ it "has an on_complete handler that is called when the request is completed" do
108
+ request = Typhoeus::Request.new("http://localhost:3000")
109
+ foo = nil
110
+ request.on_complete do |response|
111
+ foo = response
112
+ end
113
+ request.response = :bar
114
+ request.call_handlers
115
+ foo.should == :bar
116
+ end
117
+
118
+ it "has an on_complete setter" do
119
+ foo = nil
120
+ proc = Proc.new {|response| foo = response}
121
+ request = Typhoeus::Request.new("http://localhost:3000")
122
+ request.on_complete = proc
123
+ request.response = :bar
124
+ request.call_handlers
125
+ foo.should == :bar
126
+ end
127
+
128
+ it "stores the handled response that is the return value from the on_complete block" do
129
+ request = Typhoeus::Request.new("http://localhost:3000")
130
+ request.on_complete do |response|
131
+ "handled"
132
+ end
133
+ request.response = :bar
134
+ request.call_handlers
135
+ request.handled_response.should == "handled"
136
+ end
137
+
138
+ it "has an after_complete handler that recieves what on_complete returns" do
139
+ request = Typhoeus::Request.new("http://localhost:3000")
140
+ request.on_complete do |response|
141
+ "handled"
142
+ end
143
+ good = nil
144
+ request.after_complete do |object|
145
+ good = object == "handled"
146
+ end
147
+ request.call_handlers
148
+ good.should be_true
149
+ end
150
+
151
+ it "has an after_complete setter" do
152
+ request = Typhoeus::Request.new("http://localhost:3000")
153
+ request.on_complete do |response|
154
+ "handled"
155
+ end
156
+ good = nil
157
+ proc = Proc.new {|object| good = object == "handled"}
158
+ request.after_complete = proc
159
+
160
+ request.call_handlers
161
+ good.should be_true
162
+ end
163
+
164
+ describe "retry" do
165
+ it "should take a retry option"
166
+ it "should count the number of times a request has failed"
167
+ end
168
+
169
+ end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Typhoeus::Response do
4
+ describe "initialize" do
5
+ it "should store response_code" do
6
+ Typhoeus::Response.new(:code => 200).code.should == 200
7
+ end
8
+
9
+ it "should store response_headers" do
10
+ Typhoeus::Response.new(:headers => "a header!").headers.should == "a header!"
11
+ end
12
+
13
+ it "should store response_body" do
14
+ Typhoeus::Response.new(:body => "a body!").body.should == "a body!"
15
+ end
16
+
17
+ it "should store request_time" do
18
+ Typhoeus::Response.new(:time => 1.23).time.should == 1.23
19
+ end
20
+
21
+ it "should store requested_url" do
22
+ response = Typhoeus::Response.new(:requested_url => "http://test.com")
23
+ response.requested_url.should == "http://test.com"
24
+ end
25
+
26
+ it "should store requested_http_method" do
27
+ response = Typhoeus::Response.new(:requested_http_method => :delete)
28
+ response.requested_http_method.should == :delete
29
+ end
30
+
31
+ it "should store an associated request object" do
32
+ response = Typhoeus::Response.new(:request => "whatever")
33
+ response.request.should == "whatever"
34
+ end
35
+ end
36
+
37
+ describe "headers" do
38
+ it "can parse the headers into a hash" do
39
+ response = Typhoeus::Response.new(:headers => "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\nStatus: 200\r\nX-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.9\r\nX-Cache: miss\r\nX-Runtime: 184\r\nETag: e001d08d9354ab7bc7c27a00163a3afa\r\nCache-Control: private, max-age=0, must-revalidate\r\nContent-Length: 4725\r\nSet-Cookie: _some_session=BAh7CDoGciIAOg9zZXNzaW9uX2lkIiU1OTQ2OTcwMjljMWM5ZTQwODU1NjQwYTViMmQxMTkxMjoGcyIKL2NhcnQ%3D--b4c4663932243090c961bb93d4ad5e4327064730; path=/; HttpOnly\r\nServer: nginx/0.6.37 + Phusion Passenger 2.2.4 (mod_rails/mod_rack)\r\nSet-Cookie: foo=bar; path=/;\r\nP3P: CP=\"NOI DSP COR NID ADMa OPTa OUR NOR\"\r\n\r\n")
40
+ response.headers_hash["Status"].should == "200"
41
+ response.headers_hash["Set-Cookie"].should == ["_some_session=BAh7CDoGciIAOg9zZXNzaW9uX2lkIiU1OTQ2OTcwMjljMWM5ZTQwODU1NjQwYTViMmQxMTkxMjoGcyIKL2NhcnQ%3D--b4c4663932243090c961bb93d4ad5e4327064730; path=/; HttpOnly", "foo=bar; path=/;"]
42
+ response.headers_hash["Content-Type"].should == "text/html; charset=utf-8"
43
+ end
44
+
45
+ it "parses a header key that appears multiple times into an array" do
46
+ response = Typhoeus::Response.new(:headers => "HTTP/1.1 302 Found\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\nStatus: 302\r\nX-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.9\r\nLocation: http://mckenzie-greenholt1512.myshopify.com/cart\r\nX-Runtime: 22\r\nCache-Control: no-cache\r\nContent-Length: 114\r\nSet-Cookie: cart=8fdd6a828d9c89a737a52668be0cebaf; path=/; expires=Fri, 12-Mar-2010 18:30:19 GMT\r\nSet-Cookie: _session=BAh7CToPc2Vzc2lvbl9pZCIlZTQzMDQzMDg1YjI3MTQ4MzAzMTZmMWZmMWJjMTU1NmI6CWNhcnQiJThmZGQ2YTgyOGQ5Yzg5YTczN2E1MjY2OGJlMGNlYmFmOgZyIgA6BnMiDi9jYXJ0L2FkZA%3D%3D--6b0a699625caed9597580d8e9b6ca5f5e5954125; path=/; HttpOnly\r\nServer: nginx/0.6.37 + Phusion Passenger 2.2.4 (mod_rails/mod_rack)\r\nP3P: CP=\"NOI DSP COR NID ADMa OPTa OUR NOR\"\r\n\r\n")
47
+ response.headers_hash["Set-Cookie"].should include("cart=8fdd6a828d9c89a737a52668be0cebaf; path=/; expires=Fri, 12-Mar-2010 18:30:19 GMT")
48
+ response.headers_hash["Set-Cookie"].should include("_session=BAh7CToPc2Vzc2lvbl9pZCIlZTQzMDQzMDg1YjI3MTQ4MzAzMTZmMWZmMWJjMTU1NmI6CWNhcnQiJThmZGQ2YTgyOGQ5Yzg5YTczN2E1MjY2OGJlMGNlYmFmOgZyIgA6BnMiDi9jYXJ0L2FkZA%3D%3D--6b0a699625caed9597580d8e9b6ca5f5e5954125; path=/; HttpOnly")
49
+ end
50
+ end
51
+
52
+ describe "status checking" do
53
+ it "is successful if response code is 200-299" do
54
+ Typhoeus::Response.new(:code => 220).success?.should be
55
+ Typhoeus::Response.new(:code => 400).success?.should_not be
56
+ end
57
+
58
+ it "is not modified if the status code is 304" do
59
+ Typhoeus::Response.new(:code => 304).modified?.should_not be
60
+ Typhoeus::Response.new(:code => 200).modified?.should be
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,112 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{tech-angels-typhoeus}
8
+ s.version = "0.1.36"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Paul Dix"]
12
+ s.date = %q{2010-06-04}
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
+ s.email = %q{paul@pauldix.net}
15
+ s.extensions = ["ext/typhoeus/extconf.rb"]
16
+ s.extra_rdoc_files = [
17
+ "README.textile"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "README.textile",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "benchmarks/profile.rb",
25
+ "benchmarks/vs_nethttp.rb",
26
+ "examples/twitter.rb",
27
+ "ext/typhoeus/.gitignore",
28
+ "ext/typhoeus/Makefile",
29
+ "ext/typhoeus/extconf.rb",
30
+ "ext/typhoeus/native.c",
31
+ "ext/typhoeus/native.h",
32
+ "ext/typhoeus/typhoeus_easy.c",
33
+ "ext/typhoeus/typhoeus_easy.h",
34
+ "ext/typhoeus/typhoeus_multi.c",
35
+ "ext/typhoeus/typhoeus_multi.h",
36
+ "lib/typhoeus.rb",
37
+ "lib/typhoeus/.gitignore",
38
+ "lib/typhoeus/easy.rb",
39
+ "lib/typhoeus/filter.rb",
40
+ "lib/typhoeus/hydra.rb",
41
+ "lib/typhoeus/multi.rb",
42
+ "lib/typhoeus/remote.rb",
43
+ "lib/typhoeus/remote_method.rb",
44
+ "lib/typhoeus/remote_proxy_object.rb",
45
+ "lib/typhoeus/request.rb",
46
+ "lib/typhoeus/response.rb",
47
+ "lib/typhoeus/service.rb",
48
+ "profilers/valgrind.rb",
49
+ "spec/fixtures/result_set.xml",
50
+ "spec/servers/app.rb",
51
+ "spec/spec.opts",
52
+ "spec/spec_helper.rb",
53
+ "spec/typhoeus/easy_spec.rb",
54
+ "spec/typhoeus/filter_spec.rb",
55
+ "spec/typhoeus/hydra_spec.rb",
56
+ "spec/typhoeus/multi_spec.rb",
57
+ "spec/typhoeus/remote_method_spec.rb",
58
+ "spec/typhoeus/remote_proxy_object_spec.rb",
59
+ "spec/typhoeus/remote_spec.rb",
60
+ "spec/typhoeus/request_spec.rb",
61
+ "spec/typhoeus/response_spec.rb",
62
+ "typhoeus.gemspec"
63
+ ]
64
+ s.homepage = %q{http://github.com/pauldix/typhoeus}
65
+ s.rdoc_options = ["--charset=UTF-8"]
66
+ s.require_paths = ["lib"]
67
+ s.rubygems_version = %q{1.3.6}
68
+ s.summary = %q{A library for interacting with web services (and building SOAs) at blinding speed.}
69
+ s.test_files = [
70
+ "spec/servers/app.rb",
71
+ "spec/spec_helper.rb",
72
+ "spec/typhoeus/easy_spec.rb",
73
+ "spec/typhoeus/filter_spec.rb",
74
+ "spec/typhoeus/hydra_spec.rb",
75
+ "spec/typhoeus/multi_spec.rb",
76
+ "spec/typhoeus/remote_method_spec.rb",
77
+ "spec/typhoeus/remote_proxy_object_spec.rb",
78
+ "spec/typhoeus/remote_spec.rb",
79
+ "spec/typhoeus/request_spec.rb",
80
+ "spec/typhoeus/response_spec.rb",
81
+ "examples/twitter.rb"
82
+ ]
83
+
84
+ if s.respond_to? :specification_version then
85
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
86
+ s.specification_version = 3
87
+
88
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
89
+ s.add_runtime_dependency(%q<rack>, [">= 0"])
90
+ s.add_development_dependency(%q<rspec>, [">= 0"])
91
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
92
+ s.add_development_dependency(%q<diff-lcs>, [">= 0"])
93
+ s.add_development_dependency(%q<sinatra>, [">= 0"])
94
+ s.add_development_dependency(%q<json>, [">= 0"])
95
+ else
96
+ s.add_dependency(%q<rack>, [">= 0"])
97
+ s.add_dependency(%q<rspec>, [">= 0"])
98
+ s.add_dependency(%q<jeweler>, [">= 0"])
99
+ s.add_dependency(%q<diff-lcs>, [">= 0"])
100
+ s.add_dependency(%q<sinatra>, [">= 0"])
101
+ s.add_dependency(%q<json>, [">= 0"])
102
+ end
103
+ else
104
+ s.add_dependency(%q<rack>, [">= 0"])
105
+ s.add_dependency(%q<rspec>, [">= 0"])
106
+ s.add_dependency(%q<jeweler>, [">= 0"])
107
+ s.add_dependency(%q<diff-lcs>, [">= 0"])
108
+ s.add_dependency(%q<sinatra>, [">= 0"])
109
+ s.add_dependency(%q<json>, [">= 0"])
110
+ end
111
+ end
112
+
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tech-angels-typhoeus
3
+ version: !ruby/object:Gem::Version
4
+ hash: 83
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 36
10
+ version: 0.1.36
11
+ platform: ruby
12
+ authors:
13
+ - Paul Dix
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-04 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: jeweler
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: diff-lcs
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: sinatra
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :development
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: json
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id006
105
+ description: Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.
106
+ email: paul@pauldix.net
107
+ executables: []
108
+
109
+ extensions:
110
+ - ext/typhoeus/extconf.rb
111
+ extra_rdoc_files:
112
+ - README.textile
113
+ files:
114
+ - .gitignore
115
+ - README.textile
116
+ - Rakefile
117
+ - VERSION
118
+ - benchmarks/profile.rb
119
+ - benchmarks/vs_nethttp.rb
120
+ - examples/twitter.rb
121
+ - ext/typhoeus/.gitignore
122
+ - ext/typhoeus/Makefile
123
+ - ext/typhoeus/extconf.rb
124
+ - ext/typhoeus/native.c
125
+ - ext/typhoeus/native.h
126
+ - ext/typhoeus/typhoeus_easy.c
127
+ - ext/typhoeus/typhoeus_easy.h
128
+ - ext/typhoeus/typhoeus_multi.c
129
+ - ext/typhoeus/typhoeus_multi.h
130
+ - lib/typhoeus.rb
131
+ - lib/typhoeus/.gitignore
132
+ - lib/typhoeus/easy.rb
133
+ - lib/typhoeus/filter.rb
134
+ - lib/typhoeus/hydra.rb
135
+ - lib/typhoeus/multi.rb
136
+ - lib/typhoeus/remote.rb
137
+ - lib/typhoeus/remote_method.rb
138
+ - lib/typhoeus/remote_proxy_object.rb
139
+ - lib/typhoeus/request.rb
140
+ - lib/typhoeus/response.rb
141
+ - lib/typhoeus/service.rb
142
+ - profilers/valgrind.rb
143
+ - spec/fixtures/result_set.xml
144
+ - spec/servers/app.rb
145
+ - spec/spec.opts
146
+ - spec/spec_helper.rb
147
+ - spec/typhoeus/easy_spec.rb
148
+ - spec/typhoeus/filter_spec.rb
149
+ - spec/typhoeus/hydra_spec.rb
150
+ - spec/typhoeus/multi_spec.rb
151
+ - spec/typhoeus/remote_method_spec.rb
152
+ - spec/typhoeus/remote_proxy_object_spec.rb
153
+ - spec/typhoeus/remote_spec.rb
154
+ - spec/typhoeus/request_spec.rb
155
+ - spec/typhoeus/response_spec.rb
156
+ - typhoeus.gemspec
157
+ has_rdoc: true
158
+ homepage: http://github.com/pauldix/typhoeus
159
+ licenses: []
160
+
161
+ post_install_message:
162
+ rdoc_options:
163
+ - --charset=UTF-8
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ none: false
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ hash: 3
181
+ segments:
182
+ - 0
183
+ version: "0"
184
+ requirements: []
185
+
186
+ rubyforge_project:
187
+ rubygems_version: 1.3.7
188
+ signing_key:
189
+ specification_version: 3
190
+ summary: A library for interacting with web services (and building SOAs) at blinding speed.
191
+ test_files:
192
+ - spec/servers/app.rb
193
+ - spec/spec_helper.rb
194
+ - spec/typhoeus/easy_spec.rb
195
+ - spec/typhoeus/filter_spec.rb
196
+ - spec/typhoeus/hydra_spec.rb
197
+ - spec/typhoeus/multi_spec.rb
198
+ - spec/typhoeus/remote_method_spec.rb
199
+ - spec/typhoeus/remote_proxy_object_spec.rb
200
+ - spec/typhoeus/remote_spec.rb
201
+ - spec/typhoeus/request_spec.rb
202
+ - spec/typhoeus/response_spec.rb
203
+ - examples/twitter.rb