cnpmjs.org
Version:
Private npm registry and web for Enterprise, base on MySQL and Simple Store Service
160 lines (137 loc) • 2.94 kB
JavaScript
/**!
* cnpmjs.org - models/_module_maintainer_class_methods.js
*
* Copyright(c) fengmk2 and other contributors.
* MIT Licensed
*
* Authors:
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
*/
;
/**
* Module dependencies.
*/
/**
* list all module names by user
* @param {String} user
*/
exports.listModuleNamesByUser = function* (user) {
var rows = yield this.findAll({
attributrs: ['name'],
where: {
user: user
}
});
return rows.map(function (row) {
return row.name;
});
};
/**
* list all maintainers of module `name`
* @param {String} name
*/
exports.listMaintainers = function* (name) {
var rows = yield this.findAll({
attributrs: ['user'],
where: {
name: name
}
});
return rows.map(function (row) {
return row.user;
});
};
/**
* add a maintainer for module `name`
* @param {String} name
* @param {String} user
*/
exports.addMaintainer = function* (name, user) {
var row = yield this.find({
where: {
user: user,
name: name
}
});
if (!row) {
row = yield this.build({
user: user,
name: name
}).save();
}
return row;
};
/**
* add maintainers for module `name`
* @param {String} name
* @param {Array} users
*/
exports.addMaintainers = function* (name, users) {
return yield users.map(function (user) {
return this.addMaintainer(name, user);
}.bind(this));
};
/**
* remove maintainers for module `name`
* @param {String} name
* @param {Array} users
*/
exports.removeMaintainers = function* (name, users) {
// removeMaintainers(name, oneUserName)
if (typeof users === 'string') {
users = [users];
}
if (users.length === 0) {
return;
}
yield this.destroy({
where: {
name: name,
user: users,
}
});
};
/**
* remove all maintainers for module `name`
* @param {String} name
*/
exports.removeAllMaintainers = function* (name) {
yield this.destroy({
where: {
name: name
}
});
};
/**
* add maintainers to module
* @param {String} name
* @param {Array} users
*/
exports.updateMaintainers = function* (name, users) {
// maintainers should be [username1, username2, ...] format
// find out the exists maintainers
// then remove all the users not present and add all the left
if (users.length === 0) {
return {
add: [],
remove: []
};
}
var exists = yield* this.listMaintainers(name);
var addUsers = users.filter(function (username) {
// add user which in `users` but do not in `exists`
return exists.indexOf(username) === -1;
});
var removeUsers = exists.filter(function (username) {
// remove user which in `exists` by not in `users`
return users.indexOf(username) === -1;
});
yield [
this.addMaintainers(name, addUsers),
this.removeMaintainers(name, removeUsers),
];
return {
add: addUsers,
remove: removeUsers
};
};