Major updates

- Fixing up some inheritance schemes,
- Adding proper access requests support for projects,
- Adding full milestone support for projects
- Adding custom attributes to projects, groups and users
This commit is contained in:
Justin Dalrymple 2017-11-29 20:58:26 -05:00
parent 78feb16e12
commit c8a0cf4aca
17 changed files with 225 additions and 274 deletions

View File

@ -1,44 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ACCESS_LEVELS = {
GUEST: 10,
REPORTER: 20,
DEVELOPER: 30,
MASTER: 40,
OWNER: 50,
};
class GroupAccessRequests extends BaseModel {
constructor(...args) {
super(...args);
this.ACCESS_LEVELS = ACCESS_LEVELS;
}
all(groupId) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/access_requests`);
}
request(groupId) {
const gId = Utils.parse(groupId);
return this.post(`groups/${gId}/access_requests`);
}
approve(groupId, userId, { access_level = 30 }) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.post(`groups/${gId}/access_requests/${uId}/approve`, { access_level });
}
deny(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.delete(`groups/${gId}/access_requests/${uId}/approve`);
}
}
module.exports = GroupAccessRequests;

View File

@ -1,41 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMembers extends BaseModel {
all(groupId) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/members`);
}
add(groupId, userId, accessLevel) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.post(`groups/${gId}/members`, {
user_id: uId,
access_level: parseInt(accessLevel, 10),
});
}
edit(groupId, userId, accessLevel) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.put(`groups/${gId}/members/${uId}`, {
access_level: parseInt(accessLevel, 10),
});
}
show(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.get(`groups/${gId}/members/${uId}`);
}
remove(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.delete(`groups/${gId}/members/${uId}`);
}
}
module.exports = GroupMembers;

View File

@ -1,12 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestoneIssues extends BaseModel {
all(groupId, milestoneId) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${gId}/milestones/${mId}/issues`);
}
}
module.exports = GroupMilestoneIssues;

View File

@ -1,12 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestoneMergeRequests extends BaseModel {
all(groupId, milestoneId) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${gId}/milestones/${mId}/merge_requests`);
}
}
module.exports = GroupMilestoneMergeRequests;

View File

@ -1,40 +0,0 @@
const BaseModel = require('./BaseModel');
const GroupMilestoneIssues = require('./GroupMilestoneIssues');
const GroupMilestoneMergeRequests = require('./GroupMilestoneMergeRequests');
const Utils = require('../Utils');
class GroupMilestones extends BaseModel {
constructor(...args) {
super(...args);
this.issues = new GroupMilestoneIssues(...args);
this.mergeRequests = new GroupMilestoneMergeRequests(...args);
}
all(groupId, options = {}) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/milestones`, options);
}
create(groupId, title, options) {
const gId = Utils.parse(groupId);
return this.post(`groups/${gId}/milestones`, options);
}
edit(groupId, milestoneId, options) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.put(`groups/${gId}/milestones/${mId}`, options);
}
show(groupId, milestoneId) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${gId}/milestones/${mId}`);
}
}
module.exports = GroupMilestones;

View File

@ -1,18 +1,21 @@
const BaseModel = require('./BaseModel');
const GroupMilestones = require('./GroupMilestones');
const GroupMembers = require('./GroupMembers');
const GroupProjects = require('./GroupProjects');
const GroupAccessRequests = require('./GroupAccessRequests');
const ResourceAccessRequests = require('./ResourceAccessRequests');
const ResourceCustomAttributes = require('./ResourceCustomAttributes');
const ResourceMembers = require('./ResourceMembers');
const ResourceMilestones = require('./ResourceMilestones');
const Utils = require('../Utils');
class Groups extends BaseModel {
constructor(...args) {
super(...args);
this.milestones = new GroupMilestones(...args);
this.members = new GroupMembers(...args);
this.projects = new GroupProjects(...args);
this.accessRequests = new GroupAccessRequests(...args);
this.accessRequests = new ResourceAccessRequests('groups', ...args);
this.customAttributes = new ResourceCustomAttributes('groups', ...args);
this.members = new ResourceMembers('groups', ...args);
this.milestones = new ResourceMilestones('groups', ...args);
}
all(options = {}) {

View File

@ -1,44 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ACCESS_LEVELS = {
GUEST: 10,
REPORTER: 20,
DEVELOPER: 30,
MASTER: 40,
OWNER: 50,
};
class ProjectAccessRequests extends BaseModel {
constructor(...args) {
super(...args);
this.ACCESS_LEVELS = ACCESS_LEVELS;
}
all(projectId) {
const pId = Utils.parse(projectId);
return this.get(`projects/${pId}/access_requests`);
}
request(projectId) {
const pId = Utils.parse(projectId);
return this.post(`projects/${pId}/access_requests`);
}
approve(projectId, userId, { access_level = 30 }) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.post(`projects/${pId}/access_requests/${uId}/approve`, { access_level });
}
deny(projectId, userId) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.delete(`projects/${pId}/access_requests/${uId}/approve`);
}
}
module.exports = ProjectAccessRequests;

