#50 - advanced ruby types test
authorFedor Yudanov <fedwiz@academ.org>
Tue, 9 Apr 2013 13:46:53 +0000 (20:46 +0700)
committerFedor Yudanov <fedwiz@academ.org>
Tue, 9 Apr 2013 13:46:53 +0000 (20:46 +0700)
rbejdb/src/rbbson.c
rbejdb/test/t2.rb

index 3fbcfd1..aeee16b 100644 (file)
@@ -65,6 +65,7 @@ VALUE createBsonContextWrap(bson* bsonval, VALUE rbobj, VALUE traverse, int flag
     rbbsctx->bsonval = bsonval;
     rbbsctx->obj = rbobj;
     rbbsctx->arrayIndex = 0;
+    rbbsctx->flags= flags;
     rbbsctx->traverse_hash = !NIL_P(traverse) ? traverse : rb_hash_new();
 
     return bsonContextWrap;
@@ -144,6 +145,9 @@ int iterate_key_values_callback(VALUE key, VALUE val, VALUE bsonContextWrap) {
             }
             break;
         case T_SYMBOL: {
+                if (rbbsctx->flags & RUBY_TO_BSON_AS_QUERY) {
+                    rb_raise(rb_eRuntimeError, "Symbol values in queries are not supported");
+                }
                 VALUE sname = rb_funcall(val, rb_intern("to_s"), 0);
                 bson_append_symbol(b, attrName, StringValuePtr(sname));
             }
index 2717665..c52403b 100644 (file)
@@ -547,6 +547,20 @@ class EJDBTestUnit < Test::Unit::TestCase
     assert_equal([1, 0, 255], obj["binary"].to_a)
     assert obj["time"].is_a? Time
 
+    #what we can't save
+    assert_raise(RangeError) {
+      $jb.save("monsters", {:toobigint => 3791237293719837192837292})
+    }
+    assert_raise(RuntimeError) {
+      $jb.save("monsters", {:class => Array})
+    }
+    assert_raise(RuntimeError) {
+      $jb.save("monsters", {:data => $jb})
+    }
+    assert_raise(RuntimeError) {
+      $jb.save("monsters", {:module => Math})
+    }
+
     #puts $jb.find("monsters").to_a.to_s
     assert_equal(7, $jb.find("monsters").count)
 
@@ -560,11 +574,15 @@ class EJDBTestUnit < Test::Unit::TestCase
 
     assert_equal(0, $jb.find("monsters", {:name => "abracadabra"}).count)
     assert_equal(0, $jb.find("monsters", {:name => ":abracadabra"}).count)
-    assert_equal(7, $jb.find("monsters", {:name => :abracadabra}).count) #todo: symbol search seems to be not supported yet
-    assert_equal(7, $jb.find("monsters", {:name => :what_is_this?}).count)
+    assert_raise(RuntimeError) {
+      $jb.find("monsters", {:name => :abracadabra}) #todo: symbol search seems to be not supported yet
+    }
 
     assert_equal(0, $jb.find("monsters", {:name => {"$in" => ["what_is_this?"]}}).count)
 
+    assert_equal(1, $jb.find("monsters", {:maxfixnum => {"$exists" => true}}, {:onlycount => true}))
+    assert_equal(6, $jb.find("monsters", {:maxfixnum => {"$exists" => false}}, {:onlycount => true}))
+
     puts __method__.inspect + " has passed successfull"
   end