/*
 *  call-seq:
 *    phrase_query.add_term(term, position_increment = 1) -> phrase_query
 *    phrase_query << term -> phrase_query
 *
 *  Add a term to the phrase query. By default the position_increment is set
 *  to 1 so each term you add is expected to come directly after the previous
 *  term. By setting position_increment to 2 you are specifying that the term
 *  you just added should occur two terms after the previous term. For
 *  example;
 *
 *    phrase_query.add_term("big").add_term("house", 2)
 *    # matches => "big brick house"
 *    # matches => "big red house"
 *    # doesn't match => "big house"
 */
static VALUE
frt_phq_add(int argc, VALUE *argv, VALUE self)
{
    VALUE rterm, rpos_inc;
    int pos_inc = 1;
    GET_Q();
    if (rb_scan_args(argc, argv, "11", &rterm, &rpos_inc) == 2) {
        pos_inc = FIX2INT(rpos_inc);
    }
    switch (TYPE(rterm)) {
        case T_STRING:
            {
                phq_add_term(q, StringValuePtr(rterm), pos_inc);
                break;
            }
        case T_ARRAY:
            {
                int i;
                char *t;
                if (RARRAY(rterm)->len < 1) {
                    rb_raise(rb_eArgError, "Cannot add empty array to a "
                             "PhraseQuery. You must add either a string or "
                             "an array of strings");
                }
                t = StringValuePtr(RARRAY(rterm)->ptr[0]);
                phq_add_term(q, t, pos_inc);
                for (i = 1; i < RARRAY(rterm)->len; i++) {
                    t = StringValuePtr(RARRAY(rterm)->ptr[i]);
                    phq_append_multi_term(q, t);
                }
                break;
            }
        default:
            rb_raise(rb_eArgError, "You can only add a string or an array of "
                     "strings to a PhraseQuery, not a %s\n", 
                     RSTRING(rb_obj_as_string(rterm))->ptr);
    }
    return self;
}