From c12f2ac3e3406c9b8c96615a13952ee0645caf5b Mon Sep 17 00:00:00 2001 From: Dan Barry Date: Mon, 19 Jan 2009 11:48:11 -0600 Subject: [PATCH] Duration#* --- activesupport/lib/active_support/duration.rb | 4 ++++ activesupport/test/core_ext/duration_test.rb | 10 ++++++++++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb index c41e86d..c2174af 100644 --- a/activesupport/lib/active_support/duration.rb +++ b/activesupport/lib/active_support/duration.rb @@ -33,6 +33,10 @@ 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 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 ab5a866..8334087 100644 --- a/activesupport/test/core_ext/duration_test.rb +++ b/activesupport/test/core_ext/duration_test.rb @@ -19,6 +19,16 @@ 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_adding_multiples_of_duration_to_date + assert_equal Date.new(2000,5,3), Date.new(2000,1,1) + ((2.months + 1.day) * 2) + end + def test_argument_error begin 1.second.ago('') -- 1.6.0.4