mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Remove (another) array allocation
We don't always need an array when generating a url with the formatter. We can be lazy about allocating the `missing_keys` array. This saves us: 35,606 bytes and 889 objects per request
This commit is contained in:
parent
4d2ccc119c
commit
61dae88254
1 changed files with 14 additions and 5 deletions
|
@ -25,7 +25,7 @@ module ActionDispatch
|
|||
next unless name || route.dispatcher?
|
||||
|
||||
missing_keys = missing_keys(route, parameterized_parts)
|
||||
next unless missing_keys.empty?
|
||||
next if missing_keys && missing_keys.any?
|
||||
params = options.dup.delete_if do |key, _|
|
||||
parameterized_parts.key?(key) || route.defaults.key?(key)
|
||||
end
|
||||
|
@ -122,16 +122,25 @@ module ActionDispatch
|
|||
|
||||
# Returns an array populated with missing keys if any are present.
|
||||
def missing_keys(route, parts)
|
||||
missing_keys = []
|
||||
missing_keys = nil
|
||||
tests = route.path.requirements
|
||||
route.required_parts.each { |key|
|
||||
case tests[key]
|
||||
when nil
|
||||
missing_keys << key unless parts[key]
|
||||
unless parts[key]
|
||||
missing_keys ||= []
|
||||
missing_keys << key
|
||||
end
|
||||
when RegexCaseComparator
|
||||
missing_keys << key unless RegexCaseComparator::DEFAULT_REGEX === parts[key]
|
||||
unless RegexCaseComparator::DEFAULT_REGEX === parts[key]
|
||||
missing_keys ||= []
|
||||
missing_keys << key
|
||||
end
|
||||
else
|
||||
missing_keys << key unless /\A#{tests[key]}\Z/ === parts[key]
|
||||
unless /\A#{tests[key]}\Z/ === parts[key]
|
||||
missing_keys ||= []
|
||||
missing_keys << key
|
||||
end
|
||||
end
|
||||
}
|
||||
missing_keys
|
||||
|
|
Loading…
Reference in a new issue