Skip to content

Commit 9a6054a

Browse files
authored
Merge pull request rails#53372 from XrXr/duration-enum-inject-alloc-cut
Reduce allocations in AS::Duration#{since,ago}
2 parents f8e422a + d39b0f2 commit 9a6054a

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

activesupport/lib/active_support/duration.rb

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -491,17 +491,21 @@ def sum(sign, time = ::Time.current)
491491
if @parts.empty?
492492
time.since(sign * value)
493493
else
494-
@parts.inject(time) do |t, (type, number)|
495-
if type == :seconds
496-
t.since(sign * number)
497-
elsif type == :minutes
498-
t.since(sign * number * 60)
499-
elsif type == :hours
500-
t.since(sign * number * 3600)
501-
else
502-
t.advance(type => sign * number)
503-
end
494+
@parts.each do |type, number|
495+
t = time
496+
time =
497+
if type == :seconds
498+
t.since(sign * number)
499+
elsif type == :minutes
500+
t.since(sign * number * 60)
501+
elsif type == :hours
502+
t.since(sign * number * 3600)
503+
else
504+
t.advance(type => sign * number)
505+
end
504506
end
507+
508+
time
505509
end
506510
end
507511

0 commit comments

Comments
 (0)