/* * call-seq: * leave(string) -> nil * leave(array) -> nil * * Leave the specified group or Array of groups. This only makes sense * to do if you have previously joined the specified groups via * #join. However, as of Spread 3.17.3, Spread will _not_ raise an * error if you attempt to leave a group you aren't a member of. */ static VALUE spconn_leave(VALUE obj, VALUE group) { struct SpreadConnection *sp; int n; Data_Get_Struct(obj, struct SpreadConnection, sp); if (TYPE(group) == T_ARRAY) { int i; for (i = 0; i < RARRAY(group)->len; i++) { VALUE tmp = RARRAY(group)->ptr[i]; if ((n = SP_leave(sp->mbox, StringValuePtr(tmp))) < 0) raise_sp_error(n); } } else { /* Must be a string or equivalent, raise type error if not */ if ((n = SP_leave(sp->mbox, StringValuePtr(group))) < 0) raise_sp_error(n); } return Qnil; }