Made Ogg::Vorbis::Comments usable standalone, too.
authorTilman Sauerbeck <tilman@code-monkey.de>
Thu, 7 Sep 2006 10:57:41 +0000 (12:57 +0200)
committerTilman Sauerbeck <tilman@code-monkey.de>
Thu, 7 Sep 2006 10:57:41 +0000 (12:57 +0200)
ext/comments.c
test/test_main.rb

index f7919dbdac1e20219a8a45dd70d79a1361aa5f95..fb3ae82f653d727d751cc9975626caabfb1b5f8c 100644 (file)
@@ -35,8 +35,8 @@ comments_init (VALUE self, vcedit_state *state)
 
        vc = vcedit_comments (state);
 
-       items = rb_ary_new2 (vc->comments);
-       rb_iv_set (self, "items", items);
+       items = rb_iv_get (self, "items");
+       rb_ary_clear (items);
 
        for (i = 0; i < vc->comments; i++) {
                VALUE k, v, pair;
@@ -79,6 +79,19 @@ comments_sync (VALUE self, vcedit_state *state)
                                        StringValuePtr (pair->ptr[1]));
        }
 }
+/*
+ * call-seq:
+ *  Ogg::Vorbis::Comments.new -> object
+ *
+ * Creates an Ogg::Vorbis::Comments object.
+ */
+static VALUE
+c_init (VALUE self)
+{
+       rb_iv_set (self, "items", rb_ary_new ());
+
+       return self;
+}
 
 /*
  * call-seq:
@@ -493,6 +506,7 @@ Init_Comments (VALUE mVorbis)
 
        c = rb_define_class_under (mVorbis, "Comments", rb_cObject);
 
+       rb_define_method (c, "initialize", c_init, 0);
        rb_define_method (c, "inspect", c_inspect, 0);
        rb_define_method (c, "clear", c_clear, 0);
        rb_define_method (c, "delete", c_delete, 1);
index a4a14504d463f1bf3f91786fd7b28445b1f4c97b..817b59fbb6859784a04d0f2a4d8ad2a46afff5b6 100644 (file)
@@ -295,4 +295,9 @@ EOF
        ensure
                FileUtils.rm_f("test/foo.bar")
        end
+
+       def test_standalone_comments_object
+               o = Ogg::Vorbis::Comments.new
+               assert_equal(o.length, 0);
+       end
 end