[Groonga-commit] nroonga/nroonga [master] wrap native binding with js

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 22日 (火) 15:52:34 JST


Yoji SHIDARA	2011-11-22 06:52:34 +0000 (Tue, 22 Nov 2011)

  New Revision: c362fca2f55cc9555827b1bcb78b2e41bf81c915

  Log:
    wrap native binding with js

  Added files:
    src/nroonga.coffee
  Modified files:
    .gitignore
    examples/prompt.coffee
    examples/server.coffee
    examples/test.js
    package.json
    src/nroonga.cc
    src/nroonga.h
    test/database.test.coffee
    wscript

  Modified: .gitignore (+2 -0)
===================================================================
--- .gitignore    2011-11-17 06:56:10 +0000 (3b6b668)
+++ .gitignore    2011-11-22 06:52:34 +0000 (76525a8)
@@ -1,3 +1,5 @@
 build
 .lock-wscript
 node_modules
+lib/nroonga_bindings.node
+lib/nroonga.js

  Modified: examples/prompt.coffee (+3 -4)
===================================================================
--- examples/prompt.coffee    2011-11-17 06:56:10 +0000 (bb9ca05)
+++ examples/prompt.coffee    2011-11-22 06:52:34 +0000 (8459511)
@@ -1,4 +1,4 @@
-Nroonga = require('../build/Release/nroonga.node')
+Nroonga = require('../lib/nroonga')
 readline = require('readline')
 
 db = if process.argv.length > 2
@@ -11,9 +11,8 @@ prefix = '> '
 rl.on 'line', (line) ->
   try
     data = db.commandSync line.trim()
-    if data.length > 0
-      result = JSON.parse(data)
-      console.log(result)
+    if data?
+      console.log(data)
   catch error
     console.log(error)
 

  Modified: examples/server.coffee (+2 -8)
===================================================================
--- examples/server.coffee    2011-11-17 06:56:10 +0000 (79e6c04)
+++ examples/server.coffee    2011-11-22 06:52:34 +0000 (ab52ac9)
@@ -1,5 +1,5 @@
 express = require('express')
-Nroonga = require('../build/Release/nroonga.node')
+Nroonga = require('../lib/nroonga')
 
 db = if process.argv.length > 2
   new Nroonga.Database(process.argv[2])
@@ -10,13 +10,7 @@ port = 3000
 
 app = express.createServer()
 app.get '/d/:command', (req, res) ->
-  args = [req.params.command]
-  for key, value of req.query
-    args.push("--#{key}")
-    args.push(value)
-
-  command = args.join(' ')
-  db.command command, (error, data) ->
+  db.command req.params.command, req.query, (error, data) ->
     if error?
       res.send(error.toString() + "\n", 400)
     else

  Modified: examples/test.js (+1 -3)
===================================================================
--- examples/test.js    2011-11-17 06:56:10 +0000 (4402a2e)
+++ examples/test.js    2011-11-22 06:52:34 +0000 (d1e545f)
@@ -1,9 +1,7 @@
-Nroonga = require('../build/Release/nroonga.node')
+Nroonga = require('../lib/nroonga')
 
 db = new Nroonga.Database()
 
 db.command('status', function(error, data) {
   console.log(data);
-  result = JSON.parse(data);
-  console.log(result);
 });

  Modified: package.json (+2 -1)
===================================================================
--- package.json    2011-11-17 06:56:10 +0000 (b01d07c)
+++ package.json    2011-11-22 06:52:34 +0000 (cd107e8)
@@ -10,5 +10,6 @@
   },
   "scripts": {
     "test": "expresso"
-  }
+  },
+  "main": "./lib/nroonga"
 }

  Modified: src/nroonga.cc (+5 -5)
===================================================================
--- src/nroonga.cc    2011-11-17 06:56:10 +0000 (ac8a6a1)
+++ src/nroonga.cc    2011-11-22 06:52:34 +0000 (799063d)
@@ -18,8 +18,8 @@ void Database::Initialize(Handle<Object> target) {
   t->InstanceTemplate()->SetInternalFieldCount(1);
   t->SetClassName(String::NewSymbol("Database"));
 
-  NODE_SET_PROTOTYPE_METHOD(t, "command", Database::Command);
-  NODE_SET_PROTOTYPE_METHOD(t, "commandSync", Database::CommandSync);
+  NODE_SET_PROTOTYPE_METHOD(t, "commandString", Database::CommandString);
+  NODE_SET_PROTOTYPE_METHOD(t, "commandSyncString", Database::CommandSyncString);
 
   target->Set(String::NewSymbol("Database"), t->GetFunction());
 }
@@ -104,7 +104,7 @@ void Database::CommandAfter(uv_work_t* req) {
   delete baton;
 }
 
