[Groonga-commit] groonga/express-kotoumi [master] Define plugin commands as instance of model classes

Back to archive index

YUKI Hiroshi null+****@clear*****
Thu Feb 7 16:32:25 JST 2013


YUKI Hiroshi	2013-02-07 16:32:25 +0900 (Thu, 07 Feb 2013)

  New Revision: 1abd0bd3d0bcd81e6fcbd738d59fa83b54ab6f34
  https://github.com/groonga/express-kotoumi/commit/1abd0bd3d0bcd81e6fcbd738d59fa83b54ab6f34

  Log:
    Define plugin commands as instance of model classes

  Added files:
    lib/model.js
  Modified files:
    index.js
    lib/frontend/default-commands/rest.js
    lib/frontend/default-commands/socket.io.js
    lib/frontend/socket.io-adaptor.js

  Modified: index.js (+2 -0)
===================================================================
--- index.js    2013-02-07 11:36:46 +0900 (f915723)
+++ index.js    2013-02-07 16:32:25 +0900 (3f1cb3f)
@@ -30,3 +30,5 @@ express.application.kotoumi = function(params) {
   this.connection = connection;
   this.emitMessage = connection.emitMessage.bind(connection); // shorthand
 }
+
+exports.model = require('./lib/model');

  Modified: lib/frontend/default-commands/rest.js (+25 -24)
===================================================================
--- lib/frontend/default-commands/rest.js    2013-02-07 11:36:46 +0900 (7070c21)
+++ lib/frontend/default-commands/rest.js    2013-02-07 16:32:25 +0900 (09ba9ae)
@@ -1,42 +1,43 @@
+var model = require('../../model');
 var requestBuilders = require('./rest-request-builder');
 
 module.exports = {
-//  'status': {
+//  'status': new model.REST({
 //    path: '/status/:target',
-//    requestBuilder: requestBuilders.status
-//  },
-  'search': {
+//    toBackend: requestBuilders.status
+//  }),
+  'search': new model.REST({
     path: '/tables/:tableName',
-    requestBuilder: requestBuilders.search
-  } //,
-//  'createtable': {
+    toBackend: requestBuilders.search
+  }) //,
+//  'createtable': new model.REST({
 //    method: 'PUT',
 //    path: '/tables/:tableName',
-//    requestBuilder: requestBuilders.createTable
-//  },
-//  'removetable': {
+//    toBackend: requestBuilders.createTable
+//  }),
+//  'removetable': new model.REST({
 //    method: 'DELETE',
 //    path: '/tables/:tableName',
-//    requestBuilder: requestBuilders.removeTable
-//  },
-//  'createcolumn': {
+//    toBackend: requestBuilders.removeTable
+//  }),
+//  'createcolumn': new model.REST({
 //    method: 'PUT',
 //    path: '/tables/:tableName/columns/:columnName',
-//    requestBuilder: requestBuilders.createColumn
-//  },
-//  'removecolumn': {
+//    toBackend: requestBuilders.createColumn
+//  }),
+//  'removecolumn': new model.REST({
 //    method: 'DELETE',
 //    path: '/tables/:tableName/columns/:columnName',
-//    requestBuilder: requestBuilders.removeColumn
-//  },
-//  'loadrecord': {
+//    toBackend: requestBuilders.removeColumn
+//  }),
+//  'loadrecord': new model.REST({
 //    method: 'PUT',
 //    path: '/tables/:tableName/records/:key',
-//    requestBuilder: requestBuilders.loadRecord
-//  },
-//  'loadrecords': {
+//    toBackend: requestBuilders.loadRecord
+//  }),
+//  'loadrecords': new model.REST({
 //    method: 'PUT',
 //    path: '/tables/:tableName/records',
-//    requestBuilder: requestBuilders.loadRecords
-//  }
+//    toBackend: requestBuilders.loadRecords
+//  })
 };

  Modified: lib/frontend/default-commands/socket.io.js (+3 -1)
