[Archipelago-submits] [50] trunk/hyperactive: added tests for Record.reject and Record.select, and fixed some bugs for it

nobody at rubyforge.org nobody at rubyforge.org
Sun Nov 26 20:14:19 EST 2006


Revision: 50
Author:   zond
Date:     2006-11-26 20:14:19 -0500 (Sun, 26 Nov 2006)

Log Message:
-----------
added tests for Record.reject and Record.select, and fixed some bugs for it

Modified Paths:
--------------
    trunk/hyperactive/lib/hyperactive/record.rb
    trunk/hyperactive/lib/hyperactive/tree.rb
    trunk/hyperactive/tests/record_test.rb

Modified: trunk/hyperactive/lib/hyperactive/record.rb
===================================================================
--- trunk/hyperactive/lib/hyperactive/record.rb	2006-11-26 01:04:54 UTC (rev 49)
+++ trunk/hyperactive/lib/hyperactive/record.rb	2006-11-27 01:14:19 UTC (rev 50)
@@ -30,9 +30,10 @@
     #
     # Depending on <i>@mode</i> and return value of <i>@matcher</i>.call
     # may save record in the Hash-like container named <i>@key</i> in
-    # the main database.
+    # the main database after having yielded to +block+.
     #
-    def call(record)
+    def call(record, &block)
+      yield
       case @mode
       when :select
         if @matcher.call(record)
@@ -44,7 +45,7 @@
         if @matcher.call(record)
           CAPTAIN[@key].delete(record.record_id)
         else
-          CAPTAIN[@key][record.record_id] = record unless @matcher.call(record)
+          CAPTAIN[@key][record.record_id] = record
         end
       when :delete_if_match
         if @matcher.call(record)
@@ -148,10 +149,11 @@
     # is defined.
     #
     def self.select(name, matcher)
-      key = collection_key(name)
+      key = self.collection_key(name)
+      CAPTAIN[key] ||= Tree.get_instance
       self.class_eval <<END
 def self.#{name}
-    CAPTAIN[key]
+    CAPTAIN["#{key}"]
 end
 END
       self.save_hooks << MatchSaver.new(key, matcher, :select)
@@ -165,10 +167,11 @@
     # rejector is defined.
     #
     def self.reject(name, matcher)
-      key = collection_key(name)
+      key = self.collection_key(name)
+      CAPTAIN[key] ||= Tree.get_instance
       self.class_eval <<END
 def self.#{name}
-  CAPTAIN[key]
+    CAPTAIN["#{key}"]
 end
 END
       self.save_hooks << MatchSaver.new(key, matcher, :reject)
@@ -246,6 +249,13 @@
     private
 
     #
+    # The key used to store the collection with the given +sym+ as name.
+    #
+    def self.collection_key(sym)
+      "Hyperactive::Record::collection_key::#{sym}"
+    end
+
+    #
     # Get an Array from +hash+ using <i>self</i> as
     # key. If <i>self</i> doesnt exist in the +hash+
     # it will recurse by calling the same method in the

Modified: trunk/hyperactive/lib/hyperactive/tree.rb
===================================================================
--- trunk/hyperactive/lib/hyperactive/tree.rb	2006-11-26 01:04:54 UTC (rev 49)
+++ trunk/hyperactive/lib/hyperactive/tree.rb	2006-11-27 01:14:19 UTC (rev 50)
@@ -123,9 +123,9 @@
     #
     def collect(callable)
       rval = []
-      self.each do |e|
-        rval << callable.call(e)
-      end
+      self.each(Proc.new do |k,v|
+                  rval << callable.call(k,v)
+                end)
       return rval
     end
 

Modified: trunk/hyperactive/tests/record_test.rb
===================================================================
--- trunk/hyperactive/tests/record_test.rb	2006-11-26 01:04:54 UTC (rev 49)
+++ trunk/hyperactive/tests/record_test.rb	2006-11-27 01:14:19 UTC (rev 50)
@@ -56,6 +56,44 @@
     @c2.persistence_provider.unlink
     @tm.persistence_provider.unlink
   end
+
+  def test_select_reject
+    MyRecord.class_eval do
+      select(:brunt, Proc.new do |r|
+               r.bajs == "brunt"
+             end)
+      reject(:not_brunt, Proc.new do |r|
+               r.bajs == "brunt"
+             end)
+    end
+    r1 = MyRecord.get_instance
+    r1.bajs = "brunt"
+    r2 = MyRecord.get_instance
+    r2.bajs = "brunt"
+    r3 = MyRecord.get_instance
+    r3.bajs = "gult"
+    r4 = MyRecord.get_instance
+    r4.bajs = "beige"
+
+    assert_equal(Set.new([r2.record_id,r1.record_id]), Set.new(MyRecord.brunt.collect(Proc.new do |k,v|
+                                                                                        v.record_id
+                                                                                      end)))
+    assert_equal(Set.new([r3.record_id,r4.record_id]), Set.new(MyRecord.not_brunt.collect(Proc.new do |k,v|
+                                                                                            v.record_id
+                                                                                          end)))
+    
+    r1.destroy
+    r2.destroy
+    r3.destroy
+    r4.destroy
+
+    assert_equal(Set.new, Set.new(MyRecord.brunt.collect(Proc.new do |k,v|
+                                                           v.record_id
+                                                         end)))
+    assert_equal(Set.new, Set.new(MyRecord.not_brunt.collect(Proc.new do |k,v|
+                                                               v.record_id
+                                                             end)))
+  end
   
   def test_create_update_destroy
     r = MyRecord.get_instance




More information about the Archipelago-submits mailing list