提交 92d16ec1 编写于 作者: A Aaron Patterson

only loop over `options` once (hopefully)

上级 c0fc116f
...@@ -89,14 +89,15 @@ def initialize(scope, path, options) ...@@ -89,14 +89,15 @@ def initialize(scope, path, options)
constraints = constraints(options_constraints, constraints = constraints(options_constraints,
scope[:constraints] || {}) (scope[:constraints] || {}),
path_params)
normalize_requirements!(path_params, formatted, constraints) normalize_requirements!(path_params, formatted, constraints)
@conditions[:path_info] = path @conditions[:path_info] = path
@conditions[:parsed_path_info] = ast @conditions[:parsed_path_info] = ast
normalize_conditions!(path_params, path, ast, via, constraints) add_request_method(via, @conditions)
normalize_defaults!(formatted, options_constraints) normalize_defaults!(formatted, options_constraints)
end end
...@@ -207,15 +208,7 @@ def verify_callable_constraint(callable_constraint) ...@@ -207,15 +208,7 @@ def verify_callable_constraint(callable_constraint)
end end
end end
def normalize_conditions!(path_params, path, ast, via, constraints) def add_request_method(via, conditions)
required_defaults = []
options.each do |key, required_default|
unless path_params.include?(key) || Regexp === required_default
required_defaults << key
end
end
@conditions[:required_defaults] = required_defaults
unless via == [:all] unless via == [:all]
if via.empty? if via.empty?
msg = "You should not use the `match` method in your router without specifying an HTTP method.\n" \ msg = "You should not use the `match` method in your router without specifying an HTTP method.\n" \
...@@ -226,7 +219,7 @@ def normalize_conditions!(path_params, path, ast, via, constraints) ...@@ -226,7 +219,7 @@ def normalize_conditions!(path_params, path, ast, via, constraints)
raise ArgumentError, msg raise ArgumentError, msg
end end
@conditions[:request_method] = via.map { |m| m.to_s.dasherize.upcase } conditions[:request_method] = via.map { |m| m.to_s.dasherize.upcase }
end end
end end
...@@ -309,10 +302,15 @@ def blocks(options_constraints, scope_blocks) ...@@ -309,10 +302,15 @@ def blocks(options_constraints, scope_blocks)
end end
end end
def constraints(option_constraints, constraints) def constraints(option_constraints, constraints, path_params)
required_defaults = []
options.each_pair do |key, option| options.each_pair do |key, option|
constraints[key] = option if Regexp === option constraints[key] = option if Regexp === option
unless path_params.include?(key) || Regexp === option
required_defaults << key
end
end end
@conditions[:required_defaults] = required_defaults
constraints.merge!(option_constraints) if option_constraints.is_a?(Hash) constraints.merge!(option_constraints) if option_constraints.is_a?(Hash)
constraints constraints
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册