http_router 0.3.6 → 0.3.7
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/README.rdoc +2 -0
- data/lib/http_router/node.rb +12 -13
- data/lib/http_router/version.rb +1 -1
- data/spec/recognize_spec.rb +18 -1
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -39,6 +39,8 @@ Maps a route. The format for variables in paths is:
|
|
39
39
|
|
40
40
|
Everything else is treated literally. Optional parts are surrounded by brackets. Partially matching paths have a trailing <tt>*</tt>. Optional trailing slash matching is done with <tt>/?</tt>.
|
41
41
|
|
42
|
+
As well, you can escape the following characters with a backslash: <tt>( ) : *</tt>
|
43
|
+
|
42
44
|
Once you have a route object, use <tt>HttpRouter::Route#to</tt> to add a destination and <tt>HttpRouter::Route#name</tt> to name it.
|
43
45
|
|
44
46
|
e.g.
|
data/lib/http_router/node.rb
CHANGED
@@ -103,17 +103,16 @@ class HttpRouter
|
|
103
103
|
end
|
104
104
|
case RequestNode::RequestMethods.index(method) <=> RequestNode::RequestMethods.index(current_node.request_method)
|
105
105
|
when 0 #use this node
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
current_nodes[current_node_index] = (current_node.lookup[request_options[method]] ||= router.request_node)
|
106
|
+
Array(request_options[method]).each_with_index do |request_value, index|
|
107
|
+
if request_value.is_a?(Regexp)
|
108
|
+
new_node = router.request_node
|
109
|
+
current_nodes[index == 0 ? current_node_index : current_nodes.length] = new_node
|
110
|
+
current_node.create_linear
|
111
|
+
current_node.linear << [request_value, new_node]
|
112
|
+
else
|
113
|
+
current_node.create_lookup
|
114
|
+
current_nodes[index == 0 ? current_node_index : current_nodes.length] = (current_node.lookup[request_value] ||= router.request_node)
|
115
|
+
end
|
117
116
|
end
|
118
117
|
when 1 #this node is farther ahead
|
119
118
|
current_nodes[current_node_index] = (current_node.catchall ||= router.request_node)
|
@@ -201,7 +200,7 @@ class HttpRouter
|
|
201
200
|
end
|
202
201
|
|
203
202
|
class RequestNode < Node
|
204
|
-
RequestMethods = [:request_method, :host, :port, :scheme]
|
203
|
+
RequestMethods = [:request_method, :host, :port, :scheme, :user_agent, :ip, :fullpath, :query_string]
|
205
204
|
attr_accessor :request_method
|
206
205
|
|
207
206
|
def find_on_request_methods(request, alternate_request_methods)
|
@@ -211,7 +210,7 @@ class HttpRouter
|
|
211
210
|
next_node = @linear.find do |(regexp, node)|
|
212
211
|
regexp === request_value
|
213
212
|
end
|
214
|
-
next_node &&= next_node.find_on_request_methods(request, alternate_request_methods)
|
213
|
+
next_node &&= next_node.last.find_on_request_methods(request, alternate_request_methods)
|
215
214
|
return next_node if next_node
|
216
215
|
end
|
217
216
|
if @lookup and next_node = (@lookup[request_value] && @lookup[request_value].find_on_request_methods(request, alternate_request_methods))
|
data/lib/http_router/version.rb
CHANGED
data/spec/recognize_spec.rb
CHANGED
@@ -20,13 +20,23 @@ describe "HttpRouter#recognize" do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context("with
|
23
|
+
context("with escaping") do
|
24
24
|
it "should recognize ()" do
|
25
25
|
route = @router.add('/test\(:variable\)').to(:test)
|
26
26
|
response = @router.recognize(Rack::MockRequest.env_for('/test(hello)'))
|
27
27
|
response.route.should == route
|
28
28
|
response.params.first.should == 'hello'
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should recognize :" do
|
32
|
+
route = @router.add('/test\:variable').to(:test)
|
33
|
+
@router.recognize(Rack::MockRequest.env_for('/test:variable')).dest.should == :test
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should recognize *" do
|
37
|
+
route = @router.add('/test\*variable').to(:test)
|
38
|
+
@router.recognize(Rack::MockRequest.env_for('/test*variable')).dest.should == :test
|
39
|
+
end
|
30
40
|
end
|
31
41
|
|
32
42
|
context("with partial matching") do
|
@@ -169,6 +179,13 @@ describe "HttpRouter#recognize" do
|
|
169
179
|
@router.recognize(Rack::MockRequest.env_for('http://host2/test', :method => 'POST')).dest.should == :host2_post
|
170
180
|
end
|
171
181
|
|
182
|
+
it "should be able to use regexp in request method conditions" do
|
183
|
+
@router.get("/test").host(/host1/).to(:with_regexp)
|
184
|
+
@router.get("/test").to(:without_regexp)
|
185
|
+
@router.recognize(Rack::MockRequest.env_for('http://host2/test')).dest.should == :without_regexp
|
186
|
+
@router.recognize(Rack::MockRequest.env_for('http://host2.host1.com/test')).dest.should == :with_regexp
|
187
|
+
end
|
188
|
+
|
172
189
|
it "should try both specific and non-specifc routes" do
|
173
190
|
@router.post("/test").host('host1').to(:post_host1)
|
174
191
|
@router.add("/test").host('host2').to(:any_post2)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 7
|
10
|
+
version: 0.3.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hull
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-31 00:00:00 -
|
18
|
+
date: 2010-07-31 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|