built.io-browserify
Version:
SDK for Built.io Backend which is compatible with Browserify
476 lines (446 loc) • 14.4 kB
JavaScript
var R = require('ramda');
var utility = require('./utilities/utility');
var instanceMethodBuilder = require('./utilities/instanceMethodBuilder')();
var objectCons = require('./object');
var constants = require('./constants');
/**
* @class Role
* @classdesc
* A role is logical grouping of a set of users. Role inherits from {@link Object}.
* @description
* Constructs a role
* @param uid Uid of a role on Built.io Backend
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* @return {Role}
*/
var roleCons = module.exports = R.curry(function(app,cls,headers,query,data,delta) {
var returnObj = objectCons(app,cls,headers,{},data,delta);
return instanceMethodBuilder.build(module.exports,returnObj);
});
utility.copyProperties(module.exports, objectCons);
/**
* Returns a query instance for Role Class
* @function getRoleQuery
* @static
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* var Role = Built.App('blt5d4sample2633b').Role;
* var query = Role.getRoleQuery();
* query
* .where('name','admin')
* .exec()
* .then(function(roles){
* .deltaDeletedFrom('2014-09-02')// roles is an array of SDK objects
* });
* @return {Query}
*/
module.exports.getRoleQuery = function(app){
return function(){
return app.Class(constants.APP_ROLE_CLS).Query();
}
};
var addHelper = R.curry(function (parameter, entity, role){
if(utility.isObject(entity) && entity.get('uid')){
entity = entity.get('uid')
}
var newDelta = getMixinedDelta(role);
var newData = getMixinedData(role)
var newRoles = getArrayByParameter(parameter,role);
newRoles.push(entity)
newDelta[parameter] = newRoles;
newData[parameter] = newRoles;
return role.cls.ObjectCons(role.getHeaders(),{},newData,newDelta);
});
/**
* Adds a new role
* @function addRole
* @param {String|Object} role Accepts SDK's role object or its uid
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
*
* // Example using role's uid
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addRole('blt111sample24a6b');
* //Example using SDK object
* var role1 = Built.App('blt5d4sample2633b').Role('bltcd6168a6b9ad2add');
*
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addRole(role1)
* @return {Role}
*/
module.exports.addRole = addHelper('roles');
instanceMethodBuilder.define('addRole',2);
/**
* Adds a new user to this role
* @function addUser
* @param {String|Object} user Accepts SDK's user object or its uid
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
*
* //Example using role's uid
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addUser('blt111sample24a6b');
* //Example using SDK object
* var user = Built.App('blt5d4sample2633b').User('blt111sample24a6b');
*
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addUser(user)
* @return {Role}
*/
module.exports.addUser = addHelper('users');
instanceMethodBuilder.define('addUser',2);
/**
* Adds new sub roles within this role
* @function addRoles
* @param {Array} roles This can be an array of role uids or an array SDK objects
* @instance
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' and 'blt222sample24a6b' is uid of a role object on Built.io Backend
*
* //Example using role's uid
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addRoles(['blt111sample24a6b','blt222sample24a6b']);
* //Example using SDK object
* var role1 = Built.App('blt5d4sample2633b').Role('bltcd6168a6b9ad2add');
* var role2 = Built.App('blt5d4sample2633b').Role('bltcd6168a6b9ad2acc');
*
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addRoles([role1,role2])
* @memberof Role
* @return {Role}
*/
module.exports.addRoles = R.curry(function (newRoles, role){
var newRole = R.mixin({}, role);
newRoles.forEach(function(curRole){
// Because of immutability we have to reassign it to newRole
newRole = newRole.addRole(curRole)
})
return newRole
});
instanceMethodBuilder.define('addRoles',2);
/**
* Adds a new users to this role
* @function addUsers
* @param {Array} users This can be an array of user uids or an array SDK objects
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' and 'bll222sample24a6b' is uid of a user object on Built.io Backend
*
* //Example using role's uid
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addUsers(['blt111sample24a6b', 'bll222sample24a6b']);
* //Example using SDK object
* var user1 = Built.App('blt5d4sample2633b').User('bltcd6168a6b9ad2add');
* var user2 = Built.App('blt5d4sample2633b').User('bltcd6168a6b9ad2acc');
*
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .addUsers([user1, user2])
* @return {Role}
*/
module.exports.addUsers = R.curry(function (newUsers, role){
var newRole = R.mixin({}, role);
newUsers.forEach(function(user){
// Because of immutability we have to reassign it to newRole
newRole = newRole.addUser(user)
})
return newRole
});
instanceMethodBuilder.define('addUsers', 2);
/**
* Fires a query on in-built ApplicationUser objects and the ones which fulfills the query condition are assigned againts the 'users' field.
* @function setUsersWithQuery
* @param {Object} query The query to be executed on ApplicationUser objects. It can be a in json format or app.Class('class_uid').Query object.
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
*
* //Example using plain json object. Sets all the users who's username starts with pat
* var role = Built.App('blt5d4sample2633b').Role();
* role = role
* .setName('developers')
* .setUsersWithQuery({
* query:{
* "username": {
"$regex": "^pat",
"$options": "i"
}
* }
* });
*
* //Example using app.Class('class_uid').Query
* var app = Built.App('blt5d4sample2633b')
* var role = app.Role();
* var userQuery = app.Class('built_io_application_user').Query()
* userQuery = queryQuery.matches("username", "^path")
* role = role
* .setName('developers')
* .setUsersWithQuery(userQuery)
* @return {Role}
*/
module.exports.setUsersWithQuery = R.curry(function(query, role){
var newDelta = getMixinedDelta(role)
// If BuiltQuery object is provided
if(query.app)
query = query.data
newDelta['users'] = query
return role.cls.ObjectCons(role.getHeaders(), {}, role.data, newDelta)
})
instanceMethodBuilder.define('setUsersWithQuery', 2);
/**
* Gets the name of the role
* @function getName
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(function(role){
* role.getName();
* })
* @return {String}
*/
module.exports.getName = module.exports.get('name');
instanceMethodBuilder.define('getName',1);
/**
* Gets the sub-roles contained in this role. A sub-role is a subset of a role.
* @function getRoles
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(function(role){
* role.getRoles();
* });
* @return {Array}
*/
module.exports.getRoles = module.exports.get('roles');
instanceMethodBuilder.define('getRoles',1);
/**
* Gets the uid of the role
* @function getRoleUid
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* var uid = role.getRoleUid();
* @return {String}
*/
module.exports.getRoleUid = module.exports.get('uid');
instanceMethodBuilder.define('getRoleUid',1);
/**
* Gets the users belonging to this role
* @function getUsers
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(function(role){
* role.getUsers();
* })
* @return {Array}
*/
module.exports.getUsers = module.exports.get('users');
instanceMethodBuilder.define('getUsers',1);
/**
* Assigns a name to this role
* @function setName
* @param {String} name Name to be assigned to this role
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* var role = Built.App('blt5d4sample2633b').Role();
* role = role.setName('developers');
* @return {Role}
*/
module.exports.setName = module.exports.set('name');
instanceMethodBuilder.define('setName',2);
/**
* Assigns a uid to this role
* @function setRoleUid
* @param {String} uid Uid to be assigned to this role
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
* var role = Built.App('blt5d4sample2633b').Role();
* role = role.setRoleUid('blt111sample24a6b');
* @return {Role}
*/
module.exports.setRoleUid = module.exports.set('uid');
instanceMethodBuilder.define('setRoleUid',2);
var hashelper = R.curry(function(type,uid,role){
return R.contains(uid,getData(role)[type]);
});
/**
* Checks whether a sub-role exists in this role
* @function hasRole
* @param {String} role_uid Uid of the sub-role whose existence needs to be checked
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
*
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(fuction(role){
* role.hasRole('blt444sample24a6b'); // pass sub role uid
* });
* @return {Boolean}
*/
module.exports.hasRole = hashelper('roles');
instanceMethodBuilder.define('hasRole',2);
/**
* Checks whether a user belongs to this role
* @function hasUser
* @param {String} user_uid Uid of the user whose existence needs to be checked
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
*
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(fuction(role){
* role.hasUser('blt444sample24a6b'); // pass user uid
* });
* @return {Boolean}
*/
module.exports.hasUser = hashelper('users');
instanceMethodBuilder.define('hasUser',2);
var removeHelper = R.curry(function(type,uid,role){
var newDelta = getMixinedDelta(role);
var newData = getMixinedData(role);
var array = getArrayByParameter(type,role);
var index = array.indexOf(uid);
if(index > -1)
array.splice(index,1);
newDelta[type] = array;
newData[type] = array;
return role.cls.ObjectCons(role.getHeaders(),{},newData,newDelta);
});
/**
* Removes a sub-role from the given role
* @function removeRole
* @param {String} role_uid Uid of the sub-role that needs to be removed from the role
* @instance
* @memberof Role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(function(role){
* if(role.hasRole('blt444sample24a6b'));
* return role.removeRole('blt444sample24a6b'); //pass role uid
* else
* return role;
* });
* @return {Role}
*/
module.exports.removeRole = removeHelper('roles');
instanceMethodBuilder.define('removeRole',2);
/**
* Removes a user from a role
* @function removeUser
* @param {String} user_uid Uid of the user that needs to be removed from the role
* @example
* // 'blt5d4sample2633b' is a dummy Application API key
* // 'app.Role() returns a 'Role' instance
* // 'blt111sample24a6b' is uid of a role object on Built.io Backend
*
* var role = Built.App('blt5d4sample2633b').Role('blt111sample24a6b');
* role.fetch()
* .then(function(role){
* if(role.hasUser('blt444sample24a6b'));
* return role.removeUser('blt444sample24a6b'); //pass user uid
* else
* return role;
* });
* @instance
* @memberof Role
* @return {Role}
*/
module.exports.removeUser = removeHelper('users');
instanceMethodBuilder.define('removeUser',2);
function getMixinedDelta(role){
return R.mixin({},getDelta(role));
};
function getMixinedData(role){
return R.mixin({},getData(role));
};
function getDelta(role){
return role.delta;
}
function getData(role){
return role.data;
}
/*
This function checks whether array (roles|users) exists in a role
It make a new array containing the same contents or retunrs a new array
*/
function getArrayByParameter(parameter,role){
var array;
if(getData(role)[parameter])
var array = [].concat(getData(role)[parameter]);
else
array = [];
return array;
}