From c8ccbaade9cc7ebb7d69c264678830481bfbe828 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 5 Mar 2014 07:15:02 -0500 Subject: [PATCH] refactor(rest) add get, put, delete --- lib/server/rest.js | 186 +---------------------------------- lib/server/rest/fs/delete.js | 60 +++++++++++ lib/server/rest/fs/get.js | 73 ++++++++++++++ lib/server/rest/fs/put.js | 83 ++++++++++++++++ 4 files changed, 221 insertions(+), 181 deletions(-) create mode 100644 lib/server/rest/fs/delete.js create mode 100644 lib/server/rest/fs/get.js create mode 100644 lib/server/rest/fs/put.js diff --git a/lib/server/rest.js b/lib/server/rest.js index 0a32805f..684d7b93 100644 --- a/lib/server/rest.js +++ b/lib/server/rest.js @@ -16,14 +16,15 @@ var main = global.cloudcmd.main, fs = main.fs, path = main.path, - Hash = main.hash, crypto = main.crypto, Util = main.util, pipe = main.pipe, CloudFunc = main.cloudfunc, - dir = main.dir, - diff = main.diff, - time = main.time, + + onFSGet = main.srvrequire('rest/fs/get').onGet, + onFSPut = main.srvrequire('rest/fs/put').onPut, + onDelete = main.srvrequire('rest/fs/delete').onDelete, + JSONDIR = main.JSONDIR, OK = 200, sendError = main.sendError, @@ -33,8 +34,6 @@ }), fse = main.require('fs-extra') || { - remove : fs.rmdir.bind(fs), - mkdirs : fs.mkdir.bind(fs), copy : function(from, to, callback) { pipe.create({ from : from, @@ -179,181 +178,6 @@ return ret; } - function onFSPut(name, query, readStream, callback) { - var func = Util.retExec(callback), - baseName = path.basename(name); - - switch(query) { - case 'dir': - fse.mkdirs(name, function(error) { - var msg; - - if (!error) - msg = CloudFunc.formatMsg('make dir', name); - - func(error, msg); - }); - break; - - default: - pipe.create({ - read : readStream, - to : name, - callback : function(error) { - var msg; - - if (!error) - msg = CloudFunc.formatMsg('save', baseName); - - func(error, msg); - } - }); - break; - - case 'patch': - getBody(readStream, function(patch) { - fs.readFile(name, 'utf8', read); - - function read(error, data) { - var diffResult; - - if (error) - func(error); - else { - error = Util.tryCatchLog(function() { - diffResult = diff.applyPatch(data, patch); - }); - - if (diffResult && !error) - fs.writeFile(name, diffResult, write); - else { - msg = CloudFunc.formatMsg('patch', baseName, 'fail'); - func(null, msg); - } - } - } - - function write(name, error) { - var msg; - - if (!error) - msg = CloudFunc.formatMsg('patch', baseName); - - func(error, msg); - } - }); - break; - } - } - - function onDelete(name, files, query, callback) { - var i, n, onStat, isDirFunc, - assync = 0, - rmFile = fs.unlink.bind(fs), - rmDir = fse.remove.bind(fse), - func = Util.retExec(callback); - - switch(query) { - default: - rmFile(name, func); - break; - - case 'dir': - rmDir(name, func); - break; - - case 'files': - n = files && files.length, - dir = name; - - onIsDir = function(name, error, isDir) { - var log = Util.log.bind(Util); - ++assync; - - if (error) - func(error); - else { - if (isDir) - rmDir(name, log); - else - rmFile(name, log); - - if (assync === n) - func(); - } - }; - - for (i = 0; i < n; i ++) { - name = dir + files[i]; - isDirFunc = Util.bind(onIsDir, name); - - dir.isDir(name, isDirFunc); - Util.log(name); - } - break; - } - } - - function onFSGet(query, name, callback) { - var error, hash, - func = Util.retExec(callback); - - switch (query) { - case 'size': - dir.getSize(name, function(error, size) { - if (!error) - size = CloudFunc.getShortSize(size); - - func(error, size); - }); - break; - - case 'time': - time.get(name, function(error, time) { - var timeStr; - - if (!error) - timeStr = time.toString(); - - func(error, timeStr); - }); - break; - - case 'hash': - hash = Hash.create(); - - if (!hash) { - error = 'not suported, try update node'; - error = CloudFunc.formatMsg('hash', error, 'error'); - func(error); - } else - pipe.create({ - from : name, - write : hash, - callback : function (error) { - var hex; - - if (!error) - hash = hash.get(); - - func(error, hash); - } - }); - break; - - default: - dir.isDir(name, function(error, isDir) { - var getDirContent = main.commander.getDirContent; - - if (isDir && !error) - getDirContent(name, func); - else - func(error, null, !isDir); - }); - break; - } - } - /** * process data on GET request * diff --git a/lib/server/rest/fs/delete.js b/lib/server/rest/fs/delete.js new file mode 100644 index 00000000..ae680ffb --- /dev/null +++ b/lib/server/rest/fs/delete.js @@ -0,0 +1,60 @@ +(function(){ + 'use strict'; + + var main = global.cloudcmd.main, + fs = require('fs'), + Util = main.util, + fse = main.require('fs-extra') || { + remove : fs.rmdir.bind(fs), + }; + + exports.onDelete = onDelete; + + function onDelete(name, files, query, callback) { + var i, n, onStat, isDirFunc, + assync = 0, + rmFile = fs.unlink.bind(fs), + rmDir = fse.remove.bind(fse), + func = Util.retExec(callback); + + switch(query) { + default: + rmFile(name, func); + break; + + case 'dir': + rmDir(name, func); + break; + + case 'files': + n = files && files.length, + dir = name; + + onIsDir = function(name, error, isDir) { + var log = Util.log.bind(Util); + ++assync; + + if (error) + func(error); + else { + if (isDir) + rmDir(name, log); + else + rmFile(name, log); + + if (assync === n) + func(); + } + }; + + for (i = 0; i < n; i ++) { + name = dir + files[i]; + isDirFunc = Util.bind(onIsDir, name); + + dir.isDir(name, isDirFunc); + Util.log(name); + } + break; + } + } +})(); diff --git a/lib/server/rest/fs/get.js b/lib/server/rest/fs/get.js new file mode 100644 index 00000000..889acd85 --- /dev/null +++ b/lib/server/rest/fs/get.js @@ -0,0 +1,73 @@ +(function() { + 'use strict'; + + var main = global.cloudcmd.main, + Hash = main.hash, + dir = main.dir, + time = main.time, + pipe = main.pipe, + CloudFunc = main.cloudfunc, + Util = main.util; + + exports.onGet = onGet; + + function onGet(query, name, callback) { + var error, hash, + func = Util.retExec(callback); + + switch (query) { + case 'size': + dir.getSize(name, function(error, size) { + if (!error) + size = CloudFunc.getShortSize(size); + + func(error, size); + }); + break; + + case 'time': + time.get(name, function(error, time) { + var timeStr; + + if (!error) + timeStr = time.toString(); + + func(error, timeStr); + }); + break; + + case 'hash': + hash = Hash.create(); + + if (!hash) { + error = 'not suported, try update node'; + error = CloudFunc.formatMsg('hash', error, 'error'); + func(error); + } else + pipe.create({ + from : name, + write : hash, + callback : function (error) { + var hex; + + if (!error) + hash = hash.get(); + + func(error, hash); + } + }); + break; + + default: + dir.isDir(name, function(error, isDir) { + var getDirContent = main.commander.getDirContent; + + if (isDir && !error) + getDirContent(name, func); + else + func(error, null, !isDir); + }); + break; + } + } +})(); diff --git a/lib/server/rest/fs/put.js b/lib/server/rest/fs/put.js new file mode 100644 index 00000000..8485a04b --- /dev/null +++ b/lib/server/rest/fs/put.js @@ -0,0 +1,83 @@ +(function(){ + 'use strict'; + + var main = global.cloudcmd.main, + Util = main.util, + pipe = main.pipe, + path = require('path'), + fs = require('fs'), + diff = main.diff, + CloudFunc = main.cloudfunc, + fse = main.require('fs-extra') || { + mkdirs : fs.mkdir.bind(fs), + }; + + exports.onPut = onPut; + + function onPut(name, query, readStream, callback) { + var func = Util.retExec(callback), + baseName = path.basename(name); + + switch(query) { + case 'dir': + fse.mkdirs(name, function(error) { + var msg; + + if (!error) + msg = CloudFunc.formatMsg('make dir', name); + + func(error, msg); + }); + break; + + default: + pipe.create({ + read : readStream, + to : name, + callback : function(error) { + var msg; + + if (!error) + msg = CloudFunc.formatMsg('save', baseName); + + func(error, msg); + } + }); + break; + + case 'patch': + getBody(readStream, function(patch) { + fs.readFile(name, 'utf8', read); + + function read(error, data) { + var diffResult; + + if (error) + func(error); + else { + error = Util.tryCatchLog(function() { + diffResult = diff.applyPatch(data, patch); + }); + + if (diffResult && !error) + fs.writeFile(name, diffResult, write); + else { + msg = CloudFunc.formatMsg('patch', baseName, 'fail'); + func(null, msg); + } + } + } + + function write(name, error) { + var msg; + + if (!error) + msg = CloudFunc.formatMsg('patch', baseName); + + func(error, msg); + } + }); + break; + } + } +})();