diff options
author | Andrew White <andyw@pixeltrix.co.uk> | 2011-02-13 23:24:46 +0000 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2011-02-13 23:24:46 +0000 |
commit | 385be358cfa80cedff113ba57338e83ca8ac2b52 (patch) | |
tree | 325a1eecce3b934025ed56b5c088165d12dfad62 /actionpack/lib/action_dispatch/routing | |
parent | 9143032a108bd41121337c82416ba90f460d8214 (diff) | |
download | rails-385be358cfa80cedff113ba57338e83ca8ac2b52.tar.gz rails-385be358cfa80cedff113ba57338e83ca8ac2b52.tar.bz2 rails-385be358cfa80cedff113ba57338e83ca8ac2b52.zip |
Fix assert_recognizes with block constraints [#5805 state:resolved]
Diffstat (limited to 'actionpack/lib/action_dispatch/routing')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 12 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 4 |
2 files changed, 11 insertions, 5 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index f3f7cb6507..2f12192af4 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -22,18 +22,22 @@ module ActionDispatch @app, @constraints, @request = app, constraints, request end - def call(env) + def matches?(env) req = @request.new(env) @constraints.each { |constraint| if constraint.respond_to?(:matches?) && !constraint.matches?(req) - return [ 404, {'X-Cascade' => 'pass'}, [] ] + return false elsif constraint.respond_to?(:call) && !constraint.call(*constraint_args(constraint, req)) - return [ 404, {'X-Cascade' => 'pass'}, [] ] + return false end } - @app.call(env) + return true + end + + def call(env) + matches?(env) ? @app.call(env) : [ 404, {'X-Cascade' => 'pass'}, [] ] end private diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 683fa19380..4b4e9da173 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -540,7 +540,9 @@ module ActionDispatch end dispatcher = route.app - dispatcher = dispatcher.app while dispatcher.is_a?(Mapper::Constraints) + while dispatcher.is_a?(Mapper::Constraints) && dispatcher.matches?(env) do + dispatcher = dispatcher.app + end if dispatcher.is_a?(Dispatcher) && dispatcher.controller(params, false) dispatcher.prepare_params!(params) |