View File

@ -1,41 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class ProjectMembers extends BaseModel {
all(projectId) {
const pId = Utils.parse(projectId);
return this.get(`projects/${pId}/members`);
}
add(projectId, userId, accessLevel = 30) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.post(`projects/${pId}/members`, {
user_id: uId,
access_level: parseInt(accessLevel, 10),
});
}
edit(projectId, userId, accessLevel = 30) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.put(`projects/${pId}/members/${uId}`, {
access_level: parseInt(accessLevel, 10),
});
}
remove(projectId, userId) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.delete(`projects/${pId}/members/${uId}`);
}
show(projectId, userId) {
const [pId, uId] = [projectId, userId].map(Utils.parse);
return this.get(`projects/${pId}/members/${uId}`);
}
}
module.exports = ProjectMembers;

View File

@ -1,30 +0,0 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class ProjectMilestones extends BaseModel {
add(projectId, title, options) {
const pId = Utils.parse(projectId);
return this.post(`projects/${pId}/milestones`, options);
}
all(projectId, options = {}) {
const pId = Utils.parse(projectId);
return this.get(`projects/${pId}/milestones`, options);
}
edit(projectId, milestoneId, options) {
const [pId, mId] = [projectId, milestoneId].map(Utils.parse);
return this.put(`projects/${pId}/milestones/${mId}`, options);
}
show(projectId, milestoneId) {
const [pId, mId] = [projectId, milestoneId].map(Utils.parse);
return this.get(`projects/${pId}/milestones/${mId}`);
}
}
module.exports = ProjectMilestones;

View File

@ -2,35 +2,40 @@ const Fs = require('fs');
const Path = require('path');
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ProjectMembers = require('./ProjectMembers');
const ProjectHooks = require('./ProjectHooks');
const ProjectIssues = require('./ProjectIssues');
const ProjectLabels = require('./ProjectLabels');
const ProjectRepository = require('./ProjectRepository');
const ProjectMilestones = require('./ProjectMilestones');
const ProjectDeployKeys = require('./ProjectDeployKeys');
const ProjectMergeRequests = require('./ProjectMergeRequests');
const ProjectServices = require('./ProjectServices');
const ProjectTriggers = require('./ProjectTriggers');
const ProjectRunners = require('./ProjectRunners');
const ProjectPipelines = require('./ProjectPipelines');
const ResourceCustomAttributes = require('./ResourceCustomAttributes');
const ResourceMembers = require('./ResourceMembers');
const ResourceAccessRequests = require('./ResourceAccessRequests');
const ResourceMilestones = require('./ResourceMilestones');
class Projects extends BaseModel {
constructor(...args) {
super(...args);
this.members = new ProjectMembers(...args);
this.hooks = new ProjectHooks(...args);
this.issues = new ProjectIssues(...args);
this.labels = new ProjectLabels(...args);
this.repository = new ProjectRepository(...args);
this.milestones = new ProjectMilestones(...args);
this.deployKeys = new ProjectDeployKeys(...args);
this.mergeRequests = new ProjectMergeRequests(...args);
this.services = new ProjectServices(...args);
this.triggers = new ProjectTriggers(...args);
this.pipelines = new ProjectPipelines(...args);
this.runners = new ProjectRunners(...args);
this.customAttributes = new ResourceCustomAttributes('projects', ...args);
this.members = new ResourceMembers('projects', ...args);
this.accessRequests = new ResourceAccessRequests('projects', ...args);
this.milestones = new ResourceMilestones('projects', ...args);
}
all(options = {}) {

View File

@ -0,0 +1,45 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ACCESS_LEVELS = {
GUEST: 10,
REPORTER: 20,
DEVELOPER: 30,
MASTER: 40,
OWNER: 50,
};
class ResourceAccessRequests extends BaseModel {
constructor(resourceType, ...args){
super(...args);
this.resourceType = resourceType;
this.ACCESS_LEVELS = ACCESS_LEVELS;
}
all(resourceId) {
const rId = Utils.parse(resourceId);
return this.get(`${this.resourceType}/${rId}/access_requests`);
}
request(resourceId) {
const rId = Utils.parse(resourceId);
return this.post(`${this.resourceType}/${rId}/access_requests`);
}
approve(resourceId, userId, { access_level = 30 }) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.post(`${this.resourceType}/${rId}/access_requests/${uId}/approve`, { access_level });
}
deny(resourceId, userId) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.delete(`${this.resourceType}/${rId}/access_requests/${uId}/approve`);
}
}
module.exports = ResourceAccessRequests;

