提交 463339c4 编写于 作者: A Aaron Patterson

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)
上级 3042b71a
......@@ -80,7 +80,6 @@ def self.build(scope, set, path, as, controller, default_action, to, options)
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 @@ def initialize(set, path, defaults, as, controller, default_action, modyoule, to
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 @@ def normalize_options!(options, formatted, path_params, path_ast, modyoule)
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 @@ def normalize_format!(formatted)
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册