webbed 0.1.1 → 0.2.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.
- 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
|