View File

@ -0,0 +1,36 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class ResourceCustomAttributes extends BaseModel {
constructor(resourceType, ...args) {
super(...args);
this.resourceType = resourceType;
}
all(resourceId) {
const rId = Utils.parse(resourceId);
return this.get(`${this.resourceType}/${rId}/custom_attributes`);
}
set(resourceId, customAttributeId, value) {
const [rId, cId] = [resourceId, customAttributeId].map(Utils.parse);
return this.put(`${this.resourceType}/${rId}/custom_attributes/${cId}`, { value });
}
remove(resourceId, customAttributeId) {
const [rId, cId] = [resourceId, customAttributeId].map(Utils.parse);
return this.delete(`${this.resourceType}/${rId}/members/${cId}`);
}
show(resourceId, customAttributeId) {
const [rId, cId] = [resourceId, customAttributeId].map(Utils.parse);
return this.get(`${this.resourceType}/${rId}/members/${cId}`);
}
}
module.exports = ResourceCustomAttributes;

View File

@ -0,0 +1,47 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class ResourceMembers extends BaseModel {
constructor(resourceType, ...args) {
super(...args);
this.resourceType = resourceType;
}
all(resourceId) {
const rId = Utils.parse(resourceId);
return this.get(`${this.resourceType}/${rId}/members`);
}
add(resourceId, userId, accessLevel) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.post(`${this.resourceType}/${rId}/members`, {
user_id: uId,
access_level: parseInt(accessLevel, 10),
});
}
edit(resourceId, userId, accessLevel) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.put(`${this.resourceType}/${rId}/members/${uId}`, {
access_level: parseInt(accessLevel, 10),
});
}
show(resourceId, userId) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.get(`${this.resourceType}/${rId}/members/${uId}`);
}
remove(resourceId, userId) {
const [rId, uId] = [resourceId, userId].map(Utils.parse);
return this.delete(`${this.resourceType}/${rId}/members/${uId}`);
}
}
module.exports = ResourceMembers;

View File

@ -0,0 +1,18 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestoneIssues extends BaseModel {
constructor(resourceType, ...args) {
super(...args);
this.resourceType = resourceType;
}
all(resourceId, milestoneId) {
const [rId, mId] = [resourceId, milestoneId].map(Utils.parse);
return this.get(`${this.resourceType}/${rId}/milestones/${mId}/issues`);
}
}
module.exports = GroupMilestoneIssues;

View File

@ -0,0 +1,18 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class ResourceMilestoneMergeRequests extends BaseModel {
constructor(resourceType, ...args) {
super(...args);
this.resourceType = resourceType;
}
all(resourceId, milestoneId) {
const [rId, mId] = [resourceId, milestoneId].map(Utils.parse);
return this.get(`${this.resourceType}/${rId}/milestones/${mId}/merge_requests`);
}
}
module.exports = ResourceMilestoneMergeRequests;

View File

@ -0,0 +1,41 @@
const BaseModel = require('./BaseModel');
const ResourceMilestoneIssues = require('./GroupMilestoneIssues');
const ResourceMilestoneMergeRequests = require('./GroupMilestoneMergeRequests');
const Utils = require('../Utils');
class ResourceMilestones extends BaseModel {
constructor(resourceType, ...args) {
super(...args);
this.resourceType = resourceType;
this.issues = new ResourceMilestoneIssues(resourceType, ...args);
this.mergeRequests = new ResourceMilestoneMergeRequests(resourceType, ...args);
}
all(resourceId, options = {}) {
const rId = Utils.parse(resourceId);
return this.get(`${this.resourceType}/${rId}/milestones`, options);
}
create(resourceId, title, options) {
const rId = Utils.parse(resourceId);
return this.post(`${this.resourceType}/${rId}/milestones`, options);
}
edit(resourceId, milestoneId, options) {
const [rId, mId] = [resourceId, milestoneId].map(Utils.parse);
return this.put(`${this.resourceType}/${rId}/milestones/${mId}`, options);
}
show(resourceId, milestoneId) {
const [rId, mId] = [resourceId, milestoneId].map(Utils.parse);
return this.get(`${this.resourceType}/${rId}/milestones/${mId}`);
}
}
module.exports = ResourceMilestones;

View File

@ -1,11 +1,13 @@
const BaseModel = require('./BaseModel');
const UserKeys = require('./UserKeys');
const Utils = require('../Utils');
const ResourceCustomAttributes = require('./ResourceCustomAttributes');
class Users extends BaseModel {
constructor(...args) {
super(...args);
this.customAttributes = new ResourceCustomAttributes('users', ...args);
this.keys = UserKeys;
}