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");