diff options
| author | Max Shytikov <mshytikov@gmail.com> | 2012-12-07 13:15:31 +0200 | 
|---|---|---|
| committer | Arun Agrawal <arunagw@gmail.com> | 2013-09-10 18:13:39 +0200 | 
| commit | 6018b83c177e52ff785b882a381db14eb6f46223 (patch) | |
| tree | 48474f1126ff77173026499affacd40db4f67282 /actionpack/lib/action_dispatch/routing | |
| parent | 0c93a48904bcededd6093138ed81f3c13ac5e63f (diff) | |
| download | rails-6018b83c177e52ff785b882a381db14eb6f46223.tar.gz rails-6018b83c177e52ff785b882a381db14eb6f46223.tar.bz2 rails-6018b83c177e52ff785b882a381db14eb6f46223.zip | |
Refactor handling of action normalization
Reference:
Bloody mess internals
http://gusiev.com/slides/rails_contribution/static/#40
Diffstat (limited to 'actionpack/lib/action_dispatch/routing')
| -rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 24 | 
1 files changed, 13 insertions, 11 deletions
| diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 0e5dc1fc6c..943fc15026 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -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]. | 
