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