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)