Skip to content
Browse files

Allow changing request.path_info in a before filter that has a patter…

…n. Fixes #114.
  • Loading branch information...
1 parent aa06ed5 commit 498812662465f2271b2a5c49c87dc1c8d500f724 @rkh rkh committed Nov 4, 2010
Showing with 23 additions and 5 deletions.
  1. +13 −5 lib/sinatra/base.rb
  2. +10 −0 test/filter_test.rb
View
18 lib/sinatra/base.rb
@@ -28,6 +28,18 @@ def secure?
else
alias secure? ssl?
end
+
+ def route
+ @route ||= begin
+ path = Rack::Utils.unescape(path_info)
+ path.empty? ? "/" : path
+ end
+ end
+
+ def path_info=(value)
+ @route = nil
+ super
+ end
end
# The response object. See Rack::Response and Rack::ResponseHelpers for
@@ -635,11 +647,7 @@ def route_eval(&block)
# Returns pass block.
def process_route(pattern, keys, conditions)
@original_params ||= @params
- @path ||= begin
- path = unescape(@request.path_info)
- path.empty? ? "/" : path
- end
- if match = pattern.match(@path)
+ if match = pattern.match(@request.route)
values = match.captures.to_a
params =
if keys.any?
View
10 test/filter_test.rb
@@ -255,6 +255,16 @@ class AfterFilterTest < Test::Unit::TestCase
assert ran_filter
end
+ it 'changes to path_info from a pattern matching before filter are respoected when routing' do
+ mock_app do
+ before('/foo') { request.path_info = '/bar' }
+ get('/bar') { 'blah' }
+ end
+ get '/foo'
+ assert ok?
+ assert_equal 'blah', body
+ end
+
it 'generates block arguments from route pattern' do
subpath = nil
mock_app do

0 comments on commit 4988126

Please sign in to comment.
Something went wrong with that request. Please try again.