ext/attribute_builder/attribute_builder.c in faml-0.6.3 vs ext/attribute_builder/attribute_builder.c in faml-0.6.4
- old
+ new
@@ -11,11 +11,11 @@
#endif
#define FOREACH_FUNC(func) ((int (*)(ANYARGS))(func))
VALUE rb_mAttributeBuilder;
-static ID id_keys, id_sort_bang, id_uniq_bang, id_merge_bang;
+static ID id_keys, id_sort_bang, id_uniq_bang, id_merge_bang, id_flatten;
static ID id_id, id_class, id_underscore, id_hyphen, id_space, id_equal;
static void
concat_array_attribute(VALUE attributes, VALUE hash, VALUE key)
{
@@ -24,11 +24,15 @@
Check_Type(hash, T_HASH);
v = rb_hash_delete(hash, key);
if (!NIL_P(v)) {
VALUE ary;
- v = rb_Array(v);
+ if (RB_TYPE_P(v, T_ARRAY)) {
+ v = rb_funcall(v, id_flatten, 0);
+ } else {
+ v = rb_Array(v);
+ }
ary = rb_hash_lookup(attributes, key);
Check_Type(ary, T_ARRAY);
rb_ary_concat(ary, v);
}
}
@@ -331,9 +335,10 @@
id_keys = rb_intern("keys");
id_sort_bang = rb_intern("sort!");
id_uniq_bang = rb_intern("uniq!");
id_merge_bang = rb_intern("merge!");
+ id_flatten = rb_intern("flatten");
id_id = rb_intern("ID");
id_class = rb_intern("CLASS");
id_underscore = rb_intern("UNDERSCORE");
id_hyphen = rb_intern("HYPHEN");