[macruby-changes] [3413] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue Feb 2 12:58:45 PST 2010


Revision: 3413
          http://trac.macosforge.org/projects/ruby/changeset/3413
Author:   ernest.prabhakar at gmail.com
Date:     2010-02-02 12:58:45 -0800 (Tue, 02 Feb 2010)
Log Message:
-----------
Completed Dispatch::Actor spec, removed debug messages

Modified Paths:
--------------
    MacRuby/trunk/lib/dispatch/actor.rb
    MacRuby/trunk/spec/macruby/library/dispatch/actor_spec.rb

Modified: MacRuby/trunk/lib/dispatch/actor.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/actor.rb	2010-02-02 20:58:43 UTC (rev 3412)
+++ MacRuby/trunk/lib/dispatch/actor.rb	2010-02-02 20:58:45 UTC (rev 3413)
@@ -1,13 +1,12 @@
 require 'delegate'
 
 module Dispatch
-  # Create an Actor that serializes or asynchronizes access to a delegate.
+  # Serialize or asynchronize access to a delegate object.
   # Forwards method invocations to the passed object via a private serial queue, 
   # and optionally calls back asynchronously (if given a block or group).
   #
   # Note that this will NOT work for methods that themselves expect a block.
   # For those, use e.g., the Enumerable p_* methods insteads. 
-  #
   class Actor < SimpleDelegator
     
     # Create an Actor to wrap the given +delegate+,
@@ -19,40 +18,42 @@
     end
         
     # Specify the +callback+ queue for async requests
+    # => self to allow chaining
     def _on_(callback)
       @callback = callback
       self
     end
 
-    # Specify the +group+ for async requests
+    # Specify the +group+ for both private async requests
     def _with_(group)
       @group = group
       self
+      # => self to allow chaining
     end
 
-    # Wait until the internal private queue has completed execution
-    # then returns the +delegate+ object
+    # Wait until the internal private queue has completed pending executions
+    # then return the +delegate+ object
     def _done_
       @q.sync { }
       __getobj__
     end
-    
+
+    # Calls the +delegate+ object asychronously if there is a block or group,
+    # else synchronously
     def method_missing(symbol, *args, &block)
       if block_given? or not @group.nil?
-        #puts "\nAsync #{symbol.inspect}"
         callback = @callback
         @q.async(@group) do
           retval = __getobj__.__send__(symbol, *args)
-          callback.async { block.call(retval) } if not callback.nil?
+          callback.async { block.call(retval) }  if not block.nil?
         end
         return nil
       else
-        #puts "\nSync #{symbol.inspect}" if symbol != :__
         @retval = nil
         @q.sync { @retval = __getobj__.__send__(symbol, *args) }
         return @retval
       end
     end
-    
+
   end
 end

Modified: MacRuby/trunk/spec/macruby/library/dispatch/actor_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/actor_spec.rb	2010-02-02 20:58:43 UTC (rev 3412)
+++ MacRuby/trunk/spec/macruby/library/dispatch/actor_spec.rb	2010-02-02 20:58:45 UTC (rev 3413)
@@ -39,9 +39,7 @@
 
     it "should call actee Synchronously if block is NOT given" do
       $global = 0
-      t0 = Time.now
       @actor.delay_set(42)
-      t1 = Time.now
       $global.should == 42
     end
 
@@ -49,6 +47,14 @@
       @actor.increment(41).should == 42
     end
 
+    it "should call actee Asynchronously if block IS given" do
+      $global = 0
+      @actor.delay_set(42) { }
+      $global.should == 0
+      while $global == 0 do; end
+      $global.should == 42      
+    end
+
     it "should return nil when called Asynchronously" do
       @v = 0
       v = @actor.increment(41) {|rv| @v = rv}
@@ -62,15 +68,6 @@
       @v.should == 42
     end
 
-    it "should call actee Asynchronously if block IS given" do
-      $global = 0
-      $global.should == 0
-      @actor.delay_set(42) { }
-      $global.should == 0
-      while $global == 0 do; end
-      $global.should == 42      
-    end
-
     it "should use default callback queue when called Asynchronously" do
       @qs = ""
       @actor.increment(41) {|rv| @qs = Dispatch::Queue.current.to_s}
@@ -87,16 +84,30 @@
       @qs.should == qn.label
     end
 
-    it "should use callback queue specified by _on" do
-      true.should == true
+    it "should use callback queue specified by _on_" do
+      qn = Dispatch::Queue.new("custom")
+      @qs = ""
+      @actor._on_(qn).increment(41) {|rv| @qs = Dispatch::Queue.current.to_s}
+      while @qs == "" do; end
+      @qs.should == qn.label
     end
 
-    it "should invoke actee async with group specified by _with" do
-      true.should == true
+    it "should invoke actee async when group specified by _with_" do
+      $global = 0
+      g = Dispatch::Group.new
+      @actor._with_(g).delay_set(42)
+      $global.should == 0
+      g.wait
+      $global.should == 42      
     end
 
-    it "should return actee when called with _done" do
-      true.should == true
+    it "should complete work and return actee when called with _done" do
+      $global = 0
+      @actor.delay_set(42) { }
+      $global.should == 0
+      actee = @actor._done_
+      $global.should == 42
+      actee.should == @actee     
     end
   end
   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100202/9aa8d64d/attachment-0001.html>


More information about the macruby-changes mailing list