Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 7868

Show
Ignore:
Timestamp:
10/13/07 23:56:00 (11 months ago)
Author:
bitsweat
Message:

Time, Date and DateTime #advance accept :weeks option. Closes #9866.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/CHANGELOG

    r7867 r7868  
    11*SVN* 
     2 
     3* Time, Date and DateTime #advance accept :weeks option.  #9866 [Geoff Buesing] 
    24 
    35* Fix Time#years_ago and #years_since from leap days.  #9865 [Geoff Buesing] 
  • trunk/activesupport/lib/active_support/core_ext/date_time/calculations.rb

    r7866 r7868  
    2929 
    3030        # Uses Date to provide precise Time calculations for years, months, and days.  The +options+ parameter takes a hash with 
    31         # any of these keys: :years, :months, :days, :hours, :minutes, :seconds. 
     31        # any of these keys: :years, :months, :weeks, :days, :hours, :minutes, :seconds. 
    3232        def advance(options) 
    3333          d = to_date.advance(options) 
  • trunk/activesupport/lib/active_support/core_ext/date/calculations.rb

    r7863 r7868  
    6969         
    7070        # Provides precise Date calculations for years, months, and days.  The +options+ parameter takes a hash with  
    71         # any of these keys: :months, :days, :years. 
     71        # any of these keys: :years, :months, :weeks, :days. 
    7272        def advance(options) 
    7373          d = self 
    7474          d = d >> options.delete(:years) * 12 if options[:years] 
    7575          d = d >> options.delete(:months)     if options[:months] 
     76          d = d +  options.delete(:weeks) * 7  if options[:weeks] 
    7677          d = d +  options.delete(:days)       if options[:days] 
    7778          d 
  • trunk/activesupport/lib/active_support/core_ext/time/calculations.rb

    r7867 r7868  
    7373 
    7474        # Uses Date to provide precise Time calculations for years, months, and days.  The +options+ parameter takes a hash with 
    75         # any of these keys: :years, :months, :days, :hours, :minutes, :seconds. 
     75        # any of these keys: :years, :months, :weeks, :days, :hours, :minutes, :seconds. 
    7676        def advance(options) 
    7777          d = to_date.advance(options) 
  • trunk/activesupport/test/core_ext/date_ext_test.rb

    r7863 r7868  
    123123  end 
    124124 
    125   def test_plus 
     125  def test_advance 
    126126    assert_equal Date.new(2006,2,28), Date.new(2005,2,28).advance(:years => 1) 
    127127    assert_equal Date.new(2005,6,28), Date.new(2005,2,28).advance(:months => 4) 
     128    assert_equal Date.new(2005,3,21), Date.new(2005,2,28).advance(:weeks => 3) 
     129    assert_equal Date.new(2005,3,5), Date.new(2005,2,28).advance(:days => 5) 
    128130    assert_equal Date.new(2012,9,28), Date.new(2005,2,28).advance(:years => 7, :months => 7) 
    129131    assert_equal Date.new(2013,10,3), Date.new(2005,2,28).advance(:years => 7, :months => 19, :days => 5) 
     132    assert_equal Date.new(2013,10,17), Date.new(2005,2,28).advance(:years => 7, :months => 19, :weeks => 2, :days => 5) 
    130133    assert_equal Date.new(2005,2,28), Date.new(2004,2,29).advance(:years => 1) #leap day plus one year 
    131134  end 
  • trunk/activesupport/test/core_ext/date_time_ext_test.rb

    r7866 r7868  
    169169    assert_equal DateTime.civil(2006,2,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 1) 
    170170    assert_equal DateTime.civil(2005,6,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:months => 4) 
     171    assert_equal DateTime.civil(2005,3,21,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:weeks => 3) 
     172    assert_equal DateTime.civil(2005,3,5,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:days => 5) 
    171173    assert_equal DateTime.civil(2012,9,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 7) 
    172174    assert_equal DateTime.civil(2013,10,3,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5) 
     175    assert_equal DateTime.civil(2013,10,17,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5) 
    173176    assert_equal DateTime.civil(2001,12,27,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    174177    assert_equal DateTime.civil(2005,2,28,15,15,10), DateTime.civil(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     
    178181    assert_equal DateTime.civil(2005,2,28,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
    179182    assert_equal DateTime.civil(2005,2,28,10,8,1), DateTime.civil(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
    180     assert_equal DateTime.civil(2013,10,3,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
     183    assert_equal DateTime.civil(2013,10,17,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
    181184 
    182185  end 
  • trunk/activesupport/test/core_ext/time_ext_test.rb

    r7867 r7868  
    243243    assert_equal Time.local(2006,2,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 1) 
    244244    assert_equal Time.local(2005,6,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:months => 4) 
     245    assert_equal Time.local(2005,3,21,15,15,10), Time.local(2005,2,28,15,15,10).advance(:weeks => 3) 
     246    assert_equal Time.local(2005,3,5,15,15,10), Time.local(2005,2,28,15,15,10).advance(:days => 5) 
    245247    assert_equal Time.local(2012,9,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 7) 
    246248    assert_equal Time.local(2013,10,3,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5) 
     249    assert_equal Time.local(2013,10,17,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5) 
    247250    assert_equal Time.local(2001,12,27,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    248251    assert_equal Time.local(2005,2,28,15,15,10), Time.local(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     
    252255    assert_equal Time.local(2005,2,28,20,22,19), Time.local(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
    253256    assert_equal Time.local(2005,2,28,10,8,1), Time.local(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
    254     assert_equal Time.local(2013,10,3,20,22,19), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
     257    assert_equal Time.local(2013,10,17,20,22,19), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
    255258  end 
    256259 
     
    258261    assert_equal Time.utc(2006,2,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 1) 
    259262    assert_equal Time.utc(2005,6,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:months => 4) 
     263    assert_equal Time.utc(2005,3,21,15,15,10), Time.utc(2005,2,28,15,15,10).advance(:weeks => 3) 
     264    assert_equal Time.utc(2005,3,5,15,15,10), Time.utc(2005,2,28,15,15,10).advance(:days => 5) 
    260265    assert_equal Time.utc(2012,9,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 7, :months => 7) 
    261266    assert_equal Time.utc(2013,10,3,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 7, :months => 19, :days => 11) 
     267    assert_equal Time.utc(2013,10,17,15,15,10), Time.utc(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5) 
    262268    assert_equal Time.utc(2001,12,27,15,15,10), Time.utc(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    263269    assert_equal Time.utc(2005,2,28,15,15,10), Time.utc(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     
    267273    assert_equal Time.utc(2005,2,28,20,22,19), Time.utc(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
    268274    assert_equal Time.utc(2005,2,28,10,8,1), Time.utc(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
    269     assert_equal Time.utc(2013,10,3,20,22,19), Time.utc(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
     275    assert_equal Time.utc(2013,10,17,20,22,19), Time.utc(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :weeks => 2, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
    270276  end 
    271277