summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorDarryl L. Pierce <mcpierce@apache.org>2012-12-18 18:21:06 +0000
committerDarryl L. Pierce <mcpierce@apache.org>2012-12-18 18:21:06 +0000
commite49088b19e8e0a4e9ba9a1f172ab0987a2c51287 (patch)
treeff5612828e0d5d561bd0dc685a14a4df5174a72e /qpid/cpp
parent65de21c29309642f26d177f93082e3cc317a8aa7 (diff)
downloadqpid-python-e49088b19e8e0a4e9ba9a1f172ab0987a2c51287.tar.gz
QPID-4466: Add support for Duration multiplication to Ruby bindings.
You can now multiply a Qpid::Messaging::Duration instance and get back a new instance of Qpid::Messaging::Duration. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1423567 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb16
-rw-r--r--qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb27
2 files changed, 43 insertions, 0 deletions
diff --git a/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb b/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb
index aca8fab8ae..1ff7857935 100644
--- a/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb
+++ b/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb
@@ -71,6 +71,22 @@ module Qpid
@duration_impl.getMilliseconds
end
+ # Returns a new Duration with a period of time that is a multiple
+ # of the original Duration.
+ #
+ # Raises exceptions on a negative factor. Returns
+ # Qpid::Messaging::Duration::IMMEDIATE when the factor is 0.
+ #
+ # ==== Examples
+ #
+ # twominutes = Qpid::Messaging::Duration::MINUTE * 2
+ #
+ def *(factor)
+ raise TypeError.new "Factors must be non-zero positive values" if factor < 0
+ return Qpid::Messaging::Duration::IMMEDIATE if factor.zero?
+ Qpid::Messaging::Duration.new((self.milliseconds * factor).floor)
+ end
+
def self.add_item(key, value) # :nodoc:
@hash ||= {}
@hash[key] = Duration.new value
diff --git a/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb b/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb
index 4980b6ffe7..202332d232 100644
--- a/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb
+++ b/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb
@@ -49,6 +49,33 @@ module Qpid
milliseconds.should == 1000
end
+ it "raises an error when multiplied by a negative" do
+ expect {
+ twomin = Qpid::Messaging::Duration::MINUTE * -2
+ }.to raise_error
+ end
+
+ it "returns IMMEDIATE if the factor is zero" do
+ result = Qpid::Messaging::Duration::MINUTE * 0
+ result.should be(Qpid::Messaging::Duration::IMMEDIATE)
+ end
+
+ it "fractional factors return a reduced duration" do
+ factor = rand(1)
+ first = Qpid::Messaging::Duration::MINUTE
+ second = first * factor
+
+ second.milliseconds.should == ((first.milliseconds * factor).floor)
+ end
+
+ it "can return a multiple of its duration" do
+ factor = rand(10).floor
+ first = Qpid::Messaging::Duration.new(rand(10).floor * 10000)
+ second = first * factor
+
+ second.milliseconds.should == first.milliseconds * factor
+ end
+
end
end