[Groonga-commit] groonga/groonga at 5c280d9 [master] plugin ruby: share common code

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Oct 8 23:54:15 JST 2013


Kouhei Sutou	2013-10-08 23:54:15 +0900 (Tue, 08 Oct 2013)

  New Revision: 5c280d9b9e5b814743b8b0b39d4468469568f9af
  https://github.com/groonga/groonga/commit/5c280d9b9e5b814743b8b0b39d4468469568f9af

  Message:
    plugin ruby: share common code

  Added files:
    test/command/suite/ruby/eval/exception.expected
    test/command/suite/ruby/eval/exception.test
  Copied files:
    plugins/ruby/ruby_plugin.h
      (from plugins/ruby/load.c)
  Modified files:
    plugins/ruby/eval.c
    plugins/ruby/eval_sources.am
    plugins/ruby/load.c
    plugins/ruby/load_sources.am

  Modified: plugins/ruby/eval.c (+1 -47)
===================================================================
--- plugins/ruby/eval.c    2013-10-08 23:49:56 +0900 (9fc7947)
+++ plugins/ruby/eval.c    2013-10-08 23:54:15 +0900 (0cbcd1e)
@@ -16,31 +16,7 @@
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include <mrb.h>
-#include <output.h>
-#include <db.h>
-#include <util.h>
-
-#include <groonga/plugin.h>
-
-#define VAR GRN_PROC_GET_VAR_BY_OFFSET
-
-static void
-output_result(grn_ctx *ctx, mrb_value result)
-{
-  grn_obj grn_result;
-
-  GRN_OUTPUT_MAP_OPEN("result", 1);
-  GRN_OUTPUT_CSTR("value");
-  GRN_VOID_INIT(&grn_result);
-  if (grn_mrb_to_grn(ctx, result, &grn_result) == GRN_SUCCESS) {
-    GRN_OUTPUT_OBJ(&grn_result, NULL);
-  } else {
-    GRN_OUTPUT_CSTR("unsupported return value");
-  }
-  grn_obj_unlink(ctx, &grn_result);
-  GRN_OUTPUT_MAP_CLOSE();
-}
+#include "ruby_plugin.h"
 
 static grn_obj *
 command_ruby_eval(grn_ctx *ctx, int nargs, grn_obj **args,
@@ -75,22 +51,6 @@ command_ruby_eval(grn_ctx *ctx, int nargs, grn_obj **args,
 }
 
 grn_rc
-GRN_PLUGIN_INIT(grn_ctx *ctx)
-{
-  return GRN_SUCCESS;
-}
-
-#define DEF_VAR(v,x) do {\
-  (v).name = (x);\
-  (v).name_size = (x) ? sizeof(x) - 1 : 0;\
-  GRN_TEXT_INIT(&(v).value, 0);\
-} while (0)
-
-#define DEF_COMMAND(name, func, nvars, vars)\
-  (grn_proc_create(ctx, (name), (sizeof(name) - 1),\
-                   GRN_PROC_COMMAND, (func), NULL, NULL, (nvars), (vars)))
-
-grn_rc
 GRN_PLUGIN_REGISTER(grn_ctx *ctx)
 {
   grn_expr_var vars[1];
@@ -100,9 +60,3 @@ GRN_PLUGIN_REGISTER(grn_ctx *ctx)
 
   return ctx->rc;
 }
-
-grn_rc
-GRN_PLUGIN_FIN(grn_ctx *ctx)
-{
-  return GRN_SUCCESS;
-}

  Modified: plugins/ruby/eval_sources.am (+1 -0)
===================================================================
--- plugins/ruby/eval_sources.am    2013-10-08 23:49:56 +0900 (4a32de3)
+++ plugins/ruby/eval_sources.am    2013-10-08 23:54:15 +0900 (08543e4)
@@ -1,2 +1,3 @@
 eval_la_SOURCES =				\
+	ruby_plugin.h				\
 	eval.c

  Modified: plugins/ruby/load.c (+1 -68)
