From 463339c4bb5d5f39801b21a0e4c72e44b416101d Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 12 Aug 2015 10:36:33 -0700 Subject: 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) --- actionpack/lib/action_dispatch/routing/mapper.rb | 27 ++++++++++++------------ 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'actionpack/lib/action_dispatch') 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 -- cgit v1.2.3