UNPKG

tender

Version:

Tender API client

283 lines (262 loc) 8.6 kB
// Generated by CoffeeScript 1.4.0 var Discussions, actions, async, morph, states, tenderQuery, tenderUpdate, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; async = require('async'); morph = require('morph'); tenderQuery = require('../tender_query'); tenderUpdate = require('../tender_update'); states = ['new', 'open', 'assigned', 'resolved', 'pending', 'deleted']; actions = ['toggle', 'resolve', 'unresolve', 'queue', 'unqueue', 'acknowledge', 'restore', 'changeCategory']; module.exports = Discussions = (function() { function Discussions(client) { this.client = client; } Discussions.prototype.get = function(options, callback) { var _this = this; this.options = options; this.buildGetQueryString(); return this.buildGetURI(function(err) { if (err) { return callback(err); } return tenderQuery(_this.client, _this.options, function(err, data) { return callback(err, data); }); }); }; Discussions.prototype.show = function(options, callback) { this.options = options; if (!this.options.id) { return callback(new Error("No discussion Id specified")); } this.options.uri = "" + this.client.baseURI + "/discussions/" + this.options.id; return tenderQuery(this.client, this.options, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Discussion not found")); } return callback(null, data[0]); }); }; Discussions.prototype.post = function(options, callback) { var _base, _base1, _ref, _ref1, _this = this; if (!options.title) { return callback(new Error("No title specified")); } if (!options.body) { return callback(new Error("No body specified")); } this.options = {}; this.options.data = options; if ((_ref = (_base = this.options.data)["public"]) == null) { _base["public"] = true; } if ((_ref1 = (_base1 = this.options.data).skipSpam) == null) { _base1.skipSpam = true; } return this.buildCreateURI(function(err) { if (err) { return callback(err); } return tenderUpdate(_this.client, _this.options, function(err, data) { if (err) { return callback(err); } if (!data) { return callback(new Error("Error creating discussion")); } return callback(null, data); }); }); }; Discussions.prototype.reply = function(options, callback) { var _base, _base1, _ref, _ref1; if (!options.id) { return callback(new Error("No discussion specified")); } if (!options.body) { return callback(new Error("No body specified")); } this.options = {}; this.options.data = options; this.options.uri = "https://api.tenderapp.com/" + this.client.subdomain + "/discussions/" + options.id + "/comments"; if ((_ref = (_base = this.options.data)["public"]) == null) { _base["public"] = true; } if ((_ref1 = (_base1 = this.options.data).skipSpam) == null) { _base1.skipSpam = true; } return tenderUpdate(this.client, this.options, function(err, data) { if (err) { return callback(err); } if (!data) { return callback(new Error("Error commenting discussion")); } return callback(null, data); }); }; Discussions.prototype["delete"] = function(options, callback) { if (!options.id) { return callback(new Error("No discussion specified")); } this.options = {}; this.options.uri = "https://api.tenderapp.com/" + this.client.subdomain + "/discussions/" + options.id; this.options.method = "DELETE"; return tenderUpdate(this.client, this.options, function(err, data) { if (err) { return callback(err); } if (!data) { return callback(new Error("Error deleting discussion")); } return callback(null, data); }); }; Discussions.prototype.action = function(options, callback) { var _ref, _this = this; if (!options.action) { return callback(new Error("No action specified")); } if (_ref = options.action, __indexOf.call(actions, _ref) < 0) { return callback(new Error("Invalid action")); } if (!options.id) { return callback(new Error("No discussion specified")); } this.options = options; this.options.qs = {}; return this.buildActionURI(function(err) { if (err) { return callback(err); } return tenderUpdate(_this.client, _this.options, function(err, data) { if (err) { return callback(err); } return callback(null, data); }); }); }; Discussions.prototype.buildActionURI = function(callback) { var action, _this = this; action = morph.toSnake(this.options.action); this.options.uri = "" + this.client.baseURI + "/discussions/" + this.options.id + "/" + action; if (action === 'queue' || action === 'unqueue') { if (!this.options.queue) { return callback(new Error("No queue specified")); } return this.client.getQueues({ name: this.options.queue }, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Queue not found")); } _this.options.qs.queue = data[0].id; return callback(null); }); } else if (action === 'change_category') { if (!this.options.category) { return callback(new Error("No category specified")); } return this.client.getCategories({ name: this.options.category }, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Category not found")); } _this.options.qs.to = data[0].id; return callback(null); }); } else { return callback(null); } }; Discussions.prototype.buildCreateURI = function(callback) { var _this = this; if (!this.options.data.category) { return callback(new Error("No category specified")); } return this.client.getCategories({ name: this.options.data.category }, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Category not found")); } _this.options.uri = "https://api.tenderapp.com/" + _this.client.subdomain + "/categories/" + data[0].id + "/discussions"; return callback(null); }); }; Discussions.prototype.buildGetQueryString = function() { var qs; qs = {}; if (this.options.userId) { qs.user_id = this.options.userId; } if (this.options.userEmail) { qs.user_email = this.options.userEmail; } if (this.options.sinceDiscussionId) { qs.since = this.options.sinceDiscussionId; } return this.options.qs = qs; }; Discussions.prototype.buildGetURI = function(callback) { var postURI, uri, _ref, _this = this; uri = this.client.baseURI; postURI = ""; if (this.options.state && (_ref = this.options.state, __indexOf.call(states, _ref) < 0)) { return callback(new Error('Invalid discussion state')); } else if (this.options.state) { if (this.options.state) { postURI = "" + this.options.state; } } if (this.options.queue) { return this.client.getQueues({ pattern: this.options.queue }, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Queue not found")); } _this.options.uri = "" + uri + "/queues/" + data[0].id + "/discussions/" + postURI; return callback(null); }); } else if (this.options.category) { return this.client.getCategories({ name: this.options.category }, function(err, data) { if (err) { return callback(err); } if (!data.length) { return callback(new Error("Category not found")); } _this.options.uri = "" + uri + "/categories/" + data[0].id + "/discussions/" + postURI; return callback(null); }); } else { this.options.uri = "" + uri + "/discussions/" + postURI; return callback(null); } }; return Discussions; })();