Skip to content
Browse files

defines prev_(month|year) in Date and Time to ease transition to 1.9,…

… and deprecates last_(month|year)
  • Loading branch information...
1 parent 903637f commit 2203c781a7dfa8b0c8b6c97cd318d941f9fbb26c @fxn fxn committed May 12, 2010
View
2 activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*Rails 3.0.0 [beta 4/release candidate] (unreleased)*
+* Defines prev_(month|year) in Date and Time, and deprecates last_(month|year). [fxn]
+
* Aliases Date#sunday to Date#end_of_week. [fxn]
* Backports Date#>> from 1.9 so that calculations do the right thing around the calendar reform. [fxn]
View
21 activesupport/lib/active_support/core_ext/date/calculations.rb
@@ -2,6 +2,7 @@
require 'active_support/duration'
require 'active_support/core_ext/time/zones'
require 'active_support/core_ext/object/acts_like'
+require 'active_support/deprecation'
class Date
if RUBY_VERSION < '1.9'
@@ -146,20 +147,30 @@ def years_since(years)
advance(:years => years)
end
- # Short-hand for years_ago(1)
- def last_year
- years_ago(1)
+ def last_year # :nodoc:
+ ActiveSupport::Deprecation.warn("Date#last_year has been deprecated, please use Date#prev_year instead", caller)
+ prev_year
end
+ # Shorthand for years_ago(1)
+ def prev_year
+ years_ago(1)
+ end unless method_defined?(:prev_year)
+
# Short-hand for years_since(1)
def next_year
years_since(1)
end unless method_defined?(:next_year)
+ def last_month # :nodoc:
+ ActiveSupport::Deprecation.warn("Date#last_month has been deprecated, please use Date#prev_month instead", caller)
+ prev_month
+ end
+
# Short-hand for months_ago(1)
- def last_month
+ def prev_month
months_ago(1)
- end
+ end unless method_defined?(:prev_month)
# Short-hand for months_since(1)
def next_month
View
14 activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -2,6 +2,7 @@
require 'active_support/core_ext/date/acts_like'
require 'active_support/core_ext/date/calculations'
require 'active_support/core_ext/date_time/conversions'
+require 'active_support/deprecation'
class Time
COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
@@ -132,8 +133,13 @@ def years_since(years)
advance(:years => years)
end
+ def last_year # :nodoc:
+ ActiveSupport::Deprecation.warn("Time#last_year has been deprecated, please use Time#prev_year instead", caller)
+ prev_year
+ end
+
# Short-hand for years_ago(1)
- def last_year
+ def prev_year
years_ago(1)
end
@@ -142,9 +148,13 @@ def next_year
years_since(1)
end
+ def last_month # :nodoc:
+ ActiveSupport::Deprecation.warn("Time#last_month has been deprecated, please use Time#prev_month instead", caller)
+ prev_month
+ end
# Short-hand for months_ago(1)
- def last_month
+ def prev_month
months_ago(1)
end
View
26 activesupport/test/core_ext/date_ext_test.rb
@@ -1,7 +1,7 @@
require 'abstract_unit'
require 'active_support/time'
-class DateExtCalculationsTest < Test::Unit::TestCase
+class DateExtCalculationsTest < ActiveSupport::TestCase
def test_to_s
date = Date.new(2005, 2, 21)
assert_equal "2005-02-21", date.to_s
@@ -145,16 +145,20 @@ def test_years_since
assert_equal Date.new(2005,2,28), Date.new(2004,2,29).years_since(1) # 1 year since leap day
end
- def test_last_year
- assert_equal Date.new(2004,6,5), Date.new(2005,6,5).last_year
+ def test_last_year_is_deprecated
+ assert_deprecated { Date.today.last_year }
end
- def test_last_year_in_leap_years
- assert_equal Date.new(1999,2,28), Date.new(2000,2,29).last_year
+ def test_prev_year
+ assert_equal Date.new(2004,6,5), Date.new(2005,6,5).prev_year
end
- def test_last_year_in_calendar_reform
- assert_equal Date.new(1582,10,4), Date.new(1583,10,14).last_year
+ def test_prev_year_in_leap_years
+ assert_equal Date.new(1999,2,28), Date.new(2000,2,29).prev_year
+ end
+
+ def test_prev_year_in_calendar_reform
+ assert_equal Date.new(1582,10,4), Date.new(1583,10,14).prev_year
end
def test_next_year
@@ -225,8 +229,12 @@ def test_next_month_on_31st
assert_equal Date.new(2005, 9, 30), Date.new(2005, 8, 31).next_month
end
- def test_last_month_on_31st
- assert_equal Date.new(2004, 2, 29), Date.new(2004, 3, 31).last_month
+ def test_last_month_is_deprecated
+ assert_deprecated { Date.today.last_month }
+ end
+
+ def test_prev_month_on_31st
+ assert_equal Date.new(2004, 2, 29), Date.new(2004, 3, 31).prev_month
end
def test_yesterday_constructor
View
8 activesupport/test/core_ext/date_time_ext_test.rb
@@ -127,8 +127,8 @@ def test_years_since
assert_equal DateTime.civil(2005,2,28,10), DateTime.civil(2004,2,29,10,0,0).years_since(1) # 1 year since leap day
end
- def test_last_year
- assert_equal DateTime.civil(2004,6,5,10), DateTime.civil(2005,6,5,10,0,0).last_year
+ def test_prev_year
+ assert_equal DateTime.civil(2004,6,5,10), DateTime.civil(2005,6,5,10,0,0).prev_year
end
def test_next_year
@@ -200,8 +200,8 @@ def test_next_month_on_31st
assert_equal DateTime.civil(2005, 9, 30), DateTime.civil(2005, 8, 31).next_month
end
- def test_last_month_on_31st
- assert_equal DateTime.civil(2004, 2, 29), DateTime.civil(2004, 3, 31).last_month
+ def test_prev_month_on_31st
+ assert_equal DateTime.civil(2004, 2, 29), DateTime.civil(2004, 3, 31).prev_month
end
def test_xmlschema
View
18 activesupport/test/core_ext/time_ext_test.rb
@@ -1,7 +1,7 @@
require 'abstract_unit'
require 'active_support/time'
-class TimeExtCalculationsTest < Test::Unit::TestCase
+class TimeExtCalculationsTest < ActiveSupport::TestCase
def test_seconds_since_midnight
assert_equal 1,Time.local(2005,1,1,0,0,1).seconds_since_midnight
assert_equal 60,Time.local(2005,1,1,0,1,0).seconds_since_midnight
@@ -166,8 +166,12 @@ def test_years_since
# assert_equal Time.local(2182,6,5,10), Time.local(2005,6,5,10,0,0).years_since(177)
end
- def test_last_year
- assert_equal Time.local(2004,6,5,10), Time.local(2005,6,5,10,0,0).last_year
+ def test_last_year_is_deprecated
+ assert_deprecated { Time.now.last_year }
+ end
+
+ def test_prev_year
+ assert_equal Time.local(2004,6,5,10), Time.local(2005,6,5,10,0,0).prev_year
end
def test_next_year
@@ -615,8 +619,12 @@ def test_next_month_on_31st
assert_equal Time.local(2005, 9, 30), Time.local(2005, 8, 31).next_month
end
- def test_last_month_on_31st
- assert_equal Time.local(2004, 2, 29), Time.local(2004, 3, 31).last_month
+ def test_last_month_is_deprecated
+ assert_deprecated { Time.now.last_month }
+ end
+
+ def test_prev_month_on_31st
+ assert_equal Time.local(2004, 2, 29), Time.local(2004, 3, 31).prev_month
end
def test_xmlschema_is_available
View
22 railties/guides/source/active_support_core_extensions.textile
@@ -2660,43 +2660,47 @@ Active Support defines +Date.current+ to be today in the current time zone. That
h5. Named dates
-h6. +last_year+, +next_year+
+h6. +prev_year+, +next_year+
-The methods +last_year+ and +next_year+ return a date with the same day/month in the last or next year:
+In Ruby 1.9 +prev_year+ and +next_year+ return a date with the same day/month in the last or next year:
<ruby>
d = Date.new(2010, 5, 8) # => Sat, 08 May 2010
-d.last_year # => Fri, 08 May 2009
+d.prev_year # => Fri, 08 May 2009
d.next_year # => Sun, 08 May 2011
</ruby>
If date is the 29th of February of a leap year, you obtain the 28th:
<ruby>
d = Date.new(2000, 2, 29) # => Tue, 29 Feb 2000
-d.last_year # => Sun, 28 Feb 1999
+d.prev_year # => Sun, 28 Feb 1999
d.next_year # => Wed, 28 Feb 2001
</ruby>
-h6. +last_month+, +next_month+
+Active Support defines these methods as well for Ruby 1.8.
-The methods +last_month+ and +next_month+ return the date with the same day in the last or next month:
+h6. +prev_month+, +next_month+
+
+In Ruby 1.9 +prev_month+ and +next_month+ return the date with the same day in the last or next month:
<ruby>
d = Date.new(2010, 5, 8) # => Sat, 08 May 2010
-d.last_month # => Thu, 08 Apr 2010
+d.prev_month # => Thu, 08 Apr 2010
d.next_month # => Tue, 08 Jun 2010
</ruby>
If such a day does not exist, the last day of the corresponding month is returned:
<ruby>
-Date.new(2000, 5, 31).last_month # => Sun, 30 Apr 2000
-Date.new(2000, 3, 31).last_month # => Tue, 29 Feb 2000
+Date.new(2000, 5, 31).prev_month # => Sun, 30 Apr 2000
+Date.new(2000, 3, 31).prev_month # => Tue, 29 Feb 2000
Date.new(2000, 5, 31).next_month # => Fri, 30 Jun 2000
Date.new(2000, 1, 31).next_month # => Tue, 29 Feb 2000
</ruby>
+Active Support defines these methods as well for Ruby 1.8.
+
h6. +beginning_of_week+, +end_of_week+
The methods +beginning_of_week+ and +end_of_week+ return the dates for the beginning and end of week, assuming weeks start on Monday:

0 comments on commit 2203c78

Please sign in to comment.
Something went wrong with that request. Please try again.