===================================================================
--- lib/frontend/default-commands/socket.io.js    2013-02-07 11:36:46 +0900 (cba20fb)
+++ lib/frontend/default-commands/socket.io.js    2013-02-07 16:32:25 +0900 (52b5fb4)
@@ -1,6 +1,8 @@
+var model = require('../../model');
+
 module.exports = {
 //  'status': {},
-  'search': {}//,
+  'search': new model.RequestResponse()//,
 //  'createtable': {},
 //  'removetable': {},
 //  'createcolumn': {},

  Modified: lib/frontend/socket.io-adaptor.js (+11 -9)
===================================================================
--- lib/frontend/socket.io-adaptor.js    2013-02-07 11:36:46 +0900 (3568411)
+++ lib/frontend/socket.io-adaptor.js    2013-02-07 16:32:25 +0900 (24c563f)
@@ -1,4 +1,5 @@
 var socketIo = require('socket.io');
+var model = require('../model');
 var defaultCommands = require('./default-commands/socket.io');
 
 function deepClone(base) {
@@ -29,11 +30,14 @@ exports.register = function(application, server, params) {
   if (!server)
     throw new Error('A server instance is required!');
 
-  function createRequestHandler(command, socket, requestBuilder) {
+  function createRequestHandler(commandName, socket) {
     return (function(data) {
-      if (requestBuilder)
-        data = requestBuilder(data);
-      connection.emitMessage(command, data);
+      var commandDefinition = unifiedCommandSet[commandName];
+
+      if (commandDefinition.requestBuilder)
+        data = commandDefinition.requestBuilder(data);
+
+      connection.emitMessage(commandName, data, callback, options);
     });
   }
 
@@ -72,7 +76,7 @@ exports.register = function(application, server, params) {
 
     Object.keys(commandSet).forEach(function(command) {
       var definition = commandSet[command];
-      if (!definition || definition.method) // ignore REST command
+      if (!model.isA(definition, model.SocketCommand))
         return;
       unifiedCommandSet[command] = definition;
     });
@@ -81,7 +85,7 @@ exports.register = function(application, server, params) {
   var registeredCommands = [];
   Object.keys(unifiedCommandSet).forEach(function(command) {
     var definition = unifiedCommandSet[command];
-    if (!definition || typeof definition != 'object') // ignore not a command definition
+    if (!model.isA(definition, model.SocketCommand))
       return;
     registeredCommands.push({ command:    command,
                               definition: definition });
@@ -94,9 +98,7 @@ exports.register = function(application, server, params) {
     var messageHandlers = [];
     registeredCommands.forEach(function(command) {
       socket.on(command.command,
-                createRequestHandler(command.command,
-                                     socket,
-                                     command.definition.requestBuilder));
+                createRequestHandler(command.command, socket));
     });
 
     var backendMessageHandler = createBackendMessageHandler(socket);

  Added: lib/model.js (+75 -0) 100644
===================================================================
--- /dev/null
+++ lib/model.js    2013-02-07 16:32:25 +0900 (052309b)
@@ -0,0 +1,75 @@
+function CommandModel(options) {
+  this._options = options || {};
+  this._modelTypes = [];
+}
+CommandModel.prototype = {
+  get toBackend() {
+    return this._options.toBackend;
+  },
+  get toClient() {
+    return this._options.toClient;
+  }
+};
+
+function isA(modelInstance, modelType) {
+  return (
+    modelInstance &&
+    modelInstance._modelTypes &&
+    modelInstance._modelTypes.indexOf(modelType) > -1
+  );
+}
+
+
+function RequestResponse(options) {
+  CommandModel.apply(this, arguments);
+  this._modelTypes.push(RequestResponse);
+}
+RequestResponse.prototype = new CommandModel();
+expors.RequestResponse = RequestResponse;
+
+
+function PublishSubscribe(options) {
+  CommandModel.apply(this, arguments);
+  this._modelTypes.push(PublishSubscribe);
+}
+PublishSubscribe.prototype = new CommandModel();
+expors.PublishSubscribe = PublishSubscribe;
+
+
+
+function REST(options) {
+  RequestResponse.apply(this, arguments);
+  this._modelTypes.push(REST);
+}
+REST.prototype = new RequestResponse();
+Object.defineProperty(REST.prototype, 'path', {
+  get: function() { return this._options.path; }
+});
+Object.defineProperty(REST.prototype, 'method', {
+  get: function() { return this._options.method || 'GET'; }
+});
+expors.REST = REST;
+
+
+
+function SocketCommand() {
+}
+expors.SocketCommand = SocketCommand;
+
+
+function SocketRequestResponse(options) {
+  RequestResponse.apply(this, arguments);
+  this._modelTypes.push(SocketCommand);
+  this._modelTypes.push(SocketRequestResponse);
+}
+SocketRequestResponse.prototype = new RequestResponse();
+expors.SocketRequestResponse = SocketRequestResponse;
+
+
+function SocketPublishSubscribe(options) {
+  PublishSubscribe.apply(this, arguments);
+  this._modelTypes.push(SocketCommand);
+  this._modelTypes.push(SocketPublishSubscribe);
+}
+SocketPublishSubscribe.prototype = new PublishSubscribe();
+expors.SocketPublishSubscribe = SocketPublishSubscribe;
-------------- next part --------------
HTML����������������������������...
Download 



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