var moment = require('moment'), path = require('path'), when = require('when'), baseStore; // TODO: would probably be better to put these on the prototype and have proper constructors etc baseStore = { 'getTargetDir': function (baseDir) { var m = moment(new Date().getTime()), month = m.format('MMM'), year = m.format('YYYY'); if (baseDir) { return path.join(baseDir, year, month); } return path.join(year, month); }, 'generateUnique': function (store, dir, name, ext, i, done) { var self = this, filename, append = ''; if (i) { append = '-' + i; } filename = path.join(dir, name + append + ext); store.exists(filename).then(function (exists) { if (exists) { setImmediate(function () { i = i + 1; self.generateUnique(store, dir, name, ext, i, done); }); } else { done.resolve(filename); } }); }, 'getUniqueFileName': function (store, image, targetDir) { var done = when.defer(), ext = path.extname(image.name), name = path.basename(image.name, ext).replace(/[\W]/gi, '-'); this.generateUnique(store, targetDir, name, ext, 0, done); return done.promise; } }; module.exports = baseStore;