webbed 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.gitignore +22 -0
  2. data/.travis.yml +7 -0
  3. data/.yardopts +6 -0
  4. data/Gemfile +5 -13
  5. data/Guardfile +5 -0
  6. data/README.md +36 -31
  7. data/Rakefile +7 -14
  8. data/lib/webbed.rb +28 -6
  9. data/lib/webbed/generic_message.rb +27 -15
  10. data/lib/webbed/headers.rb +2 -0
  11. data/lib/webbed/helpers/entity_headers_helper.rb +62 -0
  12. data/lib/webbed/helpers/method_helper.rb +83 -0
  13. data/lib/webbed/helpers/rack_request_helper.rb +86 -0
  14. data/lib/webbed/helpers/rack_response_helper.rb +56 -0
  15. data/lib/webbed/helpers/request_headers_helper.rb +62 -0
  16. data/lib/webbed/helpers/request_uri_helper.rb +34 -0
  17. data/lib/webbed/helpers/response_headers_helper.rb +48 -0
  18. data/lib/webbed/helpers/scheme_helper.rb +26 -0
  19. data/lib/webbed/http_version.rb +88 -33
  20. data/lib/webbed/media_type.rb +160 -0
  21. data/lib/webbed/method.rb +63 -33
  22. data/lib/webbed/request.rb +65 -21
  23. data/lib/webbed/response.rb +65 -24
  24. data/lib/webbed/status_code.rb +84 -17
  25. data/lib/webbed/version.rb +1 -1
  26. data/test/support/assertions.rb +17 -0
  27. data/test/support/runner.rb +326 -0
  28. data/test/test_helper.rb +13 -0
  29. data/test/webbed/generic_message_test.rb +44 -0
  30. data/test/webbed/headers_test.rb +31 -0
  31. data/test/webbed/helpers/entity_headers_helper_test.rb +68 -0
  32. data/test/webbed/helpers/method_helper_test.rb +151 -0
  33. data/test/webbed/helpers/rack_request_helper_test.rb +108 -0
  34. data/test/webbed/helpers/rack_response_helper_test.rb +33 -0
  35. data/test/webbed/helpers/request_headers_helper_test.rb +57 -0
  36. data/test/webbed/helpers/request_uri_helper_test.rb +32 -0
  37. data/test/webbed/helpers/response_headers_helper_test.rb +46 -0
  38. data/test/webbed/helpers/scheme_helper_test.rb +28 -0
  39. data/test/webbed/http_version_test.rb +52 -0
  40. data/test/webbed/media_type_test.rb +100 -0
  41. data/test/webbed/method_test.rb +160 -0
  42. data/test/webbed/request_test.rb +74 -0
  43. data/test/webbed/response_test.rb +86 -0
  44. data/test/webbed/status_code_test.rb +105 -0
  45. data/webbed.gemspec +31 -0
  46. 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