http_router 0.5.4 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|