diff options
author | Xavier Noria <fxn@hashref.com> | 2010-08-23 01:21:43 +0200 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2010-08-23 01:21:43 +0200 |
commit | b587bfd589cbb4469b9e49bfdd90f033d14adc9a (patch) | |
tree | d5fd06c8a1238dca62d3f3b512a6f19b63bc4b0e /actionpack/lib/action_dispatch/routing/mapper.rb | |
parent | 9992a1a4bff1dd666298866c283ba18832da0914 (diff) | |
parent | 8d1ee434da3348089daa497980d1e24837ee8be6 (diff) | |
download | rails-b587bfd589cbb4469b9e49bfdd90f033d14adc9a.tar.gz rails-b587bfd589cbb4469b9e49bfdd90f033d14adc9a.tar.bz2 rails-b587bfd589cbb4469b9e49bfdd90f033d14adc9a.zip |
Merge remote branch 'rails/master'
Diffstat (limited to 'actionpack/lib/action_dispatch/routing/mapper.rb')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index 800c6b469e..23b13d1d5d 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -26,13 +26,18 @@ module ActionDispatch @constraints.each { |constraint| if constraint.respond_to?(:matches?) && !constraint.matches?(req) return [ 404, {'X-Cascade' => 'pass'}, [] ] - elsif constraint.respond_to?(:call) && !constraint.call(req) + elsif constraint.respond_to?(:call) && !constraint.call(*constraint_args(constraint, req)) return [ 404, {'X-Cascade' => 'pass'}, [] ] end } @app.call(env) end + + private + def constraint_args(constraint, request) + constraint.arity == 1 ? [request] : [request.symbolized_path_parameters, request] + end end class Mapping #:nodoc: @@ -774,7 +779,7 @@ module ActionDispatch return true end - options.each do |k,v| + options.keys.each do |k| (options[:constraints] ||= {})[k] = options.delete(k) if options[k].is_a?(Regexp) end |