fresh_simplehttp 0.1.7
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.
- data/AUTHORS +4 -0
- data/CHANGELOG +20 -0
- data/LICENSE +58 -0
- data/README +96 -0
- data/Rakefile +137 -0
- data/TODO +28 -0
- data/VERSION +1 -0
- data/fresh_simplehttp.gemspec +55 -0
- data/lib/fresh_simplehttp.rb +7 -0
- data/lib/simple_http.rb +7 -0
- data/lib/simplehttp.rb +482 -0
- data/setup.rb +1585 -0
- data/simplehttp.gemspec +53 -0
- data/test/http_test.rb +214 -0
- data/test/http_test_server.rb +102 -0
- metadata +77 -0
data/simplehttp.gemspec
ADDED
@@ -0,0 +1,53 @@
|
|
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{simplehttp}
|
8
|
+
s.version = "0.1.5"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Josh Nichols", "Wilker Lucio"]
|
12
|
+
s.date = %q{2010-04-22}
|
13
|
+
s.description = %q{simple_http: Simple Http client lib.}
|
14
|
+
s.email = %q{josh@technicalpickles.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README",
|
18
|
+
"TODO"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"AUTHORS",
|
22
|
+
"CHANGELOG",
|
23
|
+
"LICENSE",
|
24
|
+
"README",
|
25
|
+
"Rakefile",
|
26
|
+
"TODO",
|
27
|
+
"VERSION",
|
28
|
+
"lib/simple_http.rb",
|
29
|
+
"lib/simplehttp.rb",
|
30
|
+
"setup.rb",
|
31
|
+
"simplehttp.gemspec"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/wilkerlucio/simplehttp}
|
34
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = %q{1.3.6}
|
37
|
+
s.summary = %q{simple_http: Simple Http client lib.}
|
38
|
+
s.test_files = [
|
39
|
+
"test/http_test.rb",
|
40
|
+
"test/http_test_server.rb"
|
41
|
+
]
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
+
s.specification_version = 3
|
46
|
+
|
47
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
+
else
|
49
|
+
end
|
50
|
+
else
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/test/http_test.rb
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
require 'simple_http.rb'
|
2
|
+
require 'http_test_server.rb'
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'uri'
|
6
|
+
require 'base64'
|
7
|
+
|
8
|
+
# These tests communicate with a corresponding http server (TestServer), which is
|
9
|
+
# implemented in `http_test_server.rb`
|
10
|
+
|
11
|
+
class SimpleHttpTest < Test::Unit::TestCase
|
12
|
+
def initialize *args
|
13
|
+
super *args
|
14
|
+
# create webbrick server in a separate thread
|
15
|
+
Thread.new {
|
16
|
+
TestServer.new.start
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
#@t.shutdown # webrick blocks in a weird way, can't
|
22
|
+
#commnicate with it in a different thread. this, of
|
23
|
+
#course, is really ugly.
|
24
|
+
end
|
25
|
+
|
26
|
+
# Tests of SimpleHttp class method behaviour.
|
27
|
+
|
28
|
+
def test_get_class_method
|
29
|
+
# string url
|
30
|
+
ret = SimpleHttp.get "http://127.0.0.1:12345/test1"
|
31
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "basic GET 1 test failed.");
|
32
|
+
|
33
|
+
# string url, with query
|
34
|
+
ret = SimpleHttp.get "http://127.0.0.1:12345/test1?query=true"
|
35
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "basic GET 2 test failed.");
|
36
|
+
|
37
|
+
# uri
|
38
|
+
uri = URI.parse "http://127.0.0.1:12345/test1?query=true"
|
39
|
+
ret = SimpleHttp.get uri
|
40
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "basic GET 3 test failed.");
|
41
|
+
|
42
|
+
#string with query as hash
|
43
|
+
ret = SimpleHttp.get "http://127.0.0.1:12345/test2", "query" => "query_test"
|
44
|
+
assert_equal("query_test", ret, "basic GET (query) 4 test failed.");
|
45
|
+
|
46
|
+
#uri with existing query + query as hash.
|
47
|
+
uri = URI.parse "http://127.0.0.1:12345/test2?query2=true"
|
48
|
+
ret = SimpleHttp.get uri, "query" => "query_test"
|
49
|
+
assert_equal("query_test", ret, "basic GET (query) 4.1 test failed.");
|
50
|
+
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
# Tests for http GET calls implemented using instantiated SimpleHttp objects.
|
55
|
+
|
56
|
+
def test_get_class_instance_method
|
57
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/test1"
|
58
|
+
ret = http.get
|
59
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "instance GET 1 test failed.");
|
60
|
+
|
61
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/test2?query=query_test"
|
62
|
+
ret = http.get
|
63
|
+
assert_equal("query_test", ret, "instance GET 2 test (query)");
|
64
|
+
|
65
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/query_test2?query=query_test"
|
66
|
+
ret = http.get "query2"=>"query2_test"
|
67
|
+
assert_equal("query2_test", ret, "instance GET 2.1 test (add to existing query")
|
68
|
+
|
69
|
+
http = SimpleHttp.new(URI.parse("http://127.0.0.1:12345/query_test2?bla=true"))
|
70
|
+
ret = http.get "query2" => "query_test"
|
71
|
+
assert_equal("query_test", ret, "basic GET (query) 3 test failed.")
|
72
|
+
|
73
|
+
http = SimpleHttp.new(URI.parse("http://127.0.0.1:12345/query_test2?bla=true"))
|
74
|
+
ret = http.get "something"=>"or the other", "query2" => "query_test"
|
75
|
+
assert_equal("query_test", ret, "basic GET (query) 4 test failed.")
|
76
|
+
|
77
|
+
# GET request with a custom request_header
|
78
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/header_test"
|
79
|
+
http.request_headers= {'x-special-http-header'=>'my-value'}
|
80
|
+
ret = http.get
|
81
|
+
assert_equal("my-value", ret, "GET header test 4")
|
82
|
+
|
83
|
+
# GET test with custom response_headers
|
84
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/header_test"
|
85
|
+
http.request_headers= {'x-special-http-header'=>'resp-header-test'}
|
86
|
+
http.get
|
87
|
+
assert_equal("resp-header-test", http.response_headers['x-special-response'], "GET response header test 5")
|
88
|
+
|
89
|
+
# GET test with custom request & response header and redirect
|
90
|
+
# test that request headers we set remain intact during redirects.
|
91
|
+
|
92
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/redirect_special_header"
|
93
|
+
http.request_headers["x-special-http-header"]='redirect_test'
|
94
|
+
http.get
|
95
|
+
assert_equal("redirect_test", http.response_headers['x-special-response'], "GET response header redirect test. 6")
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
# http POST calls using class methods.
|
100
|
+
#
|
101
|
+
def test_post_class_method
|
102
|
+
|
103
|
+
# string url
|
104
|
+
ret = SimpleHttp.post "http://127.0.0.1:12345/test1"
|
105
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "basic POST 1 test failed.");
|
106
|
+
|
107
|
+
|
108
|
+
#string with query as hash
|
109
|
+
ret = SimpleHttp.post "http://127.0.0.1:12345/test2", "query" => "query_test"
|
110
|
+
assert_equal("query_test", ret, "basic POST (query) 2 test failed.");
|
111
|
+
|
112
|
+
#uri with existing query + query as hash.
|
113
|
+
uri = URI.parse "http://127.0.0.1:12345/test2"
|
114
|
+
ret = SimpleHttp.post uri, "query" => "query_test"
|
115
|
+
assert_equal("query_test", ret, "basic POST (query) 2.1 test failed.");
|
116
|
+
|
117
|
+
# post something other than a form.
|
118
|
+
ret = SimpleHttp.post "http://127.0.0.1:12345/post_data_test", TestServer::POST_DATA, "misc/test-data"
|
119
|
+
assert_equal(TestServer::POST_DATA, ret, "class Post data test")
|
120
|
+
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
def test_post_instance_method
|
126
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/test1"
|
127
|
+
ret = http.post
|
128
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "instance POST 1 test failed.");
|
129
|
+
|
130
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/test2"
|
131
|
+
ret = http.post "query" => "query_test"
|
132
|
+
assert_equal("query_test", ret, "instance POST 2 test (query)");
|
133
|
+
|
134
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/query_test2?query=query_test"
|
135
|
+
ret = http.post "query2"=>"query2_test"
|
136
|
+
assert_equal("query2_test", ret, "instance POST 2.1 test (add to existing query")
|
137
|
+
|
138
|
+
http = SimpleHttp.new(URI.parse("http://127.0.0.1:12345/query_test2?bla=true"))
|
139
|
+
ret = http.post "query2" => "query_test"
|
140
|
+
assert_equal("query_test", ret, "basic POST (query) 3 test failed.")
|
141
|
+
|
142
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/post_test_uri_query?query=query_test"
|
143
|
+
ret = http.post "query2"=>"query2_test"
|
144
|
+
assert_equal("query=query_test", ret, "instance POST 3.1 test (query on url for post query.)")
|
145
|
+
|
146
|
+
# POST requst with a custom request_header
|
147
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/header_test"
|
148
|
+
http.request_headers= {'x-special-http-header'=>'my-value'}
|
149
|
+
ret = http.post
|
150
|
+
assert_equal("my-value", ret, "POST header test 4")
|
151
|
+
|
152
|
+
# POST request with a custom data type (not posting a form.)
|
153
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/post_data_test"
|
154
|
+
ret = http.post TestServer::POST_DATA, "misc/test-data"
|
155
|
+
assert_equal(TestServer::POST_DATA, ret, "Post data test")
|
156
|
+
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_basic_auth
|
161
|
+
|
162
|
+
# string url
|
163
|
+
ret = SimpleHttp.get "http://test:pwd@127.0.0.1:12345/basic_auth"
|
164
|
+
assert_equal(TestServer::SUCCESS_TEXT_1, ret, "basic auth get class 1 test failed.");
|
165
|
+
|
166
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/basic_auth"
|
167
|
+
http.basic_authentication "test", "pwd"
|
168
|
+
ret = http.get
|
169
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_1, "basic auth get instance 2 test failed.");
|
170
|
+
#string with query as hash
|
171
|
+
ret = SimpleHttp.post "http://test:pwd@127.0.0.1:12345/basic_auth", "query" => "query_test"
|
172
|
+
assert_equal(TestServer::SUCCESS_TEXT_1, ret, "basic auth post class 3 test failed.");
|
173
|
+
|
174
|
+
http = SimpleHttp.new "http://127.0.0.1:12345/basic_auth"
|
175
|
+
http.basic_authentication "test", "pwd"
|
176
|
+
ret = http.post TestServer::POST_DATA, "misc/test-data"
|
177
|
+
assert_equal(TestServer::SUCCESS_TEXT_1, ret, "Post data test")
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_response_handler
|
181
|
+
assert_raise(RuntimeError) {
|
182
|
+
ret = SimpleHttp.get "http://test:pwd@127.0.0.1:12345/non_existant"
|
183
|
+
}
|
184
|
+
|
185
|
+
http = SimpleHttp.new "http://test:pwd@127.0.0.1:12345/non_existant"
|
186
|
+
http.register_response_handler(Net::HTTPNotFound) { |req, res, http|
|
187
|
+
res.code
|
188
|
+
}
|
189
|
+
ret = http.get
|
190
|
+
assert_equal("404", ret, "response handler test 2")
|
191
|
+
|
192
|
+
http = SimpleHttp.new "http://test:pwd@127.0.0.1:12345/redirect1"
|
193
|
+
http.register_response_handler(Net::HTTPRedirection) { |req, res, http|
|
194
|
+
res['location']
|
195
|
+
}
|
196
|
+
ret = http.get
|
197
|
+
assert_equal("http://127.0.0.1:12345/redirect2", ret, "response handler test 3")
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_redirect
|
202
|
+
assert_raise(RuntimeError) {
|
203
|
+
http = SimpleHttp.new "http://test:pwd@127.0.0.1:12345/redirect1"
|
204
|
+
ret = http.get
|
205
|
+
}
|
206
|
+
|
207
|
+
ret = SimpleHttp.get "http://test:pwd@127.0.0.1:12345/redirect"
|
208
|
+
assert_equal(ret, TestServer::SUCCESS_TEXT_0, "redirect test 2");
|
209
|
+
end
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
end
|
214
|
+
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'webrick'
|
2
|
+
#require 'constants'
|
3
|
+
|
4
|
+
include WEBrick
|
5
|
+
class TestServer
|
6
|
+
SUCCESS_TEXT_0 = "success_0"
|
7
|
+
SUCCESS_TEXT_1 = "success_1"
|
8
|
+
SUCCESS_TEXT_2 = "success_2"
|
9
|
+
SUCCESS_TEXT_3 = "success_3"
|
10
|
+
SUCCESS_TEXT_4 = "success_4"
|
11
|
+
SUCCESS_TEXT_5 = "success_5"
|
12
|
+
SUCCESS_TEXT_6 = "success_6"
|
13
|
+
SUCCESS_TEXT_7 = "success_7"
|
14
|
+
SUCCESS_TEXT_8 = "success_8"
|
15
|
+
SUCCESS_TEXT_9 = "success_9"
|
16
|
+
|
17
|
+
POST_DATA = [0xbe, 0x00, 0x12, 0x23, 0x45, 0x67, 0x89, 0xAB].join
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@server = HTTPServer.new(
|
21
|
+
:Port => 12345
|
22
|
+
)
|
23
|
+
|
24
|
+
add_tests
|
25
|
+
end
|
26
|
+
|
27
|
+
def start
|
28
|
+
@server.start
|
29
|
+
end
|
30
|
+
|
31
|
+
def shutdown
|
32
|
+
@server.shutdown
|
33
|
+
end
|
34
|
+
|
35
|
+
def dbg str
|
36
|
+
puts "!!!!!!!!! #{str}"
|
37
|
+
end
|
38
|
+
def add_tests
|
39
|
+
# return a text
|
40
|
+
@server.mount_proc("/test1"){|req, res|
|
41
|
+
res.body=SUCCESS_TEXT_0
|
42
|
+
}
|
43
|
+
#return value of query param named "query"
|
44
|
+
@server.mount_proc("/test2"){|req, res|
|
45
|
+
res.body=req.query["query"]
|
46
|
+
}
|
47
|
+
|
48
|
+
# return value of query param named "query2"
|
49
|
+
@server.mount_proc("/query_test2"){|req, res|
|
50
|
+
res.body=req.query["query2"]
|
51
|
+
}
|
52
|
+
|
53
|
+
# return value of request header named "X-Special-Http-Header"
|
54
|
+
@server.mount_proc("/header_test"){|req, res|
|
55
|
+
res.body=req.header["x-special-http-header"][0]
|
56
|
+
res['x-special-response']=req.header["x-special-http-header"][0]
|
57
|
+
}
|
58
|
+
|
59
|
+
# return value of request header named "X-Special-Http-Header"
|
60
|
+
@server.mount_proc("/post_data_test"){|req, res|
|
61
|
+
ctype = req.header['content-type'][0]
|
62
|
+
if "misc/test-data" == ctype
|
63
|
+
res.body=req.body
|
64
|
+
else
|
65
|
+
res.body="failed, content-type: #{ctype}"
|
66
|
+
end
|
67
|
+
}
|
68
|
+
|
69
|
+
# Test that query in uri gets transmitted in post reqs as well.
|
70
|
+
@server.mount_proc("/post_test_uri_query") { |req, res|
|
71
|
+
res.body = req.query_string
|
72
|
+
}
|
73
|
+
|
74
|
+
@server.mount_proc("/basic_auth") {|req, res|
|
75
|
+
|
76
|
+
auth = Base64.decode64(req.header['authorization'][0].split[1])
|
77
|
+
usr, pwd = auth.split(':')
|
78
|
+
if ('test'==usr && 'pwd'==pwd)
|
79
|
+
res.body=SUCCESS_TEXT_1
|
80
|
+
else
|
81
|
+
res.status=403
|
82
|
+
end
|
83
|
+
}
|
84
|
+
|
85
|
+
1.upto(6) {|i|
|
86
|
+
@server.mount_proc("/redirect#{i}") { |req, res|
|
87
|
+
res.status=301
|
88
|
+
res.header['location']="http://127.0.0.1:12345/redirect#{i+1}"
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
@server.mount_proc("/redirect") { |req, res|
|
93
|
+
res.status=301
|
94
|
+
res.header['location']="http://127.0.0.1:12345/test1"
|
95
|
+
}
|
96
|
+
|
97
|
+
@server.mount_proc("/redirect_special_header") { |req, res|
|
98
|
+
res.status=301
|
99
|
+
res.header['location']="http://127.0.0.1:12345/header_test"
|
100
|
+
}
|
101
|
+
end
|
102
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fresh_simplehttp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Wilker Lucio
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-22 00:00:00 -03:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: "simple_http: Simple Http client lib. Use to do http requests without noise."
|
22
|
+
email: wilkerlucio@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- LICENSE
|
29
|
+
- README
|
30
|
+
- TODO
|
31
|
+
files:
|
32
|
+
- AUTHORS
|
33
|
+
- CHANGELOG
|
34
|
+
- LICENSE
|
35
|
+
- README
|
36
|
+
- Rakefile
|
37
|
+
- TODO
|
38
|
+
- VERSION
|
39
|
+
- fresh_simplehttp.gemspec
|
40
|
+
- lib/fresh_simplehttp.rb
|
41
|
+
- lib/simple_http.rb
|
42
|
+
- lib/simplehttp.rb
|
43
|
+
- setup.rb
|
44
|
+
- simplehttp.gemspec
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: http://github.com/wilkerlucio/simplehttp
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --charset=UTF-8
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.3.6
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: "simple_http: Simple Http client lib."
|
75
|
+
test_files:
|
76
|
+
- test/http_test.rb
|
77
|
+
- test/http_test_server.rb
|