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

Changeset 6901

Show
Ignore:
Timestamp:
05/30/07 06:21:08 (1 year ago)
Author:
bitsweat
Message:

Time durations use since instead of + for accuracy. Closes #8513.

Files:

Legend:

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

    r6893 r6901  
    11*SVN* 
     2 
     3* Time durations use since instead of + for accuracy.  #8513 [Geoff Buesing] 
    24 
    35* escape <'s and >'s in JSON strings. #8371 [Rick] 
  • trunk/activesupport/lib/active_support/core_ext/date_time/calculations.rb

    r6303 r6901  
    4646        # Do not use this method in combination with x.months, use months_since instead! 
    4747        def since(seconds) 
    48           self + Rational(seconds, 86400) 
     48          self + Rational(seconds.round, 86400) 
    4949        end 
    5050        alias :in :since 
  • trunk/activesupport/lib/active_support/duration.rb

    r6022 r6901  
    6868        if t.acts_like?(:time) 
    6969          if type == :seconds 
    70             t + (sign * number) 
     70            t.since(sign * number) 
    7171          else 
    7272            t.advance(type => sign * number) 
  • trunk/activesupport/test/core_ext/date_time_ext_test.rb

    r6854 r6901  
    113113    assert_equal DateTime.civil(2005,2,24,10,10,10), DateTime.civil(2005,2,22,10,10,10).since(86400*2) 
    114114    assert_equal DateTime.civil(2005,2,24,11,10,35), DateTime.civil(2005,2,22,10,10,10).since(86400*2 + 3600 + 25) 
     115    assert_equal DateTime.civil(2005,2,22,10,10,11), DateTime.civil(2005,2,22,10,10,10).since(1.333) 
     116    assert_equal DateTime.civil(2005,2,22,10,10,12), DateTime.civil(2005,2,22,10,10,10).since(1.667) 
    115117  end 
    116118 
  • trunk/activesupport/test/core_ext/numeric_ext_test.rb

    r6874 r6901  
    11require File.dirname(__FILE__) + '/../abstract_unit' 
    22 
    3 class NumericExtTimeTest < Test::Unit::TestCase 
     3class NumericExtTimeAndDateTimeTest < Test::Unit::TestCase 
    44  def setup 
    55    @now = Time.now 
     6    @dtnow = DateTime.now 
    67    @seconds = { 
    78      1.minute   => 60, 
     
    4142    assert_equal @now.advance(:months => -1), 1.month.until(@now) 
    4243    assert_equal @now.advance(:years => 20), 20.years.since(@now) 
     44    assert_equal @dtnow.advance(:days => 3000), 3000.days.since(@dtnow) 
     45    assert_equal @dtnow.advance(:months => 1), 1.month.since(@dtnow) 
     46    assert_equal @dtnow.advance(:months => -1), 1.month.until(@dtnow) 
     47    assert_equal @dtnow.advance(:years => 20), 20.years.since(@dtnow) 
    4348  end 
    4449   
     
    4752    assert_equal @now.advance(:days => 7), (1.week + 5.seconds - 5.seconds).since(@now) 
    4853    assert_equal @now.advance(:years => 2), (4.years - 2.years).since(@now) 
     54    assert_equal @dtnow.advance(:days => 1, :months => 1), (1.day + 1.month).since(@dtnow) 
     55    assert_equal @dtnow.advance(:days => 7), (1.week + 5.seconds - 5.seconds).since(@dtnow) 
     56    assert_equal @dtnow.advance(:years => 2), (4.years - 2.years).since(@dtnow)     
    4957  end 
    5058   
     
    5462    assert_equal @now.advance(:days => 15), @now + 15.days 
    5563    assert_equal @now.advance(:months => 1), @now + 1.month 
     64    assert_equal @dtnow.since(8), @dtnow + 8.seconds 
     65    assert_equal @dtnow.since(22.9), @dtnow + 22.9.seconds 
     66    assert_equal @dtnow.advance(:days => 15), @dtnow + 15.days 
     67    assert_equal @dtnow.advance(:months => 1), @dtnow + 1.month 
    5668  end 
    5769   
     
    5971    assert_equal @now.advance(:days => 2).advance(:months => -3), @now + 2.days - 3.months 
    6072    assert_equal @now.advance(:days => 1).advance(:months => 2), @now + 1.day + 2.months 
     73    assert_equal @dtnow.advance(:days => 2).advance(:months => -3), @dtnow + 2.days - 3.months 
     74    assert_equal @dtnow.advance(:days => 1).advance(:months => 2), @dtnow + 1.day + 2.months     
    6175  end 
    6276   
     
    6478    assert_equal 30.days.to_i.since(@now), 1.month.to_i.since(@now) 
    6579    assert_equal 365.25.days.to_f.since(@now), 1.year.to_f.since(@now) 
     80    assert_equal 30.days.to_i.since(@dtnow), 1.month.to_i.since(@dtnow) 
     81    assert_equal 365.25.days.to_f.since(@dtnow), 1.year.to_f.since(@dtnow)     
    6682  end 
    6783end