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

Ticket #8513: duration_with_seconds_uses_since_instead_of_plus.diff

File duration_with_seconds_uses_since_instead_of_plus.diff, 4.7 kB (added by gbuesing, 2 years ago)
  • test/core_ext/numeric_ext_test.rb

    old new  
    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, 
    89      10.minutes => 600, 
     
    4041    assert_equal @now.advance(:months => 1), 1.month.since(@now) 
    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   
    4550  def test_duration_addition 
    4651    assert_equal @now.advance(:days => 1, :months => 1), (1.day + 1.month).since(@now) 
    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   
    5159  def test_time_plus_duration 
     
    5361    assert_equal @now + 22.9, @now + 22.9.seconds 
    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   
    5870  def test_chaining_duration_operations 
    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   
    6377  def test_duration_after_convertion_is_no_longer_accurate 
    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 
    6884 
  • test/core_ext/date_time_ext_test.rb

    old new  
    112112    assert_equal DateTime.civil(2005,2,22,11,10,10), DateTime.civil(2005,2,22,10,10,10).since(3600) 
    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 
    117119  def test_yesterday 
  • lib/active_support/duration.rb

    old new  
    6767      parts.inject(time) do |t,(type,number)| 
    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) 
    7373          end 
  • lib/active_support/core_ext/date_time/calculations.rb

    old new  
    4545        # Returns a new DateTime representing the time a number of seconds since the instance time 
    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 
    5151