mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Ensure the constraints block is only applied to the correct route
addresses issue #1907 - any routes that follow a route with a constraints block are inheriting the previous route's constraints.
This commit is contained in:
parent
02691d3516
commit
4dc42f5353
2 changed files with 25 additions and 6 deletions
|
@ -190,13 +190,12 @@ module ActionDispatch
|
|||
end
|
||||
|
||||
def blocks
|
||||
block = @scope[:blocks] || []
|
||||
|
||||
if @options[:constraints].present? && !@options[:constraints].is_a?(Hash)
|
||||
block << @options[:constraints]
|
||||
constraints = @options[:constraints]
|
||||
if constraints.present? && !constraints.is_a?(Hash)
|
||||
[constraints]
|
||||
else
|
||||
@scope[:blocks] || []
|
||||
end
|
||||
|
||||
block
|
||||
end
|
||||
|
||||
def constraints
|
||||
|
|
|
@ -504,6 +504,12 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
|||
match '/countries/:country/(*other)', :to => redirect{ |params, req| params[:other] ? "/countries/all/#{params[:other]}" : '/countries/all' }
|
||||
|
||||
match '/:locale/*file.:format', :to => 'files#show', :file => /path\/to\/existing\/file/
|
||||
|
||||
scope '/italians' do
|
||||
match '/writers', :to => 'italians#writers', :constraints => ::TestRoutingMapper::IpRestrictor
|
||||
match '/sculptors', :to => 'italians#sculptors'
|
||||
match '/painters/:painter', :to => 'italians#painters', :constraints => {:painter => /michelangelo/}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -2229,6 +2235,20 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
|||
verify_redirect 'http://www.example.com/countries/all/cities'
|
||||
end
|
||||
|
||||
def test_constraints_block_not_carried_to_following_routes
|
||||
get '/italians/writers'
|
||||
assert_equal 'Not Found', @response.body
|
||||
|
||||
get '/italians/sculptors'
|
||||
assert_equal 'italians#sculptors', @response.body
|
||||
|
||||
get '/italians/painters/botticelli'
|
||||
assert_equal 'Not Found', @response.body
|
||||
|
||||
get '/italians/painters/michelangelo'
|
||||
assert_equal 'italians#painters', @response.body
|
||||
end
|
||||
|
||||
def test_custom_resource_actions_defined_using_string
|
||||
get '/customers/inactive'
|
||||
assert_equal 'customers#inactive', @response.body
|
||||
|
|
Loading…
Reference in a new issue