Skip to content

Commit 4921df3

Browse files
committed
add deleteDir API and tests
1 parent 4153a79 commit 4921df3

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

lib/workspace.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var fs = require('fs');
44
var path = require('path');
55

6+
var del = require('del');
67
var mkdirp = require('mkdirp');
78
var Immstruct = require('immstruct').Immstruct;
89

@@ -186,4 +187,28 @@ Workspace.prototype.changeDir = function changeDir(dirpath, cb){
186187
});
187188
};
188189

190+
Workspace.prototype.deleteDir = function deleteDir(dirpath, cb){
191+
if(typeof dirpath.deref === 'function'){
192+
dirpath = dirpath.deref();
193+
}
194+
195+
var projects = this.projects;
196+
// TODO: support more than root resolution
197+
var resolvedDir = path.resolve(root, dirpath);
198+
199+
del(resolvedDir, function(err){
200+
if(err){
201+
return cb(err);
202+
}
203+
204+
projects.update(function(list){
205+
return list.filter(function(project){
206+
return project !== dirpath;
207+
});
208+
});
209+
210+
cb();
211+
});
212+
};
213+
189214
module.exports = Workspace;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"lab": "^5.4.0"
2727
},
2828
"dependencies": {
29+
"del": "^1.1.1",
2930
"immstruct": "^1.4.0",
3031
"mkdirp": "^0.5.0"
3132
}

test/workspace.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,46 @@ lab.experiment('Workspace', function(){
223223
});
224224
});
225225
});
226+
227+
lab.experiment('#deleteDir', function(){
228+
229+
var dirname = '.tmpDir';
230+
231+
lab.beforeEach(function(done){
232+
space.changeDir(dirname, done);
233+
});
234+
235+
lab.test('deletes directory & removes from project structure', function(done){
236+
237+
code.expect(space.projects.contains(dirname)).to.equal(true);
238+
239+
space.deleteDir(dirname, function(err){
240+
code.expect(err).to.not.exist();
241+
242+
var exists = fs.existsSync(dirname);
243+
244+
code.expect(exists).to.equal(false);
245+
code.expect(space.projects.contains(dirname)).to.equal(false);
246+
done(err);
247+
});
248+
});
249+
250+
lab.test('accepts a cursor for path', function(done){
251+
space.cwd.update(function(){
252+
return dirname;
253+
});
254+
255+
code.expect(space.projects.contains(dirname)).to.equal(true);
256+
257+
space.deleteDir(space.cwd, function(err){
258+
code.expect(err).to.not.exist();
259+
260+
var exists = fs.existsSync(dirname);
261+
262+
code.expect(exists).to.equal(false);
263+
code.expect(space.projects.contains(dirname)).to.equal(false);
264+
done(err);
265+
});
266+
});
267+
});
226268
});

0 commit comments

Comments
 (0)