diff options
author | Andrew White <pixeltrix@users.noreply.github.com> | 2017-03-03 10:48:41 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-03 10:48:41 +0000 |
commit | c9bc4de19850ce3e66d0bf1f9ef70468c0366670 (patch) | |
tree | d6610b4eb96c4c69bb69a486c43d270ce1b46b82 /activesupport/lib | |
parent | e1a72fef7de9a5c0871b0ef1a4acb9483d2bf1f3 (diff) | |
parent | 75924c4517c8f87712d3f59c11f10152ed57b9d8 (diff) | |
download | rails-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.rb | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/duration.rb | 41 |
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) |