diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index b8aadff5e68a3057e2994b4eeba1c1a3bc4eb24c..227ceec90fe81a574e80efcd35325da9e6b93e80 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -237,47 +237,44 @@ def app end def default_controller_and_action - if to.respond_to?(:call) - { } - else - controller = default_controller - action = default_action - - case to - when Symbol - action = to.to_s - when /#/ - controller, action = to.split('#') - when String - controller = to - end - - if @scope[:module] && !controller.is_a?(Regexp) - if controller =~ %r{\A/} - controller = controller[1..-1] - else - controller = [@scope[:module], controller].compact.join("/").presence - end - end - - hash = {} + hash = {} + return hash if to.respond_to? :call + + controller = default_controller + action = default_action + + case to + when Symbol + action = to.to_s + when /#/ + controller, action = to.split('#') + when String + controller = to + end - if controller.is_a? Regexp - hash[:controller] = controller + if @scope[:module] && !controller.is_a?(Regexp) + if controller =~ %r{\A/} + controller = controller[1..-1] else - check_controller! controller - hash[:controller] = controller.to_s if controller + controller = [@scope[:module], controller].compact.join("/").presence end + end - if action.is_a? Regexp - hash[:action] = action - else - check_action! action - hash[:action] = action.to_s if action - end + if controller.is_a? Regexp + hash[:controller] = controller + else + check_controller! controller + hash[:controller] = controller.to_s if controller + end - hash + if action.is_a? Regexp + hash[:action] = action + else + check_action! action + hash[:action] = action.to_s if action end + + hash end def check_action!(action)