http_router 0.5.4 → 0.6.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/lib/http_router.rb +58 -210
- data/lib/http_router/node.rb +124 -226
- data/lib/http_router/node/arbitrary.rb +16 -0
- data/lib/http_router/node/free_regex.rb +19 -0
- data/lib/http_router/node/glob.rb +16 -0
- data/lib/http_router/node/glob_regex.rb +9 -0
- data/lib/http_router/node/regex.rb +26 -0
- data/lib/http_router/node/request.rb +44 -0
- data/lib/http_router/node/spanning_regex.rb +16 -0
- data/lib/http_router/node/variable.rb +11 -0
- data/lib/http_router/optional_compiler.rb +8 -15
- data/lib/http_router/path.rb +36 -49
- data/lib/http_router/regex_route.rb +20 -0
- data/lib/http_router/request.rb +26 -0
- data/lib/http_router/response.rb +13 -0
- data/lib/http_router/route.rb +121 -299
- data/lib/http_router/version.rb +1 -1
- data/test/helper.rb +11 -9
- data/test/rack/test_urlmap.rb +9 -9
- data/test/test_arbitrary.rb +18 -10
- data/test/test_misc.rb +28 -28
- data/test/test_mounting.rb +81 -81
- data/test/test_request.rb +6 -0
- data/test/test_trailing_slash.rb +0 -4
- data/test/test_variable.rb +1 -9
- metadata +16 -16
- data/lib/http_router/glob.rb +0 -20
- data/lib/http_router/interface/sinatra.rb +0 -149
- data/lib/http_router/parts.rb +0 -24
- data/lib/http_router/rack.rb +0 -18
- data/lib/http_router/rack/builder.rb +0 -60
- data/lib/http_router/rack/url_map.rb +0 -10
- data/lib/http_router/root.rb +0 -36
- data/lib/http_router/static.rb +0 -5
- data/lib/http_router/variable.rb +0 -30
- data/test/sinatra/recognize_spec.rb +0 -168
- data/test/sinatra/test_recognize.rb +0 -150
@@ -1,150 +0,0 @@
|
|
1
|
-
require "sinatra"
|
2
|
-
require "http_router/interface/sinatra"
|
3
|
-
|
4
|
-
module CallWithMockRequestMixin
|
5
|
-
def call_with_mock_request(url = "/sample", method = "GET", params = Hash.new)
|
6
|
-
params.merge!(:method => method)
|
7
|
-
request = Rack::MockRequest.new(self)
|
8
|
-
request.request(method, url, params)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class TestRecognize < MiniTest::Unit::TestCase
|
13
|
-
|
14
|
-
def setup
|
15
|
-
@app = Sinatra.new { register HttpRouter::Interface::Sinatra::Extension }
|
16
|
-
@app.extend(CallWithMockRequestMixin)
|
17
|
-
@app.reset!
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_basic
|
21
|
-
response = @app.call_with_mock_request('/bar')
|
22
|
-
assert_equal 404, response.status
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_map_index
|
26
|
-
@app.get("/") { "index" }
|
27
|
-
response = @app.call_with_mock_request('/')
|
28
|
-
assert_equal 200, response.status
|
29
|
-
assert_equal "index", response.body
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_trailing_slash
|
33
|
-
@app.get("/foo") { "foo" }
|
34
|
-
response = @app.call_with_mock_request('/foo')
|
35
|
-
assert_equal 200, response.status
|
36
|
-
assert_equal "foo", response.body
|
37
|
-
response = @app.call_with_mock_request('/foo/')
|
38
|
-
assert_equal 200, response.status
|
39
|
-
assert_equal "foo", response.body
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_trailing_slash2
|
43
|
-
@app.get("/foo") { "foo" }
|
44
|
-
@app.get("/foo/bar") { "bar" }
|
45
|
-
response = @app.call_with_mock_request('/foo')
|
46
|
-
assert_equal 200, response.status
|
47
|
-
assert_equal "foo", response.body
|
48
|
-
response = @app.call_with_mock_request('/foo/bar')
|
49
|
-
assert_equal 200, response.status
|
50
|
-
assert_equal "bar", response.body
|
51
|
-
response = @app.call_with_mock_request('/foo/')
|
52
|
-
assert_equal 200, response.status
|
53
|
-
assert_equal "foo", response.body
|
54
|
-
response = @app.call_with_mock_request('/foo/bar/')
|
55
|
-
assert_equal 200, response.status
|
56
|
-
assert_equal "bar", response.body
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_trailing_slash_with_optional_param
|
60
|
-
@app.get("/foo/(:bar)") { params[:bar] }
|
61
|
-
@app.get("/bar(/:foo)") { params[:foo] }
|
62
|
-
response = @app.call_with_mock_request('/foo/bar')
|
63
|
-
assert_equal 200, response.status
|
64
|
-
assert_equal "bar", response.body
|
65
|
-
response = @app.call_with_mock_request('/bar/foo')
|
66
|
-
assert_equal 200, response.status
|
67
|
-
assert_equal "foo", response.body
|
68
|
-
response = @app.call_with_mock_request('/bar')
|
69
|
-
assert_equal 200, response.status
|
70
|
-
assert_equal "", response.body
|
71
|
-
response = @app.call_with_mock_request('/bar/')
|
72
|
-
assert_equal 200, response.status
|
73
|
-
assert_equal "", response.body
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_trailing_question_mark
|
77
|
-
@app.get("/foo/?") { "foo" }
|
78
|
-
response = @app.call_with_mock_request('/foo')
|
79
|
-
assert_equal 200, response.status
|
80
|
-
assert_equal "foo", response.body
|
81
|
-
response = @app.call_with_mock_request('/foo/')
|
82
|
-
assert_equal 200, response.status
|
83
|
-
assert_equal "foo", response.body
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_map_basic
|
87
|
-
@app.get('/hi', :name => :hi) { generate(:hi) }
|
88
|
-
response = @app.call_with_mock_request('/hi')
|
89
|
-
assert_equal 200, response.status
|
90
|
-
assert_equal "/hi", response.body
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_map_basic2
|
94
|
-
@app.get('/hi', :name => :hi) { generate(:hi) }
|
95
|
-
response = @app.call_with_mock_request('/hi/')
|
96
|
-
assert_equal 200, response.status
|
97
|
-
assert_equal "/hi", response.body
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_map_param
|
101
|
-
@app.get('/hi/:id', :name => :hi) { generate(:hi, :id => 18) }
|
102
|
-
response = @app.call_with_mock_request('/hi/1')
|
103
|
-
assert_equal 200, response.status
|
104
|
-
assert_equal "/hi/18", response.body
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_map_param2
|
108
|
-
@app.get('/hi-:id', :name => :hi) { generate(:hi, :id => 18) }
|
109
|
-
response = @app.call_with_mock_request('/hi-1')
|
110
|
-
assert_equal 200, response.status
|
111
|
-
assert_equal "/hi-18", response.body
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_map_complex
|
115
|
-
@app.get('/hi/:foo/:bar/:baz(.:format)') { "/#{params[:foo]}/#{params[:bar]}/#{params[:baz]}/#{params[:format]}" }
|
116
|
-
response = @app.call_with_mock_request('/hi/foo/bar/baz')
|
117
|
-
assert_equal 200, response.status
|
118
|
-
assert_equal "/foo/bar/baz/", response.body
|
119
|
-
response = @app.call_with_mock_request('/hi/foo/bar-bax/baz')
|
120
|
-
assert_equal 200, response.status
|
121
|
-
assert_equal "/foo/bar-bax/baz/", response.body
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_map_regexp
|
125
|
-
@app.get('/numbers/:digits', :matching => { :digits => /\d+/ }) { params[:digits] }
|
126
|
-
response = @app.call_with_mock_request('/numbers/2010')
|
127
|
-
assert_equal 200, response.status
|
128
|
-
assert_equal "2010", response.body
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_not_map_regex
|
132
|
-
@app.get('/numbers/:digits', :matching => { :digits => /\d+/ }) { params[:digits] }
|
133
|
-
response = @app.call_with_mock_request('/numbers/nan')
|
134
|
-
assert_equal 404, response.status
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_404
|
138
|
-
response = @app.call_with_mock_request('/bar')
|
139
|
-
assert_equal 404, response.status
|
140
|
-
assert_match response.body, /Sinatra doesn't know this ditty/
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_405
|
144
|
-
@app.post('/bar') { 'found' }
|
145
|
-
@app.put('/bar') { 'found' }
|
146
|
-
response = @app.call_with_mock_request('/bar')
|
147
|
-
assert_equal 405, response.status
|
148
|
-
assert_equal ['POST', 'PUT'], response.headers['Allow'].split(/\s*,\s*/).sort
|
149
|
-
end
|
150
|
-
end
|