avoid executing filters even if prefix matches with other namespace

Fixes #1251
This commit is contained in:
namusyaka 2017-02-09 23:12:14 +09:00
parent 32f416c7b8
commit 2d172e5c73
2 changed files with 32 additions and 1 deletions

View File

@ -333,7 +333,7 @@ module Sinatra
end
def prefixed(method, pattern = nil, conditions = {}, &block)
default = /.*/ if method == :before or method == :after
default = %r{(?:/.*)?} if method == :before or method == :after
pattern, conditions = compile pattern, conditions, default
result = base.send(method, pattern, conditions, &block)
invoke_hook :route_added, method.to_s.upcase, pattern, block

View File

@ -787,5 +787,36 @@ describe Sinatra::Namespace do
expect(get('/foo/bar').status).to eq(200)
expect(last_response.body).to eq('true')
end
it 'avoids executing filters even if prefix matches with other namespace' do
mock_app do
helpers do
def dump_args(*args)
args.inspect
end
end
namespace '/foo' do
helpers do
def dump_args(*args)
super(:foo, *args)
end
end
get('') { dump_args }
end
namespace '/foo-bar' do
helpers do
def dump_args(*args)
super(:foo_bar, *args)
end
end
get('') { dump_args }
end
end
get '/foo-bar'
expect(last_response.body).to eq('[:foo_bar]')
end
end
end