aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-05-23 15:55:47 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2014-05-23 15:55:56 -0700
commitd991b67040d53ef302ef769ad0659e6d0e8d9c80 (patch)
treea3521c63cc909a29ba7398a088008f612cbf5ee6 /actionpack
parent3bc684bf04d252098a6be248876a9548da25c558 (diff)
downloadrails-d991b67040d53ef302ef769ad0659e6d0e8d9c80.tar.gz
rails-d991b67040d53ef302ef769ad0659e6d0e8d9c80.tar.bz2
rails-d991b67040d53ef302ef769ad0659e6d0e8d9c80.zip
push options decomposition up so we can extract
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/routing/mapper.rb33
1 files changed, 13 insertions, 20 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 0870d3779c..2fb4e1b0e6 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -57,12 +57,18 @@ module ActionDispatch
WILDCARD_PATH = %r{\*([^/\)]+)\)?$}
attr_reader :scope, :path, :options, :requirements, :conditions, :defaults
+ attr_reader :to, :default_controller, :default_action
def initialize(set, scope, path, options)
- @set, @scope, @path, @options = set, scope, path, options
+ @set, @scope, @path = set, scope, path
@requirements, @conditions, @defaults = {}, {}, {}
- normalize_options!
+ options = scope[:options].merge(options) if scope[:options]
+ @to = options[:to]
+ @default_controller = options[:controller] || scope[:controller]
+ @default_action = options[:action] || scope[:action]
+
+ @options = normalize_options!(options)
normalize_path!
normalize_requirements!
normalize_conditions!
@@ -94,14 +100,13 @@ module ActionDispatch
options[:format] != false && !path.include?(':format') && !path.end_with?('/')
end
- def normalize_options!
- @options.reverse_merge!(scope[:options]) if scope[:options]
+ def normalize_options!(options)
path_without_format = path.sub(/\(\.:format\)$/, '')
# Add a constraint for wildcard route to make it non-greedy and match the
# optional format part of the route by default
- if path_without_format.match(WILDCARD_PATH) && @options[:format] != false
- @options[$1.to_sym] ||= /.+?/
+ if path_without_format.match(WILDCARD_PATH) && options[:format] != false
+ options[$1.to_sym] ||= /.+?/
end
if path_without_format.match(':controller')
@@ -111,10 +116,10 @@ module ActionDispatch
# controllers with default routes like :controller/:action/:id(.:format), e.g:
# GET /admin/products/show/1
# => { controller: 'admin/products', action: 'show', id: '1' }
- @options[:controller] ||= /.+?/
+ options[:controller] ||= /.+?/
end
- @options.merge!(default_controller_and_action)
+ options.merge!(default_controller_and_action)
end
def normalize_requirements!
@@ -303,18 +308,6 @@ module ActionDispatch
def dispatcher
Routing::RouteSet::Dispatcher.new(defaults)
end
-
- def to
- options[:to]
- end
-
- def default_controller
- options[:controller] || scope[:controller]
- end
-
- def default_action
- options[:action] || scope[:action]
- end
end
# Invokes Journey::Router::Utils.normalize_path and ensure that