Kouhei Sutou
null+****@clear*****
Wed Dec 4 00:22:34 JST 2013
Kouhei Sutou 2013-12-04 00:22:34 +0900 (Wed, 04 Dec 2013) New Revision: 2ca0d94d28b9f70674d04ee513adad0afe6495b4 https://github.com/groonga/groonga/commit/2ca0d94d28b9f70674d04ee513adad0afe6495b4 Message: mrb: define Groonga::Context#[] Added files: test/command/suite/ruby/eval/context/array_reference/fixed_size_column.expected test/command/suite/ruby/eval/context/array_reference/fixed_size_column.test Modified files: lib/mrb/mrb_ctx.c Modified: lib/mrb/mrb_ctx.c (+33 -0) =================================================================== --- lib/mrb/mrb_ctx.c 2013-12-04 00:22:02 +0900 (8807352) +++ lib/mrb/mrb_ctx.c 2013-12-04 00:22:34 +0900 (88528b5) @@ -21,8 +21,36 @@ #ifdef GRN_WITH_MRUBY #include <mruby.h> #include <mruby/class.h> +#include <mruby/data.h> #include "mrb_ctx.h" +#include "mrb_converter.h" + +static mrb_value +ctx_class_instance(mrb_state *mrb, mrb_value klass) +{ + grn_ctx *ctx = (grn_ctx *)mrb->ud; + mrb_value mrb_ctx; + + mrb_ctx = mrb_obj_value(mrb_obj_alloc(mrb, MRB_TT_DATA, mrb_class_ptr(klass))); + DATA_PTR(mrb_ctx) = ctx; + + return mrb_ctx; +} + +static mrb_value +ctx_array_reference(mrb_state *mrb, mrb_value self) +{ + grn_ctx *ctx = (grn_ctx *)mrb->ud; + grn_obj *object; + char *name; + int name_length; + + mrb_get_args(mrb, "s", &name, &name_length); + object = grn_ctx_get(ctx, name, name_length); + + return grn_mrb_value_from_grn_obj(mrb, object); +} void grn_mrb_ctx_init(grn_ctx *ctx) @@ -34,5 +62,10 @@ grn_mrb_ctx_init(grn_ctx *ctx) klass = mrb_define_class_under(mrb, module, "Context", mrb->object_class); MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA); + + mrb_define_class_method(mrb, klass, "instance", + ctx_class_instance, MRB_ARGS_NONE()); + + mrb_define_method(mrb, klass, "[]", ctx_array_reference, MRB_ARGS_REQ(1)); } #endif Added: test/command/suite/ruby/eval/context/array_reference/fixed_size_column.expected (+8 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/context/array_reference/fixed_size_column.expected 2013-12-04 00:22:34 +0900 (1705f6a) @@ -0,0 +1,8 @@ +register ruby/eval +[[0,0.0,0.0],true] +table_create Users TABLE_NO_KEY +[[0,0.0,0.0],true] +column_create Users age COLUMN_SCALAR UInt8 +[[0,0.0,0.0],true] +ruby_eval "Groonga::Context.instance['Users.age'].name" +[[0,0.0,0.0],{"value":"Users.age"}] Added: test/command/suite/ruby/eval/context/array_reference/fixed_size_column.test (+8 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/ruby/eval/context/array_reference/fixed_size_column.test 2013-12-04 00:22:34 +0900 (a629e9c) @@ -0,0 +1,8 @@ +#@on-error omit +register ruby/eval +#@on-error default + +table_create Users TABLE_NO_KEY +column_create Users age COLUMN_SCALAR UInt8 + +ruby_eval "Groonga::Context.instance['Users.age'].name" -------------- next part -------------- HTML����������������������������... 下載