webbed 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +22 -0
- data/.travis.yml +7 -0
- data/.yardopts +6 -0
- data/Gemfile +5 -13
- data/Guardfile +5 -0
- data/README.md +36 -31
- data/Rakefile +7 -14
- data/lib/webbed.rb +28 -6
- data/lib/webbed/generic_message.rb +27 -15
- data/lib/webbed/headers.rb +2 -0
- data/lib/webbed/helpers/entity_headers_helper.rb +62 -0
- data/lib/webbed/helpers/method_helper.rb +83 -0
- data/lib/webbed/helpers/rack_request_helper.rb +86 -0
- data/lib/webbed/helpers/rack_response_helper.rb +56 -0
- data/lib/webbed/helpers/request_headers_helper.rb +62 -0
- data/lib/webbed/helpers/request_uri_helper.rb +34 -0
- data/lib/webbed/helpers/response_headers_helper.rb +48 -0
- data/lib/webbed/helpers/scheme_helper.rb +26 -0
- data/lib/webbed/http_version.rb +88 -33
- data/lib/webbed/media_type.rb +160 -0
- data/lib/webbed/method.rb +63 -33
- data/lib/webbed/request.rb +65 -21
- data/lib/webbed/response.rb +65 -24
- data/lib/webbed/status_code.rb +84 -17
- data/lib/webbed/version.rb +1 -1
- data/test/support/assertions.rb +17 -0
- data/test/support/runner.rb +326 -0
- data/test/test_helper.rb +13 -0
- data/test/webbed/generic_message_test.rb +44 -0
- data/test/webbed/headers_test.rb +31 -0
- data/test/webbed/helpers/entity_headers_helper_test.rb +68 -0
- data/test/webbed/helpers/method_helper_test.rb +151 -0
- data/test/webbed/helpers/rack_request_helper_test.rb +108 -0
- data/test/webbed/helpers/rack_response_helper_test.rb +33 -0
- data/test/webbed/helpers/request_headers_helper_test.rb +57 -0
- data/test/webbed/helpers/request_uri_helper_test.rb +32 -0
- data/test/webbed/helpers/response_headers_helper_test.rb +46 -0
- data/test/webbed/helpers/scheme_helper_test.rb +28 -0
- data/test/webbed/http_version_test.rb +52 -0
- data/test/webbed/media_type_test.rb +100 -0
- data/test/webbed/method_test.rb +160 -0
- data/test/webbed/request_test.rb +74 -0
- data/test/webbed/response_test.rb +86 -0
- data/test/webbed/status_code_test.rb +105 -0
- data/webbed.gemspec +31 -0
- metadata +128 -41
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class MethodHelperTest < TestCase
|
6
|
+
test '#options?' do
|
7
|
+
request = Webbed::Request.new('OPTIONS', '*', {}, '')
|
8
|
+
|
9
|
+
assert request.options?
|
10
|
+
refute request.get?
|
11
|
+
refute request.head?
|
12
|
+
refute request.post?
|
13
|
+
refute request.put?
|
14
|
+
refute request.delete?
|
15
|
+
refute request.trace?
|
16
|
+
refute request.connect?
|
17
|
+
refute request.patch?
|
18
|
+
assert request.safe?
|
19
|
+
assert request.idempotent?
|
20
|
+
end
|
21
|
+
|
22
|
+
test '#get?' do
|
23
|
+
request = Webbed::Request.new('GET', '*', {}, '')
|
24
|
+
|
25
|
+
refute request.options?
|
26
|
+
assert request.get?
|
27
|
+
refute request.head?
|
28
|
+
refute request.post?
|
29
|
+
refute request.put?
|
30
|
+
refute request.delete?
|
31
|
+
refute request.trace?
|
32
|
+
refute request.connect?
|
33
|
+
refute request.patch?
|
34
|
+
assert request.safe?
|
35
|
+
assert request.idempotent?
|
36
|
+
end
|
37
|
+
|
38
|
+
test '#head?' do
|
39
|
+
request = Webbed::Request.new('HEAD', '*', {}, '')
|
40
|
+
|
41
|
+
refute request.options?
|
42
|
+
refute request.get?
|
43
|
+
assert request.head?
|
44
|
+
refute request.post?
|
45
|
+
refute request.put?
|
46
|
+
refute request.delete?
|
47
|
+
refute request.trace?
|
48
|
+
refute request.connect?
|
49
|
+
refute request.patch?
|
50
|
+
assert request.safe?
|
51
|
+
assert request.idempotent?
|
52
|
+
end
|
53
|
+
|
54
|
+
test '#post?' do
|
55
|
+
request = Webbed::Request.new('POST', '*', {}, '')
|
56
|
+
|
57
|
+
refute request.options?
|
58
|
+
refute request.get?
|
59
|
+
refute request.head?
|
60
|
+
assert request.post?
|
61
|
+
refute request.put?
|
62
|
+
refute request.delete?
|
63
|
+
refute request.trace?
|
64
|
+
refute request.connect?
|
65
|
+
refute request.patch?
|
66
|
+
refute request.safe?
|
67
|
+
refute request.idempotent?
|
68
|
+
end
|
69
|
+
|
70
|
+
test '#put?' do
|
71
|
+
request = Webbed::Request.new('PUT', '*', {}, '')
|
72
|
+
|
73
|
+
refute request.options?
|
74
|
+
refute request.get?
|
75
|
+
refute request.head?
|
76
|
+
refute request.post?
|
77
|
+
assert request.put?
|
78
|
+
refute request.delete?
|
79
|
+
refute request.trace?
|
80
|
+
refute request.connect?
|
81
|
+
refute request.patch?
|
82
|
+
refute request.safe?
|
83
|
+
assert request.idempotent?
|
84
|
+
end
|
85
|
+
|
86
|
+
test '#delete?' do
|
87
|
+
request = Webbed::Request.new('DELETE', '*', {}, '')
|
88
|
+
|
89
|
+
refute request.options?
|
90
|
+
refute request.get?
|
91
|
+
refute request.head?
|
92
|
+
refute request.post?
|
93
|
+
refute request.put?
|
94
|
+
assert request.delete?
|
95
|
+
refute request.trace?
|
96
|
+
refute request.connect?
|
97
|
+
refute request.patch?
|
98
|
+
refute request.safe?
|
99
|
+
assert request.idempotent?
|
100
|
+
end
|
101
|
+
|
102
|
+
test '#trace?' do
|
103
|
+
request = Webbed::Request.new('TRACE', '*', {}, '')
|
104
|
+
|
105
|
+
refute request.options?
|
106
|
+
refute request.get?
|
107
|
+
refute request.head?
|
108
|
+
refute request.post?
|
109
|
+
refute request.put?
|
110
|
+
refute request.delete?
|
111
|
+
assert request.trace?
|
112
|
+
refute request.connect?
|
113
|
+
refute request.patch?
|
114
|
+
assert request.safe?
|
115
|
+
assert request.idempotent?
|
116
|
+
end
|
117
|
+
|
118
|
+
test '#connect?' do
|
119
|
+
request = Webbed::Request.new('CONNECT', '*', {}, '')
|
120
|
+
|
121
|
+
refute request.options?
|
122
|
+
refute request.get?
|
123
|
+
refute request.head?
|
124
|
+
refute request.post?
|
125
|
+
refute request.put?
|
126
|
+
refute request.delete?
|
127
|
+
refute request.trace?
|
128
|
+
assert request.connect?
|
129
|
+
refute request.patch?
|
130
|
+
refute request.safe?
|
131
|
+
refute request.idempotent?
|
132
|
+
end
|
133
|
+
|
134
|
+
test '#patch?' do
|
135
|
+
request = Webbed::Request.new('PATCH', '*', {}, '')
|
136
|
+
|
137
|
+
refute request.options?
|
138
|
+
refute request.get?
|
139
|
+
refute request.head?
|
140
|
+
refute request.post?
|
141
|
+
refute request.put?
|
142
|
+
refute request.delete?
|
143
|
+
refute request.trace?
|
144
|
+
refute request.connect?
|
145
|
+
assert request.patch?
|
146
|
+
refute request.safe?
|
147
|
+
refute request.idempotent?
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class RackRequestHelperTest < TestCase
|
6
|
+
test '.from_rack' do
|
7
|
+
rack_env = {
|
8
|
+
'REQUEST_METHOD' => 'GET',
|
9
|
+
'PATH_INFO' => '/test',
|
10
|
+
'QUERY_STRING' => 'foo=bar',
|
11
|
+
'HTTP_HOST' => 'google.com',
|
12
|
+
'HTTP_ACCEPT' => '*/*',
|
13
|
+
'HTTP_IF_MATCH' => 'foo',
|
14
|
+
'CONTENT_TYPE' => 'text/plain',
|
15
|
+
'CONTENT_LENGTH' => '0',
|
16
|
+
'HTTP_VERSION' => 'HTTP/1.0',
|
17
|
+
'rack.url_scheme' => 'https',
|
18
|
+
'rack.input' => StringIO.new('Foobar')
|
19
|
+
}
|
20
|
+
|
21
|
+
request = Webbed::Request.from_rack(rack_env)
|
22
|
+
|
23
|
+
assert_equal Webbed::Method::GET, request.method
|
24
|
+
assert_equal Addressable::URI.parse('/test?foo=bar'), request.request_uri
|
25
|
+
assert_equal 'google.com', request.headers['Host']
|
26
|
+
assert_equal '*/*', request.headers['Accept']
|
27
|
+
assert_equal 'foo', request.headers['If-Match']
|
28
|
+
assert_equal 'text/plain', request.headers['Content-Type']
|
29
|
+
assert_equal '0', request.headers['Content-Length']
|
30
|
+
assert_equal 'https', request.scheme
|
31
|
+
assert_equal 'Foobar', request.entity_body.gets
|
32
|
+
assert_equal Webbed::HTTPVersion::ONE_POINT_OH, request.http_version
|
33
|
+
assert_same rack_env, request.rack_env
|
34
|
+
end
|
35
|
+
|
36
|
+
test '.from_rack without an HTTP Version' do
|
37
|
+
request = Webbed::Request.from_rack({
|
38
|
+
'REQUEST_METHOD' => 'GET',
|
39
|
+
'PATH_INFO' => '/test',
|
40
|
+
'QUERY_STRING' => 'foo=bar',
|
41
|
+
'HTTP_HOST' => 'google.com'
|
42
|
+
})
|
43
|
+
|
44
|
+
assert_equal Webbed::HTTPVersion::ONE_POINT_ONE, request.http_version
|
45
|
+
end
|
46
|
+
|
47
|
+
test '#to_rack without an environment' do
|
48
|
+
string_io = StringIO.new('Foobar')
|
49
|
+
|
50
|
+
request = Webbed::Request.new('GET', '/test?foo=bar', {
|
51
|
+
'Host' => 'google.com',
|
52
|
+
'Accept' => '*/*',
|
53
|
+
'Content-Type' => 'text/plain',
|
54
|
+
'Content-Length' => '0'
|
55
|
+
}, string_io, :http_version => 1.0, :scheme => 'https')
|
56
|
+
|
57
|
+
assert_equal({
|
58
|
+
'REQUEST_METHOD' => 'GET',
|
59
|
+
'PATH_INFO' => '/test',
|
60
|
+
'QUERY_STRING' => 'foo=bar',
|
61
|
+
'HTTP_HOST' => 'google.com',
|
62
|
+
'HTTP_ACCEPT' => '*/*',
|
63
|
+
'CONTENT_TYPE' => 'text/plain',
|
64
|
+
'CONTENT_LENGTH' => '0',
|
65
|
+
'HTTP_VERSION' => 'HTTP/1.0',
|
66
|
+
'rack.url_scheme' => 'https',
|
67
|
+
'rack.input' => string_io
|
68
|
+
}, request.to_rack)
|
69
|
+
end
|
70
|
+
|
71
|
+
test '#to_rack with an environment' do
|
72
|
+
string_io = StringIO.new('Foobar')
|
73
|
+
|
74
|
+
request = Webbed::Request.from_rack({
|
75
|
+
'REQUEST_METHOD' => 'GET',
|
76
|
+
'PATH_INFO' => '/test',
|
77
|
+
'QUERY_STRING' => 'foo=bar',
|
78
|
+
'HTTP_HOST' => 'google.com',
|
79
|
+
'HTTP_ACCEPT' => '*/*',
|
80
|
+
'HTTP_IF_MATCH' => 'foo',
|
81
|
+
'CONTENT_TYPE' => 'text/plain',
|
82
|
+
'CONTENT_LENGTH' => '0',
|
83
|
+
'HTTP_VERSION' => 'HTTP/1.0',
|
84
|
+
'rack.url_scheme' => 'https',
|
85
|
+
'rack.input' => string_io,
|
86
|
+
'my.extension' => 'test'
|
87
|
+
})
|
88
|
+
|
89
|
+
request.method = 'POST'
|
90
|
+
|
91
|
+
assert_equal({
|
92
|
+
'REQUEST_METHOD' => 'POST',
|
93
|
+
'PATH_INFO' => '/test',
|
94
|
+
'QUERY_STRING' => 'foo=bar',
|
95
|
+
'HTTP_HOST' => 'google.com',
|
96
|
+
'HTTP_ACCEPT' => '*/*',
|
97
|
+
'HTTP_IF_MATCH' => 'foo',
|
98
|
+
'CONTENT_TYPE' => 'text/plain',
|
99
|
+
'CONTENT_LENGTH' => '0',
|
100
|
+
'HTTP_VERSION' => 'HTTP/1.0',
|
101
|
+
'rack.url_scheme' => 'https',
|
102
|
+
'rack.input' => string_io,
|
103
|
+
'my.extension' => 'test'
|
104
|
+
}, request.to_rack)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class RackResponseHelperTest < TestCase
|
6
|
+
test '#to_rack' do
|
7
|
+
response = Webbed::Response.new(200, {}, '')
|
8
|
+
|
9
|
+
if ''.respond_to?(:each)
|
10
|
+
assert_equal [200, {}, ''], response.to_rack
|
11
|
+
else
|
12
|
+
assert_equal [200, {}, ['']], response.to_rack
|
13
|
+
end
|
14
|
+
|
15
|
+
string_io = StringIO.new
|
16
|
+
response = Webbed::Response.new(200, {}, string_io)
|
17
|
+
assert_equal [200, {}, string_io], response.to_rack
|
18
|
+
end
|
19
|
+
|
20
|
+
test '#to_a' do
|
21
|
+
response = Webbed::Response.new(200, {}, '')
|
22
|
+
assert_equal ['200 OK', {}, ''], response.to_a
|
23
|
+
end
|
24
|
+
|
25
|
+
test '.from_rack' do
|
26
|
+
response = Webbed::Response.from_rack([200, { 'Content-Length' => '0'}, 'foo'])
|
27
|
+
assert_equal 200, response.status_code
|
28
|
+
assert_equal 0, response.content_length
|
29
|
+
assert_equal 'foo', response.entity_body
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class RequestHeadersHelper < TestCase
|
6
|
+
def setup
|
7
|
+
@request = Webbed::Request.new('GET', '*', {}, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
test '#host' do
|
11
|
+
assert_nil @request.host
|
12
|
+
|
13
|
+
@request.headers['Host'] = 'example.com'
|
14
|
+
assert_equal 'example.com', @request.host
|
15
|
+
|
16
|
+
@request.host = 'test.com'
|
17
|
+
assert_equal 'test.com', @request.host
|
18
|
+
assert_equal 'test.com', @request.headers['Host']
|
19
|
+
end
|
20
|
+
|
21
|
+
test '#from' do
|
22
|
+
assert_nil @request.from
|
23
|
+
|
24
|
+
@request.headers['From'] = 'test@example.com'
|
25
|
+
assert_equal 'test@example.com', @request.from
|
26
|
+
|
27
|
+
@request.from = 'foo@bar.com'
|
28
|
+
assert_equal 'foo@bar.com', @request.from
|
29
|
+
assert_equal 'foo@bar.com', @request.headers['From']
|
30
|
+
end
|
31
|
+
|
32
|
+
test '#max_forwards' do
|
33
|
+
assert_nil @request.max_forwards
|
34
|
+
|
35
|
+
@request.headers['Max-Forwards'] = '56'
|
36
|
+
assert_equal 56, @request.max_forwards
|
37
|
+
|
38
|
+
@request.max_forwards = 1234
|
39
|
+
assert_equal 1234, @request.max_forwards
|
40
|
+
assert_equal '1234', @request.headers['Max-Forwards']
|
41
|
+
end
|
42
|
+
|
43
|
+
test '#referer' do
|
44
|
+
assert_nil @request.referer
|
45
|
+
|
46
|
+
@request.headers['Referer'] = 'http://foo.com'
|
47
|
+
assert_instance_of Addressable::URI, @request.referer
|
48
|
+
assert_equal Addressable::URI.parse('http://foo.com'), @request.referer
|
49
|
+
|
50
|
+
@request.referer = 'http://example.com'
|
51
|
+
assert_instance_of Addressable::URI, @request.referer
|
52
|
+
assert_equal Addressable::URI.parse('http://example.com'), @request.referer
|
53
|
+
assert_equal 'http://example.com', @request.headers['Referer']
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class RequestURIHelperTest < TestCase
|
6
|
+
test '#request_url' do
|
7
|
+
request = Webbed::Request.new('GET', '/foo', { 'Host' => 'example.com' }, '')
|
8
|
+
assert_equal request.request_uri, request.request_url
|
9
|
+
end
|
10
|
+
|
11
|
+
test '#uri and #url' do
|
12
|
+
no_host = Webbed::Request.new('GET', '/foo', {}, '')
|
13
|
+
assert_instance_of Addressable::URI, no_host.uri
|
14
|
+
assert_instance_of Addressable::URI, no_host.url
|
15
|
+
assert_equal no_host.request_uri, no_host.uri
|
16
|
+
assert_equal no_host.request_uri, no_host.url
|
17
|
+
|
18
|
+
request_uri_with_host = Webbed::Request.new('GET', 'http://example2.com/foo', { 'Host' => 'example.com' }, '')
|
19
|
+
assert_instance_of Addressable::URI, request_uri_with_host.uri
|
20
|
+
assert_instance_of Addressable::URI, request_uri_with_host.url
|
21
|
+
assert_equal request_uri_with_host.request_uri, request_uri_with_host.uri
|
22
|
+
assert_equal request_uri_with_host.request_uri, request_uri_with_host.url
|
23
|
+
|
24
|
+
request_uri_without_host = Webbed::Request.new('GET', '/foo', { 'Host' => 'example.com' }, '')
|
25
|
+
assert_instance_of Addressable::URI, request_uri_without_host.uri
|
26
|
+
assert_instance_of Addressable::URI, request_uri_without_host.url
|
27
|
+
assert_equal Addressable::URI.parse('http://example.com/foo'), request_uri_without_host.uri
|
28
|
+
assert_equal Addressable::URI.parse('http://example.com/foo'), request_uri_without_host.url
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class ResponseHeadersHelperTest < TestCase
|
6
|
+
def setup
|
7
|
+
@response = Webbed::Response.new(200, {}, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
test '#etag' do
|
11
|
+
assert_nil @response.etag
|
12
|
+
|
13
|
+
@response.headers['ETag'] = 'asdf'
|
14
|
+
assert_equal 'asdf', @response.etag
|
15
|
+
|
16
|
+
@response.etag = 'foo'
|
17
|
+
assert_equal 'foo', @response.etag
|
18
|
+
assert_equal 'foo', @response.headers['ETag']
|
19
|
+
end
|
20
|
+
|
21
|
+
test '#age' do
|
22
|
+
assert_nil @response.age
|
23
|
+
|
24
|
+
@response.headers['Age'] = '123'
|
25
|
+
assert_equal 123, @response.age
|
26
|
+
|
27
|
+
@response.age = 456
|
28
|
+
assert_equal 456, @response.age
|
29
|
+
assert_equal '456', @response.headers['Age']
|
30
|
+
end
|
31
|
+
|
32
|
+
test '#location' do
|
33
|
+
assert_nil @response.location
|
34
|
+
|
35
|
+
@response.headers['Location'] = 'http://example.com/test'
|
36
|
+
assert_instance_of Addressable::URI, @response.location
|
37
|
+
assert_equal Addressable::URI.parse('http://example.com/test'), @response.location
|
38
|
+
|
39
|
+
@response.location = 'http://test.com/foo'
|
40
|
+
assert_instance_of Addressable::URI, @response.location
|
41
|
+
assert_equal Addressable::URI.parse('http://test.com/foo'), @response.location
|
42
|
+
assert_equal 'http://test.com/foo', @response.headers['Location']
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module WebbedTest
|
4
|
+
module HelperTest
|
5
|
+
class SchemeHelperTest < TestCase
|
6
|
+
test 'HTTP scheme' do
|
7
|
+
request = Webbed::Request.new('GET', '*', {}, '', :scheme => 'http')
|
8
|
+
|
9
|
+
refute request.secure?
|
10
|
+
assert_equal 80, request.default_port
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'HTTPS scheme' do
|
14
|
+
request = Webbed::Request.new('GET', '*', {}, '', :scheme => 'https')
|
15
|
+
|
16
|
+
assert request.secure?
|
17
|
+
assert_equal 443, request.default_port
|
18
|
+
end
|
19
|
+
|
20
|
+
test 'unknown scheme' do
|
21
|
+
request = Webbed::Request.new('GET', '*', {}, '', :scheme => 'foo')
|
22
|
+
|
23
|
+
refute request.secure?
|
24
|
+
assert_nil request.default_port
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|