aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2019-01-08 14:36:00 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2019-01-08 15:05:40 -0800
commit36de9eadaa9193cbc43a501aa345636d77d3b5c1 (patch)
treedf7eb69871a71d5f174efcb068667993a4f75d25 /activesupport
parent80c7038bbc8e83762f4396b18260f470d8621995 (diff)
downloadrails-36de9eadaa9193cbc43a501aa345636d77d3b5c1.tar.gz
rails-36de9eadaa9193cbc43a501aa345636d77d3b5c1.tar.bz2
rails-36de9eadaa9193cbc43a501aa345636d77d3b5c1.zip
Duration#coerce should always return a Scalar
This speeds up Range.new(x, y).step(Duration).each { ... } Fixes #34888
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/duration.rb5
1 files changed, 4 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb
index 314c926ac0..97b4634d7b 100644
--- a/activesupport/lib/active_support/duration.rb
+++ b/activesupport/lib/active_support/duration.rb
@@ -214,8 +214,11 @@ module ActiveSupport
end
def coerce(other) #:nodoc:
- if Scalar === other
+ case other
+ when Scalar
[other, self]
+ when Duration
+ [Scalar.new(other.value), self]
else
[Scalar.new(other), self]
end