mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Refactor handling of action normalization
Reference: Bloody mess internals http://gusiev.com/slides/rails_contribution/static/#40
This commit is contained in:
parent
0c93a48904
commit
6018b83c17
1 changed files with 13 additions and 11 deletions
|
@ -514,11 +514,12 @@ module ActionDispatch
|
|||
@recall = recall.dup
|
||||
@set = set
|
||||
|
||||
normalize_recall!
|
||||
normalize_options!
|
||||
normalize_controller_action_id!
|
||||
use_relative_controller!
|
||||
normalize_controller!
|
||||
handle_nil_action!
|
||||
normalize_action!
|
||||
end
|
||||
|
||||
def controller
|
||||
|
@ -537,6 +538,11 @@ module ActionDispatch
|
|||
end
|
||||
end
|
||||
|
||||
# Set 'index' as default action for recall
|
||||
def normalize_recall!
|
||||
@recall[:action] ||= 'index'
|
||||
end
|
||||
|
||||
def normalize_options!
|
||||
# If an explicit :controller was given, always make :action explicit
|
||||
# too, so that action expiry works as expected for things like
|
||||
|
@ -552,8 +558,8 @@ module ActionDispatch
|
|||
options[:controller] = options[:controller].to_s
|
||||
end
|
||||
|
||||
if options[:action]
|
||||
options[:action] = options[:action].to_s
|
||||
if options.key?(:action)
|
||||
options[:action] = (options[:action] || 'index').to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -563,8 +569,6 @@ module ActionDispatch
|
|||
# :controller, :action or :id is not found, don't pull any
|
||||
# more keys from the recall.
|
||||
def normalize_controller_action_id!
|
||||
@recall[:action] ||= 'index' if current_controller
|
||||
|
||||
use_recall_for(:controller) or return
|
||||
use_recall_for(:action) or return
|
||||
use_recall_for(:id)
|
||||
|
@ -586,13 +590,11 @@ module ActionDispatch
|
|||
@options[:controller] = controller.sub(%r{^/}, '') if controller
|
||||
end
|
||||
|
||||
# This handles the case of action: nil being explicitly passed.
|
||||
# It is identical to action: "index"
|
||||
def handle_nil_action!
|
||||
if options.has_key?(:action) && options[:action].nil?
|
||||
options[:action] = 'index'
|
||||
# Move 'index' action from options to recall
|
||||
def normalize_action!
|
||||
if @options[:action] == 'index'
|
||||
@recall[:action] = @options.delete(:action)
|
||||
end
|
||||
recall[:action] = options.delete(:action) if options[:action] == 'index'
|
||||
end
|
||||
|
||||
# Generates a path from routes, returns [path, params].
|
||||
|
|
Loading…
Reference in a new issue