typhoeus 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.markdown +4 -0
- data/VERSION +1 -1
- data/lib/typhoeus/easy.rb +1 -1
- data/lib/typhoeus/form.rb +12 -31
- data/lib/typhoeus/request.rb +2 -16
- data/lib/typhoeus/utils.rb +38 -0
- data/spec/typhoeus/easy_spec.rb +1 -1
- data/spec/typhoeus/form_spec.rb +7 -6
- data/spec/typhoeus/request_spec.rb +2 -2
- data/typhoeus.gemspec +2 -2
- metadata +4 -4
data/CHANGELOG.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/lib/typhoeus/easy.rb
CHANGED
data/lib/typhoeus/form.rb
CHANGED
@@ -3,45 +3,26 @@ require 'mime/types'
|
|
3
3
|
module Typhoeus
|
4
4
|
class Form
|
5
5
|
attr_accessor :params
|
6
|
+
attr_reader :traversal
|
6
7
|
|
7
8
|
def initialize(params = {})
|
8
9
|
@params = params
|
9
10
|
end
|
10
11
|
|
12
|
+
def traversal
|
13
|
+
@traversal ||= Typhoeus::Utils.traverse_params_hash(params)
|
14
|
+
end
|
15
|
+
|
11
16
|
def process!
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
value.each {|v| formadd_param(key.to_s, v.to_s)}
|
18
|
-
when File
|
19
|
-
filename = File.basename(value.path)
|
20
|
-
types = MIME::Types.type_for(filename)
|
21
|
-
formadd_file(
|
22
|
-
key.to_s,
|
23
|
-
filename,
|
24
|
-
types.empty? ? 'application/octet-stream' : types[0].to_s,
|
25
|
-
File.expand_path(value.path)
|
26
|
-
)
|
27
|
-
else
|
28
|
-
formadd_param(key.to_s, value.to_s)
|
29
|
-
end
|
30
|
-
end
|
17
|
+
# add params
|
18
|
+
traversal[:params].each { |p| formadd_param(p[0], p[1]) }
|
19
|
+
|
20
|
+
# add files
|
21
|
+
traversal[:files].each { |file_args| formadd_file(*file_args) }
|
31
22
|
end
|
32
23
|
|
33
24
|
def to_s
|
34
|
-
|
35
|
-
value = params[k]
|
36
|
-
if value.is_a? Hash
|
37
|
-
value.keys.sort_by{|sk|sk.to_s}.collect {|sk| Typhoeus::Utils.escape("#{k}[#{sk}]") + "=" + Typhoeus::Utils.escape(value[sk].to_s)}
|
38
|
-
elsif value.is_a? Array
|
39
|
-
key = Typhoeus::Utils.escape(k.to_s)
|
40
|
-
value.collect { |v| "#{key}=#{Typhoeus::Utils.escape(v.to_s)}" }.join('&')
|
41
|
-
else
|
42
|
-
"#{Typhoeus::Utils.escape(k.to_s)}=#{Typhoeus::Utils.escape(params[k].to_s)}"
|
43
|
-
end
|
44
|
-
end.flatten.join("&")
|
25
|
+
Typhoeus::Utils.traversal_to_param_string(traversal, false)
|
45
26
|
end
|
46
27
|
end
|
47
|
-
end
|
28
|
+
end
|
data/lib/typhoeus/request.rb
CHANGED
@@ -110,23 +110,9 @@ module Typhoeus
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def params_string
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
def traverse_hash(hash, current_key = nil)
|
117
|
-
hash.keys.sort { |a, b| a.to_s <=> b.to_s }.collect do |key|
|
118
|
-
new_key = current_key ? "#{current_key}[#{key}]" : key
|
119
|
-
if hash[key].is_a?(Hash)
|
120
|
-
traverse_hash(hash[key], new_key)
|
121
|
-
elsif hash[key].is_a?(Array)
|
122
|
-
array_key = Typhoeus::Utils.escape("#{new_key}[]")
|
123
|
-
hash[key].collect { |v| "#{array_key}=#{Typhoeus::Utils.escape(v.to_s)}" }.join('&')
|
124
|
-
else
|
125
|
-
"#{Typhoeus::Utils.escape(new_key)}=#{Typhoeus::Utils.escape(hash[key].to_s)}"
|
126
|
-
end
|
127
|
-
end
|
113
|
+
traversal = Typhoeus::Utils.traverse_params_hash(params)
|
114
|
+
Typhoeus::Utils.traversal_to_param_string(traversal)
|
128
115
|
end
|
129
|
-
private :traverse_hash
|
130
116
|
|
131
117
|
def on_complete(&block)
|
132
118
|
@on_complete = block
|
data/lib/typhoeus/utils.rb
CHANGED
@@ -8,6 +8,44 @@ module Typhoeus
|
|
8
8
|
end
|
9
9
|
module_function :escape
|
10
10
|
|
11
|
+
# Params are NOT escaped.
|
12
|
+
def traverse_params_hash(hash, result = nil, current_key = nil)
|
13
|
+
result ||= { :files => [], :params => [] }
|
14
|
+
|
15
|
+
hash.keys.sort { |a, b| a.to_s <=> b.to_s }.collect do |key|
|
16
|
+
new_key = (current_key ? "#{current_key}[#{key}]" : key).to_s
|
17
|
+
case hash[key]
|
18
|
+
when Hash
|
19
|
+
traverse_params_hash(hash[key], result, new_key)
|
20
|
+
when Array
|
21
|
+
array_key = "#{new_key}[]"
|
22
|
+
hash[key].each do |v|
|
23
|
+
result[:params] << [array_key, v.to_s]
|
24
|
+
end
|
25
|
+
when File
|
26
|
+
filename = File.basename(hash[key].path)
|
27
|
+
types = MIME::Types.type_for(filename)
|
28
|
+
result[:files] << [
|
29
|
+
new_key,
|
30
|
+
filename,
|
31
|
+
types.empty? ? 'application/octet-stream' : types[0].to_s,
|
32
|
+
File.expand_path(hash[key].path)
|
33
|
+
]
|
34
|
+
else
|
35
|
+
result[:params] << [new_key, hash[key].to_s]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
result
|
39
|
+
end
|
40
|
+
module_function :traverse_params_hash
|
41
|
+
|
42
|
+
def traversal_to_param_string(traversal, escape = true)
|
43
|
+
traversal[:params].collect { |param|
|
44
|
+
"#{Typhoeus::Utils.escape(param[0])}=#{Typhoeus::Utils.escape(param[1])}"
|
45
|
+
}.join('&')
|
46
|
+
end
|
47
|
+
module_function :traversal_to_param_string
|
48
|
+
|
11
49
|
# Return the bytesize of String; uses String#size under Ruby 1.8 and
|
12
50
|
# String#bytesize under 1.9.
|
13
51
|
if ''.respond_to?(:bytesize)
|
data/spec/typhoeus/easy_spec.rb
CHANGED
data/spec/typhoeus/form_spec.rb
CHANGED
@@ -36,9 +36,9 @@ describe Typhoeus::Form do
|
|
36
36
|
:name => "John Smith",
|
37
37
|
:age => "29"
|
38
38
|
})
|
39
|
-
form.should_receive(:formadd_param).with("colors", "brown")
|
40
|
-
form.should_receive(:formadd_param).with("colors", "green")
|
41
|
-
form.should_receive(:formadd_param).with("colors", "white")
|
39
|
+
form.should_receive(:formadd_param).with("colors[]", "brown")
|
40
|
+
form.should_receive(:formadd_param).with("colors[]", "green")
|
41
|
+
form.should_receive(:formadd_param).with("colors[]", "white")
|
42
42
|
form.should_receive(:formadd_param).with("name", "John Smith")
|
43
43
|
form.should_receive(:formadd_param).with("age", "29")
|
44
44
|
form.process!
|
@@ -52,13 +52,14 @@ describe Typhoeus::Form do
|
|
52
52
|
form.should_receive(:formadd_file).with("file", "placeholder.txt", "text/plain", anything)
|
53
53
|
form.process!
|
54
54
|
end
|
55
|
+
|
55
56
|
it "should handle more than one file" do
|
56
57
|
form = Typhoeus::Form.new(
|
57
58
|
:text_file => File.open(File.expand_path(File.dirname(__FILE__) + "/../fixtures/placeholder.txt"), "r"),
|
58
59
|
:gif_file => File.open(File.expand_path(File.dirname(__FILE__) + "/../fixtures/placeholder.gif"), "r")
|
59
60
|
)
|
60
|
-
form.should_receive(:formadd_file).with("text_file", "placeholder.txt", "text/plain", anything)
|
61
61
|
form.should_receive(:formadd_file).with("gif_file", "placeholder.gif", "image/gif", anything)
|
62
|
+
form.should_receive(:formadd_file).with("text_file", "placeholder.txt", "text/plain", anything)
|
62
63
|
form.process!
|
63
64
|
end
|
64
65
|
it "should default to 'application/octet-stream' if no content type can be determined" do
|
@@ -100,7 +101,7 @@ describe Typhoeus::Form do
|
|
100
101
|
:name => "John Smith",
|
101
102
|
:age => "29"
|
102
103
|
})
|
103
|
-
form.to_s.should == "age=29&colors=brown&colors=green&colors=white&name=John+Smith"
|
104
|
+
form.to_s.should == "age=29&colors%5B%5D=brown&colors%5B%5D=green&colors%5B%5D=white&name=John+Smith"
|
104
105
|
end
|
105
106
|
end
|
106
|
-
end
|
107
|
+
end
|
@@ -102,11 +102,11 @@ describe Typhoeus::Request do
|
|
102
102
|
end
|
103
103
|
|
104
104
|
it "can run a POST synchronously" do
|
105
|
-
response = Typhoeus::Request.post("http://localhost:3000", :params => {:q => "hi"}, :headers => {:foo => "bar"})
|
105
|
+
response = Typhoeus::Request.post("http://localhost:3000", :params => {:q => { :a => "hi" } }, :headers => {:foo => "bar"})
|
106
106
|
response.code.should == 200
|
107
107
|
json = JSON.parse(response.body)
|
108
108
|
json["REQUEST_METHOD"].should == "POST"
|
109
|
-
json["rack.request.query_hash"]["q"].should == "hi"
|
109
|
+
json["rack.request.query_hash"]["q"]["a"].should == "hi"
|
110
110
|
end
|
111
111
|
|
112
112
|
it "can run a PUT synchronously" do
|
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.
|
8
|
+
s.version = "0.2.3"
|
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-
|
12
|
+
s.date = %q{2011-02-19}
|
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:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
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
|
+
date: 2011-02-19 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|