http_router 0.3.15 → 0.3.16
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/http_router/node.rb +7 -2
- data/lib/http_router/route.rb +4 -8
- data/lib/http_router/version.rb +1 -1
- data/lib/http_router.rb +2 -2
- metadata +4 -4
data/.gitignore
CHANGED
data/lib/http_router/node.rb
CHANGED
@@ -134,6 +134,11 @@ class HttpRouter
|
|
134
134
|
current_nodes
|
135
135
|
end
|
136
136
|
|
137
|
+
def escape_val(val)
|
138
|
+
val.is_a?(Array) ? val.each{|v| HttpRouter.uri_unescape!(v)} : HttpRouter.uri_unescape!(val)
|
139
|
+
val
|
140
|
+
end
|
141
|
+
|
137
142
|
def find_on_parts(request, parts, params)
|
138
143
|
if parts and !parts.empty?
|
139
144
|
if potential = potential_match(request, parts, params)
|
@@ -147,7 +152,7 @@ class HttpRouter
|
|
147
152
|
if tester.respond_to?(:matches?) and match = tester.matches?(parts)
|
148
153
|
dupped_parts = parts.dup
|
149
154
|
dupped_params = params.dup
|
150
|
-
dupped_params
|
155
|
+
dupped_params << escape_val(tester.consume(match, dupped_parts))
|
151
156
|
parts.replace(dupped_parts) if response = node.find_on_parts(request, dupped_parts, dupped_params)
|
152
157
|
elsif tester.respond_to?(:match) and match = tester.match(parts.whole_path) and match.begin(0) == 0
|
153
158
|
dupped_parts = router.split(parts.whole_path[match[0].size, parts.whole_path.size])
|
@@ -171,7 +176,7 @@ class HttpRouter
|
|
171
176
|
end
|
172
177
|
end
|
173
178
|
if @catchall
|
174
|
-
params
|
179
|
+
params << escape_val(@catchall.variable.consume(nil, parts))
|
175
180
|
return @catchall.find_on_parts(request, parts, params)
|
176
181
|
end
|
177
182
|
end
|
data/lib/http_router/route.rb
CHANGED
@@ -336,6 +336,10 @@ class HttpRouter
|
|
336
336
|
end
|
337
337
|
end
|
338
338
|
|
339
|
+
def significant_variable_names
|
340
|
+
@significant_variable_names ||= @path.scan(/(^|[^\\])[:\*]([a-zA-Z0-9_]+)/).map{|p| p.last.to_sym}
|
341
|
+
end
|
342
|
+
|
339
343
|
def generate_interstitial_parts(part)
|
340
344
|
part_segments = part.scan(/:[a-zA-Z_0-9]+|[^:]+/)
|
341
345
|
if part_segments.size > 1
|
@@ -366,13 +370,5 @@ class HttpRouter
|
|
366
370
|
raise AlreadyCompiledException if compiled?
|
367
371
|
end
|
368
372
|
|
369
|
-
def significant_variable_names
|
370
|
-
unless @significant_variable_names
|
371
|
-
@significant_variable_names = @paths.map { |p| p.variable_names }
|
372
|
-
@significant_variable_names.flatten!
|
373
|
-
@significant_variable_names.uniq!
|
374
|
-
end
|
375
|
-
@significant_variable_names
|
376
|
-
end
|
377
373
|
end
|
378
374
|
end
|
data/lib/http_router/version.rb
CHANGED
data/lib/http_router.rb
CHANGED
@@ -259,8 +259,8 @@ class HttpRouter
|
|
259
259
|
s.to_s.gsub!(/([^:\/?\[\]\-_~\.!\$&'\(\)\*\+,;=@a-zA-Z0-9]+)/n) { "%#{$1.unpack('H2'*$1.size).join('%').upcase}" }
|
260
260
|
end
|
261
261
|
|
262
|
-
def self.uri_unescape(s)
|
263
|
-
s.to_s.gsub(/((?:%[0-9a-fA-F]{2})+)/n){ [$1.delete('%')].pack('H*') }
|
262
|
+
def self.uri_unescape!(s)
|
263
|
+
s.to_s.gsub!(/((?:%[0-9a-fA-F]{2})+)/n){ [$1.delete('%')].pack('H*') }
|
264
264
|
end
|
265
265
|
|
266
266
|
private
|
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: 51
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 16
|
10
|
+
version: 0.3.16
|
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-09-
|
18
|
+
date: 2010-09-07 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|