diff --git a/lib/jira.js b/lib/jira.js index ce90137c..dbc4c5a5 100644 --- a/lib/jira.js +++ b/lib/jira.js @@ -1023,6 +1023,183 @@ var JiraApi = exports.JiraApi = function(protocol, host, port, username, passwor }); }; + // ## Get a filter by id ## + // ### Takes ### + // + // * filterId: the id of the filter + // * callback: for when it's done + // + // ### Returns ### + // * error string + // * filter object + // + // [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e484) + this.getFilter = function(filterId, callback) { + var options = { + rejectUnauthorized: this.strictSSL, + uri: this.makeUri('/filter/' + filterId), + method: 'GET', + followAllRedirects: true, + json: true + }; + + this.doRequest(options, function(error, response, body) { + + if (error) { + callback(error, null); + return; + } + + if (response.statusCode === 200 || response.statusCode === 204) { + callback(null, body); + return; + } + + if (response.statusCode === 404) { + callback('Filter not found'); + return; + } + + callback(response.statusCode + ': Error while getting filter', body); + + }); + }; + + // ## Create a filter ## + // ### Takes ### + // + // * filter: an object of the new filter + // * callback: for when it's done + // + // ### Returns ### + // * error string + // * filter object + // + // [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e451) + // + /* { + * "name": "All Open Bugs", + * "description": "Lists all open bugs", + * "jql": "type = Bug and resolution is empty", + * "favourite": true + * } + */ + this.createFilter = function(filter, callback) { + var options = { + rejectUnauthorized: this.strictSSL, + uri: this.makeUri('/filter'), + method: 'POST', + followAllRedirects: true, + json: true, + body: filter + }; + + this.doRequest(options, function(error, response, body) { + + if (error) { + callback(error, null); + return; + } + + if (response.statusCode === 200 || response.statusCode === 204) { + callback(null, body); + return; + } + + callback(response.statusCode + ': Error while creating filter', body); + + }); + }; + + // ## Delete a filter ## + // ### Takes ### + // + // * filterId: the id of the filter + // * callback: for when it's done + // + // ### Returns ### + // * error string + // * filter object + // + // [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e534) + this.deleteFilter = function(filterId, callback) { + var options = { + rejectUnauthorized: this.strictSSL, + uri: this.makeUri('/filter/' + filterId), + method: 'DELETE', + followAllRedirects: true, + json: true + }; + + this.doRequest(options, function(error, response, body) { + + if (error) { + callback(error, null); + return; + } + + if (response.statusCode === 204) { + callback(null, body); + return; + } + + callback(response.statusCode + ': Error while deleting filter', body); + + }); + }; + + // ## Update a filter ## + // ### Takes ### + // + // * filter: an object of the new filter + // * callback: for when it's done + // + // ### Returns ### + // * error string + // * filter object + // + // [Jira Doc](https://docs.atlassian.com/jira/REST/latest/#d2e505) + // + /* { + * "id": "10000", // Required + * "name": "All Open Bugs", + * "description": "Lists all open bugs", + * "jql": "type = Bug and resolution is empty", + * "favourite": true + * } + */ + this.updateFilter = function(filter, callback) { + var options = { + rejectUnauthorized: this.strictSSL, + uri: this.makeUri('/filter/' + filter.id), + method: 'PUT', + followAllRedirects: true, + json: true, + body: filter + }; + + this.doRequest(options, function(error, response, body) { + + if (error) { + callback(error, null); + return; + } + + if (response.statusCode === 200 || response.statusCode === 204) { + callback(null, body); + return; + } + + if (response.statusCode === 404) { + callback('Filter not found'); + return; + } + + callback(response.statusCode + ': Error while updating filter', body); + + }); + }; + // ## List Components ## // ### Takes ### // diff --git a/package.json b/package.json index a2311dcf..a19af082 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "Wrapper for the JIRA API", "author": "Steven Surowiec ", "contributors": [ + "Anton Rudeshko ", "Chris Moultrie " ], "homepage": "http://github.com/steves/node-jira",