提交 d599b800 编写于 作者: T Tom Lea 提交者: gbuesing

Deprecated Float#years and Float#months, moved Numeric#years and Numeric#months into Integer.

上级 27c70ff3
require 'active_support/core_ext/float/rounding'
require 'active_support/core_ext/float/time'
class Float #:nodoc:
include ActiveSupport::CoreExtensions::Float::Rounding
include ActiveSupport::CoreExtensions::Float::Time
end
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Float #:nodoc:
module Time
# Deprication helper methods not available as core_ext is loaded first.
def years
::ActiveSupport::Deprecation.warn(self.class.deprecated_method_warning(:years), caller)
years_without_deprecation
end
def months
::ActiveSupport::Deprecation.warn(self.class.deprecated_method_warning(:months), "Fractional months are not respected. Use .to_i before ", caller)
months_without_deprecation
end
def months_without_deprecation
ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
end
alias :month :months
def years_without_deprecation
ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
end
alias :year :years
end
end
end
end
\ No newline at end of file
require 'active_support/core_ext/integer/even_odd'
require 'active_support/core_ext/integer/inflections'
require 'active_support/core_ext/integer/time'
class Integer #:nodoc:
include ActiveSupport::CoreExtensions::Integer::EvenOdd
include ActiveSupport::CoreExtensions::Integer::Inflections
include ActiveSupport::CoreExtensions::Integer::Time
end
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Integer #:nodoc:
# Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
#
# These methods use Time#advance for precise date calculations when using from_now, ago, etc.
# as well as adding or subtracting their results from a Time object. For example:
#
# # equivalent to Time.now.advance(:months => 1)
# 1.month.from_now
#
# # equivalent to Time.now.advance(:years => 2)
# 2.years.from_now
#
# # equivalent to Time.now.advance(:months => 4, :years => 5)
# (4.months + 5.years).from_now
#
# While these methods provide precise calculation when used as in the examples above, care
# should be taken to note that this is not true if the result of `months', `years', etc is
# converted before use:
#
# # equivalent to 30.days.to_i.from_now
# 1.month.to_i.from_now
#
# # equivalent to 365.25.days.to_f.from_now
# 1.year.to_f.from_now
#
# In such cases, Ruby's core
# Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and
# Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision
# date and time arithmetic
module Time
def months
ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
end
alias :month :months
def years
ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
end
alias :year :years
end
end
end
end
......@@ -60,16 +60,6 @@ def fortnights
end
alias :fortnight :fortnights
def months
ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
end
alias :month :months
def years
ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
end
alias :year :years
# Reads best without arguments: 10.minutes.ago
def ago(time = ::Time.now)
time - self
......
......@@ -64,6 +64,24 @@ def test_since_and_ago_with_fractional_weeks
assert_equal((7 * 36).hours.ago, 1.5.weeks.ago)
assert_equal((7 * 24 * 1.7).hours.ago, 1.7.weeks.ago)
end
def test_deprecated_fractional_years
assert_deprecated{1.0.years}
assert_deprecated{1.5.years}
assert_not_deprecated{1.years}
assert_deprecated{1.0.year}
assert_deprecated{1.5.year}
assert_not_deprecated{1.year}
end
def test_deprecated_fractional_months
assert_deprecated{1.5.months}
assert_deprecated{1.0.months}
assert_not_deprecated{1.months}
assert_deprecated{1.5.month}
assert_deprecated{1.0.month}
assert_not_deprecated{1.month}
end
def test_since_and_ago_anchored_to_time_now_when_time_zone_default_not_set
Time.zone_default = nil
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册