From 80d4d7f5fac3c58fba3ad02a7e568e57b53f3579 Mon Sep 17 00:00:00 2001 From: Dan Barry Date: Mon, 19 Jan 2009 11:48:11 -0600 Subject: [PATCH] Duration#* and Duration#/ --- activesupport/lib/active_support/duration.rb | 8 ++++++++ activesupport/test/core_ext/duration_test.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb index c41e86d..6844c56 100644 --- a/activesupport/lib/active_support/duration.rb +++ b/activesupport/lib/active_support/duration.rb @@ -33,6 +33,14 @@ module ActiveSupport Duration.new(-value, parts.map { |type,number| [type, -number] }) end + def *(count) + Duration.new(value * count, parts.map { |type, number| [type, number * count] }) + end + + def /(divisor) + self * (1.0 / divisor) + end + def is_a?(klass) #:nodoc: klass == Duration || super end diff --git a/activesupport/test/core_ext/duration_test.rb b/activesupport/test/core_ext/duration_test.rb index 3948006..26ee763 100644 --- a/activesupport/test/core_ext/duration_test.rb +++ b/activesupport/test/core_ext/duration_test.rb @@ -19,6 +19,23 @@ class DurationTest < ActiveSupport::TestCase assert_equal 1 + 1.second, 1.second + 1, "Duration + Numeric should == Numeric + Duration" end + def test_multiplication + assert_equal 2.months, 1.month * 2 + assert_equal 18.months - 6.days, (6.months - 2.days) * 3 + assert_equal -40.years - 8.months - 4.days, (10.years + 2.months + 1.day) * -4 + end + + def test_multiplication_associativity + assert_equal 1.month * 2, 2 * 1.month + assert_equal 1.month * 1.5, 1.5 * 1.month + end + + def test_division + assert_equal 1.month, 2.months / 2 + assert_equal 6.months - 2.days, (18.months - 6.days) / 3 + assert_equal -10.years - 2.months - 1.day, (40.years + 8.months + 4.days) / -4 + end + def test_argument_error begin 1.second.ago('') -- 1.5.4.2