/*
 *  call-seq:
 *     lazy_doc.default(key) -> string
 *
 *  This method is used internally to lazily load fields. You should never
 *  really need to call it yourself.
 */
static VALUE
frt_lzd_default(VALUE self, VALUE rkey)
{
    LazyDoc *lazy_doc = (LazyDoc *)DATA_PTR(rb_ivar_get(self, id_data));
    char *field = NULL;
    switch (TYPE(rkey)) {
        case T_STRING:
            field = RSTRING(rkey)->ptr;
            rkey = ID2SYM(rb_intern(field));
            break;
        case T_SYMBOL:
            field = frt_field(rkey);
            break;
        default:
            rb_raise(rb_eArgError,
                     "%s cannot be a key to a field. Field keys must "
                     " be symbols.", RSTRING(rb_obj_as_string(rkey))->ptr);
            break;
    }
    return frt_lazy_df_load(self, rkey, h_get(lazy_doc->field_dict, field));
}