diff options
Diffstat (limited to 'qpid/cpp/bindings')
| -rw-r--r-- | qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb | 16 | ||||
| -rw-r--r-- | qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb | 27 |
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 |
