mirror of https://github.com/rails/rails
Refactor to reduce number of loops
Only build the missing_keys array once we have detected that there actually are missing keys by moving the check to be part of the block that performs the path substitution.
This commit is contained in:
parent
74722d66d3
commit
1a58ac60d9
|
@ -184,27 +184,18 @@ module ActionDispatch
|
|||
def optimized_helper(args)
|
||||
path = @string_route.dup
|
||||
klass = Journey::Router::Utils
|
||||
parameterized_args = args.map(&:to_param)
|
||||
missing_keys = []
|
||||
|
||||
parameterized_args.each_with_index do |arg, index|
|
||||
if arg.nil? || arg.empty?
|
||||
missing_keys << @path_parts[index]
|
||||
@path_parts.zip(args) do |part, arg|
|
||||
parameterized_arg = arg.to_param
|
||||
|
||||
if parameterized_arg.nil? || parameterized_arg.empty?
|
||||
raise_generation_error(args)
|
||||
end
|
||||
end
|
||||
|
||||
unless missing_keys.empty?
|
||||
message = "No route matches #{Hash[@path_parts.zip(args)].inspect}"
|
||||
message << " missing required keys: #{missing_keys.inspect}"
|
||||
|
||||
raise ActionController::UrlGenerationError, message
|
||||
end
|
||||
|
||||
@path_parts.zip(parameterized_args) do |part, arg|
|
||||
# Replace each route parameter
|
||||
# e.g. :id for regular parameter or *path for globbing
|
||||
# with ruby string interpolation code
|
||||
path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(arg))
|
||||
path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(parameterized_arg))
|
||||
end
|
||||
path
|
||||
end
|
||||
|
@ -212,6 +203,25 @@ module ActionDispatch
|
|||
def optimize_routes_generation?(t)
|
||||
t.send(:optimize_routes_generation?)
|
||||
end
|
||||
|
||||
def raise_generation_error(args)
|
||||
parts, missing_keys = [], []
|
||||
|
||||
@path_parts.zip(args) do |part, arg|
|
||||
parameterized_arg = arg.to_param
|
||||
|
||||
if parameterized_arg.nil? || parameterized_arg.empty?
|
||||
missing_keys << part
|
||||
end
|
||||
|
||||
parts << [part, arg]
|
||||
end
|
||||
|
||||
message = "No route matches #{Hash[parts].inspect}"
|
||||
message << " missing required keys: #{missing_keys.inspect}"
|
||||
|
||||
raise ActionController::UrlGenerationError, message
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(route, options)
|
||||
|
|
Loading…
Reference in New Issue