The method now supports any argument whose each method yields a
key-value pair (array).
config = Rake::ConfigureTask.new do |t|
t.tests << Rake::ConfigureTask::
PkgConfigTest.new("vorbis", :is_critical => true)
config = Rake::ConfigureTask.new do |t|
t.tests << Rake::ConfigureTask::
PkgConfigTest.new("vorbis", :is_critical => true)
- t.tests << Rake::ConfigureTask::
- HaveFuncTest.new("rb_hash_foreach", "ruby.h",
- :is_critical => true)
t.tests << Rake::ConfigureTask::Gcc4Test.new("gcc4")
end
t.tests << Rake::ConfigureTask::Gcc4Test.new("gcc4")
end
-static ID id_casecmp, id_replace, id_compare;
+static ID id_casecmp, id_replace, id_each, id_compare;
void
comments_init (VALUE self, vcedit_state *state)
void
comments_init (VALUE self, vcedit_state *state)
-static int
-merge_cb (VALUE key, VALUE value, VALUE self)
+static VALUE
+merge_cb (VALUE ar, VALUE self)
- c_aset (self, key, value);
+ struct RArray *pair = RARRAY (ar);
+
+ c_aset (self, pair->ptr[0], pair->ptr[1]);
- * object.merge!(hash) -> object
+ * object.merge!(arg) -> object
- * Adds the key-value pairs from *hash* to *object*, overwriting existing
+ * Adds the key-value pairs from *arg* to *object*, overwriting existing
* values if a key already existed in *object*.
* values if a key already existed in *object*.
+ *
+ * Note that *arg*'s each method needs to yield key-value pairs for this
+ * to work. This means that e.g. hashes and Ogg::Vorbis::Comments objects
+ * are supported as arguments.
-c_merge (VALUE self, VALUE hash)
+c_merge (VALUE self, VALUE arg)
- Check_Type (hash, T_HASH);
+ if (!rb_respond_to (arg, id_each))
+ rb_raise (rb_eArgError, "invalid argument");
- rb_hash_foreach (hash, merge_cb, self);
+ rb_iterate (rb_each, arg, merge_cb, self);
id_casecmp = rb_intern ("casecmp");
id_replace = rb_intern ("replace");
id_casecmp = rb_intern ("casecmp");
id_replace = rb_intern ("replace");
+ id_each = rb_intern ("each");
id_compare = rb_intern ("<=>");
return c;
id_compare = rb_intern ("<=>");
return c;
+ def test_merge_bad_arg
+ Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
+ assert_raises(ArgumentError) do
+ t.comments.merge!(42)
+ end
+ end
+ end
+
def test_shift
Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
assert_equal(["artist", "Bolt Thrower"], t.comments.shift)
def test_shift
Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
assert_equal(["artist", "Bolt Thrower"], t.comments.shift)