1
0
Fork 0
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:
schneems 2015-07-27 01:52:45 -05:00
parent 4d2ccc119c
commit 61dae88254

View file

@ -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