diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index d7e0d932fb56aa05dab597434b9d0172753fb940..58e8ac0201ae90afeb8e811288386489cd0bf4a4 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -237,8 +237,7 @@ def app end def default_controller_and_action - hash = {} - return hash if to.respond_to? :call + return {} if to.respond_to? :call controller, action = get_controller_and_action( default_controller, @@ -247,24 +246,28 @@ def default_controller_and_action @scope[:module] ) - if controller - hash[:controller] = translate_controller controller - else - unless segment_keys.include?(:controller) - message = "Missing :controller key on routes definition, please check your routes." - raise ArgumentError, message + hash = check_part(:controller, controller, {}) do + translate_controller controller + end + + check_part(:action, action, hash) do + if Regexp === action + action + else + action.to_s end end + end - if action - hash[:action] = translate_action action + def check_part(name, part, hash) + if part + hash[name] = yield else - unless segment_keys.include?(:action) - message = "Missing :action key on routes definition, please check your routes." + unless segment_keys.include?(name) + message = "Missing :#{name} key on routes definition, please check your routes." raise ArgumentError, message end end - hash end @@ -288,10 +291,6 @@ def get_controller_and_action(controller, action, to, modyoule) [controller, action] end - def translate_action(action) - Regexp === action ? action : action.to_s - end - def translate_controller(controller) return controller if Regexp === controller return controller.to_s if controller =~ /\A[a-z_0-9][a-z_0-9\/]*\z/