aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorAndrew White <pixeltrix@users.noreply.github.com>2017-03-03 10:48:41 +0000
committerGitHub <noreply@github.com>2017-03-03 10:48:41 +0000
commitc9bc4de19850ce3e66d0bf1f9ef70468c0366670 (patch)
treed6610b4eb96c4c69bb69a486c43d270ce1b46b82 /activesupport/lib
parente1a72fef7de9a5c0871b0ef1a4acb9483d2bf1f3 (diff)
parent75924c4517c8f87712d3f59c11f10152ed57b9d8 (diff)
downloadrails-c9bc4de19850ce3e66d0bf1f9ef70468c0366670.tar.gz
rails-c9bc4de19850ce3e66d0bf1f9ef70468c0366670.tar.bz2
rails-c9bc4de19850ce3e66d0bf1f9ef70468c0366670.zip
Merge pull request #28204 from rails/deprecate-implicit-coercion-of-durations
Deprecate implicit coercion of `ActiveSupport::Duration`
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/cache/mem_cache_store.rb2
-rw-r--r--activesupport/lib/active_support/duration.rb41
2 files changed, 40 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/cache/mem_cache_store.rb b/activesupport/lib/active_support/cache/mem_cache_store.rb
index e09cee3335..5eee04a34e 100644
--- a/activesupport/lib/active_support/cache/mem_cache_store.rb
+++ b/activesupport/lib/active_support/cache/mem_cache_store.rb
@@ -156,7 +156,7 @@ module ActiveSupport
expires_in = options[:expires_in].to_i
if expires_in > 0 && !options[:raw]
# Set the memcache expire a few minutes in the future to support race condition ttls on read
- expires_in += 5.minutes
+ expires_in += 300
end
rescue_error_with false do
@data.send(method, key, value, expires_in, options)
diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb
index 70cf78519d..b92891c511 100644
--- a/activesupport/lib/active_support/duration.rb
+++ b/activesupport/lib/active_support/duration.rb
@@ -1,5 +1,7 @@
require "active_support/core_ext/array/conversions"
require "active_support/core_ext/object/acts_like"
+require "active_support/core_ext/string/filters"
+require "active_support/deprecation"
module ActiveSupport
# Provides accurate date and time measurements using Date#advance and
@@ -88,6 +90,25 @@ module ActiveSupport
@parts.default = 0
end
+ def coerce(other) #:nodoc:
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
+ Implicit coercion of ActiveSupport::Duration to a Numeric
+ is deprecated and will raise a TypeError in Rails 5.2.
+ MSG
+
+ [other, value]
+ end
+
+ # Compares one Duration with another or a Numeric to this Duration.
+ # Numeric values are treated as seconds.
+ def <=>(other)
+ if Duration === other
+ value <=> other.value
+ elsif Numeric === other
+ value <=> other
+ end
+ end
+
# Adds another Duration or a Numeric to this Duration. Numeric values
# are treated as seconds.
def +(other)
@@ -109,6 +130,24 @@ module ActiveSupport
self + (-other)
end
+ # Multiplies this Duration by a Numeric and returns a new Duration.
+ def *(other)
+ if Numeric === other
+ Duration.new(value * other, parts.map { |type, number| [type, number * other] })
+ else
+ value * other
+ end
+ end
+
+ # Devides this Duration by a Numeric and returns a new Duration.
+ def /(other)
+ if Numeric === other
+ Duration.new(value / other, parts.map { |type, number| [type, number / other] })
+ else
+ value / other
+ end
+ end
+
def -@ #:nodoc:
Duration.new(-value, parts.map { |type, number| [type, -number] })
end
@@ -212,8 +251,6 @@ module ActiveSupport
ISO8601Serializer.new(self, precision: precision).serialize
end
- delegate :<=>, to: :value
-
private
def sum(sign, time = ::Time.current)