[Groonga-commit] groonga/groonga at 2ca0d94 [master] mrb: define Groonga::Context#[]

Back to archive index

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����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index