Deprecate getAllFlows/getFlow/saveFlow storage functions

They were specialised versions of get/saveLibraryEntry that
complicated the interface.

This change removes them from localfilesystem, but the top
level module checks for their existence and uses them if
they are there - for backwards compatibility.
This commit is contained in:
Nick O'Leary
2015-04-03 23:05:56 +01:00
parent e543cc0fed
commit b96ea36b70
4 changed files with 181 additions and 132 deletions

View File

@@ -92,21 +92,7 @@ var storageModuleInterface = {
},
/* Library Functions */
getAllFlows: function() {
return storageModule.getAllFlows();
},
getFlow: function(fn) {
if (is_malicious(fn)) {
return when.reject(new Error('forbidden flow name'));
}
return storageModule.getFlow(fn);
},
saveFlow: function(fn, data) {
if (is_malicious(fn)) {
return when.reject(new Error('forbidden flow name'));
}
return storageModule.saveFlow(fn, data);
},
getLibraryEntry: function(type, path) {
if (is_malicious(path)) {
return when.reject(new Error('forbidden flow name'));
@@ -118,7 +104,78 @@ var storageModuleInterface = {
return when.reject(new Error('forbidden flow name'));
}
return storageModule.saveLibraryEntry(type, path, meta, body);
},
/* Deprecated functions */
getAllFlows: function() {
if (storageModule.hasOwnProperty("getAllFlows")) {
return storageModule.getAllFlows();
} else {
return listFlows("/");
}
},
getFlow: function(fn) {
if (is_malicious(fn)) {
return when.reject(new Error('forbidden flow name'));
}
if (storageModule.hasOwnProperty("getFlow")) {
return storageModule.getFlow(fn);
} else {
return storageModule.getLibraryEntry("flows",fn);
}
},
saveFlow: function(fn, data) {
if (is_malicious(fn)) {
return when.reject(new Error('forbidden flow name'));
}
if (storageModule.hasOwnProperty("saveFlow")) {
return storageModule.saveFlow(fn, data);
} else {
return storageModule.saveLibraryEntry("flows",fn,{},data);
}
}
/* End deprecated functions */
}
function listFlows(path) {
return storageModule.getLibraryEntry("flows",path).then(function(res) {
return when.promise(function(resolve) {
var promises = [];
res.forEach(function(r) {
if (typeof r === "string") {
promises.push(listFlows(path+r));
} else {
promises.push(when.resolve(r));
}
});
var i=0;
when.settle(promises).then(function(res2) {
var result = {};
res2.forEach(function(r) {
// TODO: name||fn
if (r.value.fn) {
var name = r.value.name;
if (!name) {
name = r.value.fn.split(".")[0];
}
result.f = result.f || [];
result.f.push(name);
} else {
result.d = result.d || {};
result.d[res[i]] = r.value;
//console.log(">",r.value);
}
i++;
});
resolve(result);
});
});
});
}
module.exports = storageModuleInterface;

View File

@@ -37,27 +37,6 @@ var libDir;
var libFlowsDir;
var globalSettingsFile;
function listFiles(dir) {
var dirs = {};
var files = [];
var dirCount = 0;
return nodeFn.call(fs.readdir, dir).then(function (contents) {
contents.sort().forEach(function(fn) {
var stats = fs.lstatSync(dir+"/"+fn);
if (stats.isDirectory()) {
dirCount += 1;
dirs[fn] = listFiles(dir+"/"+fn)
} else {
files.push(fn.split(".")[0]);
}
})
var result = {};
if (dirCount > 0) { result.d = keys.all(dirs); }
if (files.length > 0) { result.f = when.resolve(files); }
return keys.all(result);
})
}
function getFileMeta(root,path) {
var fn = fspath.join(root,path);
var fd = fs.openSync(fn,"r");
@@ -312,30 +291,6 @@ var localfilesystem = {
return writeFile(sessionsFile,JSON.stringify(sessions));
},
getAllFlows: function() {
return listFiles(libFlowsDir);
},
getFlow: function(fn) {
var defer = when.defer();
var file = fspath.join(libFlowsDir,fn+".json");
fs.exists(file, function(exists) {
if (exists) {
defer.resolve(nodeFn.call(fs.readFile,file,'utf8'));
} else {
defer.reject();
}
});
return defer.promise;
},
saveFlow: function(fn,data) {
var file = fspath.join(libFlowsDir,fn+".json");
return promiseDir(fspath.dirname(file)).then(function () {
return writeFile(file,data);
});
},
getLibraryEntry: function(type,path) {
var root = fspath.join(libDir,type);
var rootPath = fspath.join(libDir,type,path);
@@ -366,6 +321,15 @@ var localfilesystem = {
});
return dirs.concat(files);
});
}).otherwise(function(err) {
if (type === "flows" && !/\.json$/.test(path)) {
return localfilesystem.getLibraryEntry(type,path+".json")
.otherwise(function(e) {
throw err;
});
} else {
throw err;
}
});
});
},