mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
refactor process_route
This commit is contained in:
parent
1e0477f570
commit
32814f8d6f
2 changed files with 13 additions and 14 deletions
|
@ -797,22 +797,22 @@ module Sinatra
|
|||
#
|
||||
# Returns pass block.
|
||||
def process_route(pattern, keys, conditions, block = nil, values = [])
|
||||
@original_params ||= @params
|
||||
route = @request.path_info
|
||||
route = '/' if route.empty? and not settings.empty_path_info?
|
||||
if match = pattern.match(route)
|
||||
values += match.captures.to_a.map { |v| force_encoding URI.decode(v) if v }
|
||||
params = {'splat' => [], 'captures' => values}
|
||||
keys.zip(values) { |k,v| (params[k] ||= '') << v if v }
|
||||
@params = @original_params.merge(params)
|
||||
@block_params = values
|
||||
catch(:pass) do
|
||||
conditions.each { |c| throw :pass if c.bind(self).call == false }
|
||||
block ? block[self, @block_params] : yield(self, @block_params)
|
||||
end
|
||||
return unless match = pattern.match(route)
|
||||
values += match.captures.to_a.map { |v| force_encoding URI.decode(v) if v }
|
||||
|
||||
if values.any?
|
||||
original, @params = params, params.merge('splat' => [], 'captures' => values)
|
||||
keys.zip(values) { |k,v| (@params[k] ||= '') << v if v }
|
||||
end
|
||||
|
||||
catch(:pass) do
|
||||
conditions.each { |c| throw :pass if c.bind(self).call == false }
|
||||
block ? block[self, values] : yield(self, values)
|
||||
end
|
||||
ensure
|
||||
@params = @original_params
|
||||
@params = original if original
|
||||
end
|
||||
|
||||
# No matching route was found or all routes passed. The default
|
||||
|
|
|
@ -370,8 +370,7 @@ class RoutingTest < Test::Unit::TestCase
|
|||
"firefox" => {"engine" => {"name"=>"spidermonkey", "version"=>"1.7.0"}},
|
||||
"chrome" => {"engine" => {"name"=>"V8", "version"=>"1.0"}}
|
||||
},
|
||||
"paste" => {"name"=>"hello world", "syntax"=>"ruby"},
|
||||
"splat"=>[], "captures"=>[]
|
||||
"paste" => {"name"=>"hello world", "syntax"=>"ruby"}
|
||||
}
|
||||
mock_app {
|
||||
get '/foo' do
|
||||
|
|
Loading…
Reference in a new issue