static VALUE rb_grn_expression_initialize (int argc, VALUE *argv, VALUE self) { grn_ctx *context = NULL; grn_obj *expression; VALUE options, rb_context, rb_name; char *name = NULL; unsigned name_size = 0; rb_scan_args(argc, argv, "01", &options); rb_grn_scan_options(options, "context", &rb_context, "name", &rb_name, NULL); context = rb_grn_context_ensure(&rb_context); if (!NIL_P(rb_name)) { name = StringValuePtr(rb_name); name_size = RSTRING_LEN(rb_name); } expression = grn_expr_create(context, name, name_size); rb_grn_context_check(context, self); rb_grn_object_assign(Qnil, self, rb_context, context, expression); rb_grn_context_register_floating_object(DATA_PTR(self)); rb_iv_set(self, "@objects", rb_ary_new()); return Qnil; }
/* * スニペットを作成する。 * * @overload new(options={}) * @param options [::Hash] The name and value * pairs. Omitted names are initialized as the default value. * @option options :context (Groonga::Context.default) * スキーマ作成時に使用するGroonga::Contextを指定する。 * @option options :normalize * キーワード文字列・スニペット元の文字列を正規化するかどうか。 * 省略した場合は +false+ で正規化しない。 * @option options :skip_leading_spaces (false) * 先頭の空白を無視するかどうか。省略した場合は +false+ で無視しない。 * @option options :width (100) * スニペット文字列の長さ。省略した場合は100文字。 * @option options :max_results (3) * 生成するスニペットの最大数。省略した場合は3。 * @option options :html_escape (false) * スニペット内の +<+ , +>+ , +&+ , +"+ をHTMLエスケープするかどうか。 * 省略した場合は +false+ で、HTMLエスケープしない。 * @option options :default_open_tag ("") * デフォルトの開始タグ。省略した場合は""(空文字列) * @option options :default_close_tag ("") * デフォルトの終了タグ。省略した場合は""(空文字列) */ static VALUE rb_grn_snippet_initialize (int argc, VALUE *argv, VALUE self) { grn_ctx *context = NULL; grn_snip *snippet = NULL; VALUE options; VALUE rb_context, rb_normalize, rb_skip_leading_spaces; VALUE rb_width, rb_max_results, rb_default_open_tag, rb_default_close_tag; VALUE rb_html_escape; int flags = GRN_SNIP_COPY_TAG; unsigned int width = 100; unsigned int max_results = 3; char *default_open_tag = NULL; unsigned int default_open_tag_length = 0; char *default_close_tag = NULL; unsigned int default_close_tag_length = 0; grn_snip_mapping *mapping = NULL; rb_scan_args(argc, argv, "01", &options); rb_grn_scan_options(options, "context", &rb_context, "normalize", &rb_normalize, "skip_leading_spaces", &rb_skip_leading_spaces, "width", &rb_width, "max_results", &rb_max_results, "default_open_tag", &rb_default_open_tag, "default_close_tag", &rb_default_close_tag, "html_escape", &rb_html_escape, NULL); context = rb_grn_context_ensure(&rb_context); if (!grn_ctx_db(context)) { rb_raise(rb_eArgError, "Groonga::Context should be associated with a database by " "Groonga::Database#open or #create: %s", rb_grn_inspect(rb_context)); } if (RVAL2CBOOL(rb_normalize)) flags |= GRN_SNIP_NORMALIZE; if (RVAL2CBOOL(rb_skip_leading_spaces)) flags |= GRN_SNIP_SKIP_LEADING_SPACES; if (!NIL_P(rb_width)) width = NUM2UINT(rb_width); if (!NIL_P(rb_max_results)) max_results = NUM2UINT(rb_max_results); if (!NIL_P(rb_default_open_tag)) { default_open_tag = StringValuePtr(rb_default_open_tag); default_open_tag_length = RSTRING_LEN(rb_default_open_tag); } if (!NIL_P(rb_default_close_tag)) { default_close_tag = StringValuePtr(rb_default_close_tag); default_close_tag_length = RSTRING_LEN(rb_default_close_tag); } if (RVAL2CBOOL(rb_html_escape)) mapping = (grn_snip_mapping *)-1; snippet = grn_snip_open(context, flags, width, max_results, default_open_tag, default_open_tag_length, default_close_tag, default_close_tag_length, mapping); rb_grn_context_check(context, rb_ary_new4(argc, argv)); rb_grn_object_assign(Qnil, self, rb_context, context, (grn_obj *)snippet); rb_grn_context_register_floating_object(DATA_PTR(self)); rb_iv_set(self, "@context", rb_context); return Qnil; }