aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-08-11 18:17:05 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2015-08-11 18:17:05 -0700
commit3420849f85d6991af87e84950a8ecc9cfa74c643 (patch)
tree2bd5db41c10e4e26d42a5d944cf1d0530655f9c0 /actionpack/lib
parentea4da199b7d15aaa731c608d7a3a5c59aa8e4801 (diff)
downloadrails-3420849f85d6991af87e84950a8ecc9cfa74c643.tar.gz
rails-3420849f85d6991af87e84950a8ecc9cfa74c643.tar.bz2
rails-3420849f85d6991af87e84950a8ecc9cfa74c643.zip
only do is_a? checks on `options_constraints` once
we don't need to do it so many times.
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_dispatch/routing/mapper.rb25
1 files changed, 9 insertions, 16 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index e30f60d89d..f3e47ba1cf 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -76,7 +76,7 @@ module ActionDispatch
defaults = (scope[:defaults] || {}).dup
scope_constraints = scope[:constraints] || {}
- new set, path, defaults, as, controller, default_action, scope[:module], to, formatted, scope_constraints, scope[:blocks], options
+ new set, path, defaults, as, controller, default_action, scope[:module], to, formatted, scope_constraints, scope[:blocks] || [], options
end
def initialize(set, path, defaults, as, controller, default_action, modyoule, to, formatted, scope_constraints, blocks, options)
@@ -91,7 +91,7 @@ module ActionDispatch
@anchor = options.delete :anchor
via = Array(options.delete(:via) { [] })
- options_constraints = options.delete :constraints
+ options_constraints = options.delete(:constraints) || {}
path = normalize_path! path, formatted
ast = path_ast path
@@ -103,8 +103,6 @@ module ActionDispatch
split_constraints path_params, scope_constraints.merge(constraints)
- @blocks = blocks(options_constraints, blocks)
-
if options_constraints.is_a?(Hash)
split_constraints path_params, options_constraints
options_constraints.each do |key, default|
@@ -112,6 +110,9 @@ module ActionDispatch
@defaults[key] ||= default
end
end
+ @blocks = blocks
+ else
+ @blocks = blocks(options_constraints)
end
normalize_format!(formatted)
@@ -218,12 +219,6 @@ module ActionDispatch
end
end
- def verify_callable_constraint(callable_constraint)
- unless callable_constraint.respond_to?(:call) || callable_constraint.respond_to?(:matches?)
- raise ArgumentError, "Invalid constraint: #{callable_constraint.inspect} must respond to :call or :matches?"
- end
- end
-
def add_request_method(via, conditions)
return if via == [:all]
@@ -303,13 +298,11 @@ module ActionDispatch
yield
end
- def blocks(options_constraints, scope_blocks)
- if options_constraints && !options_constraints.is_a?(Hash)
- verify_callable_constraint(options_constraints)
- [options_constraints]
- else
- scope_blocks || []
+ def blocks(callable_constraint)
+ unless callable_constraint.respond_to?(:call) || callable_constraint.respond_to?(:matches?)
+ raise ArgumentError, "Invalid constraint: #{callable_constraint.inspect} must respond to :call or :matches?"
end
+ [callable_constraint]
end
def constraints(options, path_params)