===================================================================
--- plugins/ruby/load.c    2013-10-08 23:49:56 +0900 (c043505)
+++ plugins/ruby/load.c    2013-10-08 23:54:15 +0900 (cf2bb52)
@@ -16,52 +16,7 @@
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include <mrb.h>
-#include <output.h>
-#include <db.h>
-#include <ctx_impl.h>
-#include <util.h>
-
-#include <groonga/plugin.h>
-
-#include <mruby.h>
-
-#define VAR GRN_PROC_GET_VAR_BY_OFFSET
-
-static void
-output_result(grn_ctx *ctx, mrb_value result)
-{
-  mrb_state *mrb = ctx->impl->mrb.state;
-
-  GRN_OUTPUT_MAP_OPEN("result", 1);
-  if (mrb->exc) {
-    mrb_value mrb_message;
-    grn_obj grn_message;
-    GRN_OUTPUT_CSTR("exception");
-    GRN_OUTPUT_MAP_OPEN("exception", 1);
-    GRN_OUTPUT_CSTR("message");
-    mrb_message = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "message", 0);
-    GRN_VOID_INIT(&grn_message);
-    if (grn_mrb_to_grn(ctx, mrb_message, &grn_message) == GRN_SUCCESS) {
-      GRN_OUTPUT_OBJ(&grn_message, NULL);
-    } else {
-      GRN_OUTPUT_CSTR("unsupported message type");
-    }
-    grn_obj_unlink(ctx, &grn_message);
-    GRN_OUTPUT_MAP_CLOSE();
-  } else {
-    grn_obj grn_result;
-    GRN_OUTPUT_CSTR("value");
-    GRN_VOID_INIT(&grn_result);
-    if (grn_mrb_to_grn(ctx, result, &grn_result) == GRN_SUCCESS) {
-      GRN_OUTPUT_OBJ(&grn_result, NULL);
-    } else {
-      GRN_OUTPUT_CSTR("unsupported return value");
-    }
-    grn_obj_unlink(ctx, &grn_result);
-  }
-  GRN_OUTPUT_MAP_CLOSE();
-}
+#include "ruby_plugin.h"
 
 static grn_obj *
 command_ruby_load(grn_ctx *ctx, int nargs, grn_obj **args,
@@ -97,22 +52,6 @@ command_ruby_load(grn_ctx *ctx, int nargs, grn_obj **args,
 }
 
 grn_rc
-GRN_PLUGIN_INIT(grn_ctx *ctx)
-{
-  return GRN_SUCCESS;
-}
-
-#define DEF_VAR(v,x) do {\
-  (v).name = (x);\
-  (v).name_size = (x) ? sizeof(x) - 1 : 0;\
-  GRN_TEXT_INIT(&(v).value, 0);\
-} while (0)
-
-#define DEF_COMMAND(name, func, nvars, vars)\
-  (grn_proc_create(ctx, (name), (sizeof(name) - 1),\
-                   GRN_PROC_COMMAND, (func), NULL, NULL, (nvars), (vars)))
-
-grn_rc
 GRN_PLUGIN_REGISTER(grn_ctx *ctx)
 {
   grn_expr_var vars[1];
@@ -122,9 +61,3 @@ GRN_PLUGIN_REGISTER(grn_ctx *ctx)
 
   return ctx->rc;
 }
-
-grn_rc
-GRN_PLUGIN_FIN(grn_ctx *ctx)
-{
-  return GRN_SUCCESS;
-}

  Modified: plugins/ruby/load_sources.am (+1 -0)
===================================================================
--- plugins/ruby/load_sources.am    2013-10-08 23:49:56 +0900 (2484dcc)
+++ plugins/ruby/load_sources.am    2013-10-08 23:54:15 +0900 (d1cce25)
@@ -1,2 +1,3 @@
 load_la_SOURCES =				\
+	ruby_plugin.h				\
 	load.c

  Copied: plugins/ruby/ruby_plugin.h (+0 -44) 71%
===================================================================
--- plugins/ruby/load.c    2013-10-08 23:49:56 +0900 (c043505)
+++ plugins/ruby/ruby_plugin.h    2013-10-08 23:54:15 +0900 (c08702b)
@@ -63,39 +63,6 @@ output_result(grn_ctx *ctx, mrb_value result)
   GRN_OUTPUT_MAP_CLOSE();
 }
 
-static grn_obj *
-command_ruby_load(grn_ctx *ctx, int nargs, grn_obj **args,
-                  grn_user_data *user_data)
-{
-  grn_obj *path;
-  mrb_value result;
-
-  path = VAR(0);
-  switch (path->header.domain) {
-  case GRN_DB_SHORT_TEXT :
-  case GRN_DB_TEXT :
-  case GRN_DB_LONG_TEXT :
-    break;
-  default :
-    {
-      grn_obj inspected;
-      GRN_TEXT_INIT(&inspected, 0);
-      grn_inspect(ctx, &inspected, path);
-      ERR(GRN_INVALID_ARGUMENT, "path must be a string: <%.*s>",
-          (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
-      GRN_OBJ_FIN(ctx, &inspected);
-      return NULL;
-    }
-    break;
-  }
-
-  GRN_TEXT_PUTC(ctx, path, '\0');
-  result = grn_mrb_load(ctx, GRN_TEXT_VALUE(path));
-  output_result(ctx, result);
-
-  return NULL;
-}
-
 grn_rc
 GRN_PLUGIN_INIT(grn_ctx *ctx)
 {
@@ -113,17 +80,6 @@ GRN_PLUGIN_INIT(grn_ctx *ctx)
                    GRN_PROC_COMMAND, (func), NULL, NULL, (nvars), (vars)))
 
 grn_rc
-GRN_PLUGIN_REGISTER(grn_ctx *ctx)
-{
-  grn_expr_var vars[1];
-
-  DEF_VAR(vars[0], "path");
-  DEF_COMMAND("ruby_load", command_ruby_load, 1, vars);
-
-  return ctx->rc;
-}
-
-grn_rc
 GRN_PLUGIN_FIN(grn_ctx *ctx)
 {
   return GRN_SUCCESS;

  Added: test/command/suite/ruby/eval/exception.expected (+4 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/ruby/eval/exception.expected    2013-10-08 23:54:15 +0900 (bcd7b70)
@@ -0,0 +1,4 @@
+register ruby/eval
+[[0,0.0,0.0],true]
+ruby_eval "raise 'Error'"
+[[0,0.0,0.0],{"exception":{"message":"Error"}}]

  Added: test/command/suite/ruby/eval/exception.test (+5 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/ruby/eval/exception.test    2013-10-08 23:54:15 +0900 (6793a20)
@@ -0,0 +1,5 @@
+#@on-error omit
+register ruby/eval
+#@on-error default
+
+ruby_eval "raise 'Error'"
-------------- next part --------------
HTML����������������������������...
Download 



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