diff --git a/src/backups.js b/src/backups.js index 3a51e7492..c4cf2d5ff 100644 --- a/src/backups.js +++ b/src/backups.js @@ -43,6 +43,7 @@ var addons = require('./addons.js'), crypto = require('crypto'), database = require('./database.js'), DatabaseError = require('./databaseerror.js'), + DataLayout = require('./datalayout.js'), debug = require('debug')('box:backups'), eventlog = require('./eventlog.js'), fs = require('fs'), @@ -112,55 +113,6 @@ function api(provider) { } } -class DataLayout { - constructor(localRoot, dirMap) { - assert.strictEqual(typeof localRoot, 'string'); - assert(Array.isArray(dirMap), 'Expecting layout to be an array'); - - this._localRoot = localRoot; - this._dirMap = dirMap; - this._remoteRegexps = dirMap.map((l) => new RegExp('^\\./' + l.remoteDir + '/?')); - this._localRegexps = dirMap.map((l) => new RegExp('^' + l.localDir + '/?')); - } - toLocalPath(remoteName) { - assert.strictEqual(typeof remoteName, 'string'); - - for (let i = 0; i < this._remoteRegexps.length; i++) { - if (!remoteName.match(this._remoteRegexps[i])) continue; - return remoteName.replace(this._remoteRegexps[i], this._dirMap[i].localDir + '/'); // make paths absolute - } - return remoteName.replace(new RegExp('^\\.'), this._localRoot); - } - toRemotePath(localName) { - assert.strictEqual(typeof localName, 'string'); - - for (let i = 0; i < this._localRegexps.length; i++) { - if (!localName.match(this._localRegexps[i])) continue; - return localName.replace(this._localRegexps[i], './' + this._dirMap[i].remoteDir + '/'); // make paths relative - } - return localName.replace(new RegExp('^' + this._localRoot + '/?'), './'); - } - localRoot() { - return this._localRoot; - } - getBasename() { // used to generate cache file names - return path.basename(this._localRoot); - } - toString() { - return JSON.stringify({ localRoot: this._localRoot, layout: this._dirMap }); - } - localPaths() { - return [ this._localRoot ].concat(this._dirMap.map((l) => l.localDir)); - } - directoryMap() { - return this._dirMap; - } - static fromString(str) { - const obj = JSON.parse(str); - return new DataLayout(obj.localRoot, obj.layout); - } -} - function testConfig(backupConfig, callback) { assert.strictEqual(typeof backupConfig, 'object'); assert.strictEqual(typeof callback, 'function'); diff --git a/src/datalayout.js b/src/datalayout.js new file mode 100644 index 000000000..fb8305fa3 --- /dev/null +++ b/src/datalayout.js @@ -0,0 +1,55 @@ +'use strict'; + +let assert = require('assert'), + path = require('path'); + +class DataLayout { + constructor(localRoot, dirMap) { + assert.strictEqual(typeof localRoot, 'string'); + assert(Array.isArray(dirMap), 'Expecting layout to be an array'); + + this._localRoot = localRoot; + this._dirMap = dirMap; + this._remoteRegexps = dirMap.map((l) => new RegExp('^\\./' + l.remoteDir + '/?')); + this._localRegexps = dirMap.map((l) => new RegExp('^' + l.localDir + '/?')); + } + toLocalPath(remoteName) { + assert.strictEqual(typeof remoteName, 'string'); + + for (let i = 0; i < this._remoteRegexps.length; i++) { + if (!remoteName.match(this._remoteRegexps[i])) continue; + return remoteName.replace(this._remoteRegexps[i], this._dirMap[i].localDir + '/'); // make paths absolute + } + return remoteName.replace(new RegExp('^\\.'), this._localRoot); + } + toRemotePath(localName) { + assert.strictEqual(typeof localName, 'string'); + + for (let i = 0; i < this._localRegexps.length; i++) { + if (!localName.match(this._localRegexps[i])) continue; + return localName.replace(this._localRegexps[i], './' + this._dirMap[i].remoteDir + '/'); // make paths relative + } + return localName.replace(new RegExp('^' + this._localRoot + '/?'), './'); + } + localRoot() { + return this._localRoot; + } + getBasename() { // used to generate cache file names + return path.basename(this._localRoot); + } + toString() { + return JSON.stringify({ localRoot: this._localRoot, layout: this._dirMap }); + } + localPaths() { + return [ this._localRoot ].concat(this._dirMap.map((l) => l.localDir)); + } + directoryMap() { + return this._dirMap; + } + static fromString(str) { + const obj = JSON.parse(str); + return new DataLayout(obj.localRoot, obj.layout); + } +} + +exports = module.exports = DataLayout; diff --git a/src/syncer.js b/src/syncer.js index 52bc890ee..65388b284 100644 --- a/src/syncer.js +++ b/src/syncer.js @@ -2,6 +2,7 @@ var assert = require('assert'), async = require('async'), + DataLayout = require('./datalayout.js'), debug = require('debug')('box:syncer'), fs = require('fs'), path = require('path'), @@ -62,7 +63,7 @@ function ISFILE(x) { } function sync(dataLayout, taskProcessor, concurrency, callback) { - assert.strictEqual(typeof dataLayout, 'object'); // is a DataLayout + assert(dataLayout instanceof DataLayout, 'Expecting dataLayout to be a DataLayout'); assert.strictEqual(typeof taskProcessor, 'function'); assert.strictEqual(typeof concurrency, 'number'); assert.strictEqual(typeof callback, 'function');