aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-08-12 10:36:33 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2015-08-12 14:30:52 -0700
commit463339c4bb5d5f39801b21a0e4c72e44b416101d (patch)
tree3b30c71f0de954fa6b3eb1c1c554ca6a9a220484 /actionpack/lib/action_dispatch
parent3042b71a7a2b6dfcdd0e3282b834003099cd036e (diff)
downloadrails-463339c4bb5d5f39801b21a0e4c72e44b416101d.tar.gz
rails-463339c4bb5d5f39801b21a0e4c72e44b416101d.tar.bz2
rails-463339c4bb5d5f39801b21a0e4c72e44b416101d.zip
make `split_constraints` more functional.
I don't want `split_constraints` to mutate any instance variables. That way it's easier to move the method around and understand what it does (it has no side effects)
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/routing/mapper.rb27
1 files changed, 13 insertions, 14 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb
index 337d5e9404..111546c285 100644
--- a/actionpack/lib/action_dispatch/routing/mapper.rb
+++ b/actionpack/lib/action_dispatch/routing/mapper.rb
@@ -80,7 +80,6 @@ module ActionDispatch
end
def initialize(set, path, defaults, as, controller, default_action, modyoule, to, formatted, scope_constraints, blocks, options)
- @requirements, @conditions = {}, {}
@defaults = defaults
@set = set
@@ -103,18 +102,18 @@ module ActionDispatch
constraints = scope_constraints.merge Hash[split_options[:constraints] || []]
if options_constraints.is_a?(Hash)
- options_constraints.each do |key, default|
- if URL_OPTIONS.include?(key) && (String === default || Fixnum === default)
- @defaults[key] ||= default
- end
- end
+ @defaults = Hash[options_constraints.find_all { |key, default|
+ URL_OPTIONS.include?(key) && (String === default || Fixnum === default)
+ }].merge @defaults
@blocks = blocks
constraints.merge! options_constraints
else
@blocks = blocks(options_constraints)
end
- split_constraints path_params, constraints
+ requirements, conditions = split_constraints path_params, constraints
+ @requirements = Hash[requirements]
+ @conditions = Hash[conditions]
normalize_format!(formatted)
@@ -181,12 +180,12 @@ module ActionDispatch
end
def split_constraints(path_params, constraints)
- constraints.each_pair do |key, requirement|
+ constraints.partition do |key, requirement|
if path_params.include?(key) || key == :controller
verify_regexp_requirement(requirement) if requirement.is_a?(Regexp)
- @requirements[key] = requirement
+ true
else
- @conditions[key] = requirement
+ false
end
end
end
@@ -195,11 +194,11 @@ module ActionDispatch
if formatted == true
@requirements[:format] ||= /.+/
elsif Regexp === formatted
- @requirements[:format] = formatted
- @defaults[:format] = nil
+ @requirements[:format] ||= formatted
+ @defaults[:format] ||= nil
elsif String === formatted
- @requirements[:format] = Regexp.compile(formatted)
- @defaults[:format] = formatted
+ @requirements[:format] ||= Regexp.compile(formatted)
+ @defaults[:format] ||= formatted
end
end