Added Ogg::Vorbis::Comments#shift.
authorTilman Sauerbeck <tilman@code-monkey.de>
Tue, 15 Aug 2006 17:40:25 +0000 (19:40 +0200)
committerTilman Sauerbeck <tilman@code-monkey.de>
Wed, 23 Aug 2006 17:33:53 +0000 (19:33 +0200)
ext/comments.c
test/test_main.rb

index cdaf576ae7e697571297a7b2a573525a8edf1e02..f7919dbdac1e20219a8a45dd70d79a1361aa5f95 100644 (file)
@@ -357,6 +357,20 @@ c_merge (VALUE self, VALUE hash)
        return self;
 }
 
+/*
+ * call-seq:
+ *  object.shift(hash) -> array or nil
+ *
+ * Removes the first key-value pair from *object* and returns it
+ * as the two-item array [key, value].
+ * If *object* is empty, +nil+ is returned.
+ */
+static VALUE
+c_shift (VALUE self)
+{
+       return rb_ary_shift (rb_iv_get (self, "items"));
+}
+
 /*
  * call-seq:
  *  object <=> other -> -1, 0 or 1
@@ -490,6 +504,7 @@ Init_Comments (VALUE mVorbis)
        rb_define_method (c, "keys", c_keys, 0);
        rb_define_method (c, "values", c_values, 0);
        rb_define_method (c, "merge!", c_merge, 1);
+       rb_define_method (c, "shift", c_shift, 0);
 
        rb_include_module (c, rb_mComparable);
        rb_define_method (c, "<=>", c_compare, 1);
index be81bb87048ca263bf456854eb0b627553db0f70..802c9c5385d3ea1d5a040d3deef87f2e1a30971b 100644 (file)
@@ -230,4 +230,13 @@ EOF
                                     t.comments.values)
                end
        end
+
+       def test_shift
+               Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
+                       assert_equal(["artist", "Bolt Thrower"], t.comments.shift)
+                       assert_equal(["album", "...For Victory"], t.comments.shift)
+                       assert_equal(["date", "1994"], t.comments.shift)
+                       assert_equal(nil, t.comments.shift)
+               end
+       end
 end