You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by mc...@apache.org on 2012/12/18 19:21:07 UTC

svn commit: r1423567 - in /qpid/trunk/qpid/cpp/bindings/qpid/ruby: lib/qpid_messaging/duration.rb spec/qpid_messaging/duration_spec.rb

Author: mcpierce
Date: Tue Dec 18 18:21:06 2012
New Revision: 1423567

URL: http://svn.apache.org/viewvc?rev=1423567&view=rev
Log:
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.

Modified:
    qpid/trunk/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb
    qpid/trunk/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb

Modified: qpid/trunk/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb?rev=1423567&r1=1423566&r2=1423567&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/ruby/lib/qpid_messaging/duration.rb Tue Dec 18 18:21:06 2012
@@ -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

Modified: qpid/trunk/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb?rev=1423567&r1=1423566&r2=1423567&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/ruby/spec/qpid_messaging/duration_spec.rb Tue Dec 18 18:21:06 2012
@@ -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



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org