예제 #1
0
grn_ctx *
rb_grn_context_ensure (VALUE *context)
{
    if (NIL_P(*context))
	*context = rb_grn_context_get_default();
    return SELF(*context);
}
예제 #2
0
/*
 * call-seq:
 *   Groonga::Plugin.register(name, options=nil)
 *   Groonga::Plugin.register({:path => path, :context => nil})
 *
 * 既存のプラグインをデータベースに登録する。
 *
 * _name_ を指定した場合はその名前のプラグインを登録する。
 *
 * _path_ を指定した場合はそのパスのプラグインを登録する。
 *
 * _options_ にはハッシュでオプションを指定する。指定できるオ
 * プションは以下の通り。
 * @param options [::Hash] The name and value
 *   pairs. Omitted names are initialized as the default value.
 * @option options :context (Groonga::Context.default) The context
 *
 *   データベースを結びつけるコンテキスト。
 */
static VALUE
rb_grn_plugin_s_register (int argc, VALUE *argv, VALUE klass)
{
    const char *name = NULL, *path = NULL;
    VALUE rb_options, rb_name = Qnil, rb_path, rb_context;
    grn_ctx *context;

    if (argc >= 1) {
        rb_name = rb_check_string_type(argv[0]);
    }

    if (NIL_P(rb_name)) {
        rb_scan_args(argc, argv, "01", &rb_options);
        rb_grn_scan_options(rb_options,
                            "path", &rb_path,
                            "context", &rb_context,
                            NULL);
        path = StringValueCStr(rb_path);
    } else {
        rb_scan_args(argc, argv, "11", &rb_name, &rb_options);
        rb_grn_scan_options(rb_options,
                            "context", &rb_context,
                            NULL);
        name = StringValueCStr(rb_name);
    }

    if (NIL_P(rb_context)) {
        rb_context = rb_grn_context_get_default();
    }
    context = RVAL2GRNCONTEXT(rb_context);

    if (name) {
        grn_plugin_register(context, name);
    } else {
        grn_plugin_register_by_path(context, path);
    }

    rb_grn_context_check(context, rb_ary_new4(argc, argv));
    return Qnil;
}