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.
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