deep-package-manager
Version:
DEEP Package Manager
172 lines (137 loc) • 3.32 kB
JavaScript
/**
* Created by AlexanderC on 1/27/16.
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MigrationsRegistry = undefined;
var _deepCore = require('deep-core');
var _deepCore2 = _interopRequireDefault(_deepCore);
var _deepFs = require('deep-fs');
var _deepFs2 = _interopRequireDefault(_deepFs);
var _S3Service = require('../Provisioning/Service/S3Service');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class MigrationsRegistry {
/**
* @param {FS.RegistryInstance|*} registry
*/
constructor(registry) {
this._registry = registry;
this._migrations = [];
}
/**
* @param {Property|*} property
* @returns {MigrationsRegistry}
*/
static create(property) {
return new MigrationsRegistry(MigrationsRegistry._createRegistry(property));
}
/**
* @param {String} version
* @param {Function} onMissingDb
* @returns {Boolean}
*/
ensure(version, onMissingDb) {
if (!this.has(version)) {
this.register(version);
onMissingDb();
return true;
}
return false;
}
/**
* @param {String} version
* @returns {MigrationsRegistry}
*/
remove(version) {
if (this.has(version)) {
let i = this._migrations.indexOf(version);
this._migrations.splice(i, 1);
}
return this;
}
/**
* @param {String} version
* @returns {Boolean}
*/
has(version) {
return this._migrations.indexOf(version) !== -1;
}
/**
* @param {String} version
* @returns {MigrationsRegistry}
*/
register(version) {
this._migrations.push(version);
return this;
}
/**
* @returns {String[]}
*/
get migrations() {
return this._migrations;
}
/**
* @param {String[]} migrations
*/
set migrations(migrations) {
this._migrations = migrations;
}
/**
* @param {Function} cb
* @returns {MigrationsRegistry}
*/
load(cb) {
this._registry.exists(MigrationsRegistry.REGISTRY_KEY, (error, exists) => {
if (error) {
cb(error);
return;
}
if (exists) {
this._registry.read(MigrationsRegistry.REGISTRY_KEY, (error, migrations) => {
if (error) {
cb(error);
return;
}
this._migrations = migrations;
cb(null);
});
return;
}
cb(null);
});
return this;
}
/**
* @param {Function} cb
* @returns {MigrationsRegistry}
*/
dump(cb) {
this._registry.write(MigrationsRegistry.REGISTRY_KEY, this._migrations, cb);
return this;
}
/**
* @param {Property|*} property
* @returns {FS.RegistryInstance}
* @private
*/
static _createRegistry(property) {
return new _deepFs2.default.RegistryInstance(property.provisioning.s3, MigrationsRegistry._getSystemBucket(property));
}
/**
* @param {Property|*} property
* @returns {String}
* @private
*/
static _getSystemBucket(property) {
return property.config.provisioning[_deepCore2.default.AWS.Service.SIMPLE_STORAGE_SERVICE].buckets[_S3Service.S3Service.PRIVATE_BUCKET].name;
}
/**
* @returns {String}
*/
static get REGISTRY_KEY() {
return '__migrations__';
}
}
exports.MigrationsRegistry = MigrationsRegistry;