-Handle<Value> Database::Command(const Arguments& args) {
+Handle<Value> Database::CommandString(const Arguments& args) {
   HandleScope scope;
   Database *db = ObjectWrap::Unwrap<Database>(args.Holder());
   if (args.Length() < 1 || !args[0]->IsString()) {
@@ -140,7 +140,7 @@ Handle<Value> Database::Command(const Arguments& args) {
   return Undefined();
 }
 
-Handle<Value> Database::CommandSync(const Arguments& args) {
+Handle<Value> Database::CommandSyncString(const Arguments& args) {
   HandleScope scope;
 
   Database *db = ObjectWrap::Unwrap<Database>(args.Holder());
@@ -179,4 +179,4 @@ void InitNroonga(Handle<Object> target) {
 
 } // namespace nroonga
 
-NODE_MODULE(nroonga, nroonga::InitNroonga);
+NODE_MODULE(nroonga_bindings, nroonga::InitNroonga);

  Added: src/nroonga.coffee (+29 -0) 100644
===================================================================
--- /dev/null
+++ src/nroonga.coffee    2011-11-22 06:52:34 +0000 (4a633ca)
@@ -0,0 +1,29 @@
+nroonga = module.exports = require('./nroonga_bindings.node')
+
+optionsToCommandString = (command, options) ->
+  args = [command]
+  if options?
+    for key, value of options
+      args.push '--' + key
+      args.push value
+  args.join(' ')
+
+nroonga.Database.prototype.commandSync = (command, options) ->
+  result = this.commandSyncString(optionsToCommandString(command, options))
+  if result.length > 0
+    JSON.parse(result)
+  else
+    undefined
+
+nroonga.Database.prototype.command = (command, options, callback) ->
+  if arguments.length == 2
+    callback = options
+    options = undefined
+
+  wrappedCallback = if callback?
+    (error, data) ->
+      callback(error, if data? then JSON.parse(data) else undefined)
+  else
+    undefined
+
+  this.commandString optionsToCommandString(command, options), wrappedCallback

  Modified: src/nroonga.h (+2 -2)
===================================================================
--- src/nroonga.h    2011-11-17 06:56:10 +0000 (59aeccf)
+++ src/nroonga.h    2011-11-22 06:52:34 +0000 (e68d461)
@@ -33,8 +33,8 @@ class Database : ObjectWrap {
 
   protected:
     static v8::Handle<v8::Value> New(const v8::Arguments& args);
-    static v8::Handle<v8::Value> Command(const v8::Arguments& args);
-    static v8::Handle<v8::Value> CommandSync(const v8::Arguments& args);
+    static v8::Handle<v8::Value> CommandString(const v8::Arguments& args);
+    static v8::Handle<v8::Value> CommandSyncString(const v8::Arguments& args);
     Database() : ObjectWrap() {
     }
     void CleanupDatabase() {

  Modified: test/database.test.coffee (+3 -3)
===================================================================
--- test/database.test.coffee    2011-11-17 06:56:10 +0000 (ef81aee)
+++ test/database.test.coffee    2011-11-22 06:52:34 +0000 (2efa7be)
@@ -1,16 +1,16 @@
-Nroonga = require('../build/Release/nroonga.node')
+Nroonga = require('../lib/nroonga')
 
 module.exports =
   'get groonga status by Database#commandSync': (beforeExit, assert) ->
     db = new Nroonga.Database()
-    status = JSON.parse(db.commandSync('status'))
+    status = db.commandSync('status')
     assert.isDefined status.version
 
   'get groonga status by Database#command': (beforeExit, assert) ->
     db = new Nroonga.Database()
     status = null
     db.command 'status', (error, data) ->
-      status = JSON.parse(data)
+      status = data
 
     beforeExit ->
       assert.isDefined status.version

  Modified: wscript (+16 -1)
===================================================================
--- wscript    2011-11-17 06:56:10 +0000 (17739b6)
+++ wscript    2011-11-22 06:52:34 +0000 (7dfad74)
@@ -1,3 +1,12 @@
+import os
+from os.path import exists
+from shutil import copy2 as copy
+
+TARGET = 'nroonga_bindings'
+TARGET_FILE = '%s.node' % TARGET
+built = 'build/Release/%s' % TARGET_FILE
+dest = 'lib/%s' % TARGET_FILE
+
 def set_options(opt):
   opt.tool_options("compiler_cxx")
 
@@ -9,6 +18,12 @@ def configure(conf):
 def build(bld):
   obj = bld.new_task_gen("cxx", "shlib", "node_addon")
   obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall"]
-  obj.target = "nroonga"
+  obj.target = "nroonga_bindings"
   obj.source = "src/nroonga.cc"
   obj.uselib = ["GROONGA"]
+
+  os.system('coffee -o lib/ -c src/')
+
+def shutdown():
+  if exists(built):
+    copy(built, dest)




Groonga-commit メーリングリストの案内
Back to archive index