From 3a3704b5778e52427c85d258c98bf650661b2f14 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 19 Feb 2014 07:36:51 -0500 Subject: [PATCH] feature(rest) add onFSPut --- lib/server/rest.js | 118 ++++++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 45 deletions(-) diff --git a/lib/server/rest.js b/lib/server/rest.js index 1e44f2d2..036f792b 100644 --- a/lib/server/rest.js +++ b/lib/server/rest.js @@ -158,51 +158,12 @@ break; case 'PUT': - if (lQuery === 'dir') - fse.mkdirs(p.name, function(pError) { - checkSendError(pError, params, function() { - sendMsg(params, 'make dir', p.name); - }); - }); - else if (lQuery === 'patch') - getBody(p.request, function(patch) { - fs.readFile(p.name, 'utf8', read.bind(null, p.name)); - - function read(name, error, data) { - checkSendError(error, p.params, function() { - var diffResult; - - ret = Util.tryCatchLog(function() { - diffResult = diff.applyPatch(data, patch); - }); - - if (diffResult && !ret) - fs.writeFile(name, diffResult, write.bind(null, name)); - else { - name = path.basename(name); - sendMsg(p.params, 'patch', name, 'fail'); - } - }); - } - - function write(name, error) { - checkSendError(error, params, function() { - name = path.basename(name); - sendMsg(params, 'patch', name); - }); - } - }); - else - pipe.create({ - read : p.request, - to : p.name, - callback : function(pError) { - checkSendError(pError, params, function() { - var lName = path.basename(p.name); - sendMsg(params, 'save', lName); - }); - } - }); + onFSPut(p.name, lQuery, p.request, function(error, msg) { + if (error) + sendError(params, error); + else + sendResponse(params, msg); + }); break; case 'DELETE': @@ -225,6 +186,73 @@ 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, assync = 0,