aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-10-21 11:15:41 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-11-18 10:51:10 -0800
commit494ab25772ba5eca741fe98f6beb48954949993f (patch)
treeafd9de576b19805e0e2d610f20e499ae50fa1371 /actionpack/lib/action_dispatch
parent76780c34f5e0f0e821e408482172454751514241 (diff)
downloadrails-494ab25772ba5eca741fe98f6beb48954949993f.tar.gz
rails-494ab25772ba5eca741fe98f6beb48954949993f.tar.bz2
rails-494ab25772ba5eca741fe98f6beb48954949993f.zip
breaking match down to smaller methods
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/routing/mapper.rb41
1 files changed, 22 insertions, 19 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index ff96b43a9d..4c4b99c03e 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -374,10 +374,6 @@ module ActionDispatch
# # Matches any request starting with 'path'
# match 'path' => 'c#a', :anchor => false
def match(path, options=nil)
- mapping = Mapping.new(@set, @scope, path, options || {})
- app, conditions, requirements, defaults, as, anchor = mapping.to_route
- @set.add_route(app, conditions, requirements, defaults, as, anchor)
- self
end
# Mount a Rack-based application to be used within the application.
@@ -1249,7 +1245,8 @@ module ActionDispatch
if rest.empty? && Hash === path
options = path
path, to = options.find { |name, value| name.is_a?(String) }
- options.merge!(:to => to).delete(path)
+ options[:to] = to
+ options.delete(path)
paths = [path]
else
options = rest.pop || {}
@@ -1258,25 +1255,29 @@ module ActionDispatch
options[:anchor] = true unless options.key?(:anchor)
- if paths.length > 1
- paths.each { |path| match(path, options.dup) }
- return self
- end
+ paths.each { |path| decomposed_match(path, options.dup) }
+ self
+ end
+ def decomposed_match(path, options) # :nodoc:
on = options.delete(:on)
if VALID_ON_OPTIONS.include?(on)
- return send(on){ match(path, options) }
+ return send(on){ decomposed_match(path, options) }
elsif on
raise ArgumentError, "Unknown scope #{on.inspect} given to :on"
end
- if @scope[:scope_level] == :resources
- return nested { match(path, options) }
- elsif @scope[:scope_level] == :resource
- return member { match(path, options) }
+ case @scope[:scope_level]
+ when :resources
+ nested { decomposed_match(path, options) }
+ when :resource
+ member { decomposed_match(path, options) }
+ else
+ add_route(path, options)
end
+ end
- action = path
+ def add_route(action, options) # :nodoc:
path = path_for_action(action, options.delete(:path))
if action.to_s =~ /^[\w\/]+$/
@@ -1285,13 +1286,15 @@ module ActionDispatch
action = nil
end
- if options.key?(:as) && !options[:as]
+ if !options.fetch(:as) { true }
options.delete(:as)
else
options[:as] = name_for_action(options[:as], action)
end
- super(path, options)
+ mapping = Mapping.new(@set, @scope, path, options)
+ app, conditions, requirements, defaults, as, anchor = mapping.to_route
+ @set.add_route(app, conditions, requirements, defaults, as, anchor)
end
def root(options={})
@@ -1355,11 +1358,11 @@ module ActionDispatch
end
def resource_scope? #:nodoc:
- @scope[:scope_level].in?([:resource, :resources])
+ [:resource, :resources].include? @scope[:scope_level]
end
def resource_method_scope? #:nodoc:
- @scope[:scope_level].in?([:collection, :member, :new])
+ [:collection, :member, :new].include? @scope[:scope_level]
end
def with_exclusive_scope