{"action":"created","comment":{"url":"https://api.github.com/repos/Runnable/ponos/pulls/comments/54923947","id":54923947,"diff_hunk":"@@ -44,196 +39,200 @@ module.exports = Server\n  * @param {ErrorCat} [opts.errorCat] An error cat instance to use for the\n  *   server.\n  */\n-function Server (opts) {\n-  this._tasks = {}\n-  this._workerOptions = {}\n-  this.opts = assign({}, opts)\n-\n-  this.log = this.opts.log || log\n-  this.errorCat = this.opts.errorCat || new ErrorCat()\n-\n-  if (this.opts.hermes) {\n-    this.hermes = this.opts.hermes\n-  } else {\n-    if (!Array.isArray(this.opts.queues)) {\n-      throw new Error('ponos.Server: missing required `queues` option.')\n-    }\n-    if (!this.opts.queues.every(isString)) {\n-      throw new Error(\n-        'ponos.Server: each element of `queues` must be a string.'\n-      )\n-    }\n-    // Defaults for the hermes client's rabbitmq connection\n-    defaults(this.opts, {\n-      hostname: process.env.RABBITMQ_HOSTNAME || 'localhost',\n-      port: process.env.RABBITMQ_PORT || 5672,\n-      username: process.env.RABBITMQ_USERNAME || 'guest',\n-      password: process.env.RABBITMQ_PASSWORD || 'guest',\n-      name: 'ponos'\n-    })\n+class Server {\n+  constructor (opts) {\n+    this._tasks = {}\n+    this._workerOptions = {}\n+    this.opts = Object.assign({}, opts)\n \n-    this.hermes = hermes.hermesSingletonFactory(this.opts)\n-  }\n+    this.log = this.opts.log || log\n+    this.errorCat = this.opts.errorCat || new ErrorCat()\n \n-  this.hermes = Promise.promisifyAll(this.hermes)\n-}\n+    if (this.opts.hermes) {\n+      this.hermes = this.opts.hermes\n+    } else {\n+      if (!Array.isArray(this.opts.queues)) {\n+        throw new Error('ponos.Server: missing required `queues` option.')\n+      }\n+      if (!this.opts.queues.every(isString)) {\n+        throw new Error(\n+          'ponos.Server: each element of `queues` must be a string.'\n+        )\n+      }\n+      // Defaults for the hermes client's rabbitmq connection\n+      defaults(this.opts, {\n+        hostname: process.env.RABBITMQ_HOSTNAME || 'localhost',\n+        port: process.env.RABBITMQ_PORT || 5672,\n+        username: process.env.RABBITMQ_USERNAME || 'guest',\n+        password: process.env.RABBITMQ_PASSWORD || 'guest',\n+        name: 'ponos'\n+      })\n+\n+      this.hermes = hermes.hermesSingletonFactory(this.opts)\n+    }\n \n-/**\n- * Helper function that subscribes to a given queue name.\n- * @private\n- * @param {string} queueName Name of the queue.\n- */\n-Server.prototype._subscribe = function (queueName) {\n-  debug('_subscribe(' + queueName + ')')\n-  this.log.trace('ponos.Server: subscribing to ' + queueName)\n-  if (!this._tasks[queueName]) {\n-    this.log.warn({\n-      queueName: queueName\n-    }, 'ponos.Server: handler not defined')\n-    return\n+    this.hermes = Promise.promisifyAll(this.hermes)\n   }\n-  this.hermes.subscribe(queueName, function (job, done) {\n-    this._runWorker(queueName, job, done)\n-  }.bind(this))\n-}\n \n-/**\n- * Helper function to subscribe to all queues.\n- * @private\n- * @return {promise} Resolved when queues are all subscribed.\n- */\n-Server.prototype._subscribeAll = function () {\n-  debug('_subscribeAll')\n-  return Promise.resolve(this.hermes.getQueues()).bind(this)\n-    .map(this._subscribe)\n-}\n+  /**\n+   * Helper function that subscribes to a given queue name.\n+   * @private\n+   * @param {string} queueName Name of the queue.\n+   */\n+  _subscribe (queueName) {\n+    debug('_subscribe(' + queueName + ')')\n+    this.log.trace('ponos.Server: subscribing to ' + queueName)\n+    if (!this._tasks[queueName]) {\n+      this.log.warn({\n+        queueName: queueName\n+      }, 'ponos.Server: handler not defined')\n+      return\n+    }\n+    this.hermes.subscribe(queueName, (job, done) => {\n+      this._runWorker(queueName, job, done)\n+    })\n+  }\n \n-/**\n- * Helper function that unsubscribes to a given queue name.\n- * @private\n- * @param {string} queueName Name of the queue.\n- * @return {promise} A promise that resolves post worker creation\n- *   and subscription.\n- */\n-Server.prototype._unsubscribe = function (queueName) {\n-  debug('_unsubscribe(' + queueName + ')')\n-  this.log.trace('ponos.Server: unsubscribing from ' + queueName)\n-  var handler = null // null will remove all handlers\n-  return this.hermes.unsubscribeAsync(queueName, handler)\n-}\n+  /**\n+   * Helper function to subscribe to all queues.\n+   * @private\n+   * @return {promise} Resolved when queues are all subscribed.\n+   */\n+  _subscribeAll () {\n+    debug('_subscribeAll')\n+    return Promise.resolve(this.hermes.getQueues()).bind(this)\n+      .map(this._subscribe)\n+  }\n \n-/**\n- * Helper function to unsubscribe from all queues.\n- * @private\n- * @return {promise} Resolved when queues are all subscribed.\n- */\n-Server.prototype._unsubscribeAll = function () {\n-  debug('_unsubscribeAll')\n-  return Promise.resolve(this.hermes.getQueues()).bind(this)\n-    .map(this._unsubscribe)\n-}\n+  /**\n+   * Helper function that unsubscribes to a given queue name.\n+   * @private\n+   * @param {string} queueName Name of the queue.\n+   * @return {promise} A promise that resolves post worker creation\n+   *   and subscription.\n+   */\n+  _unsubscribe (queueName) {\n+    debug('_unsubscribe(' + queueName + ')')\n+    this.log.trace('ponos.Server: unsubscribing from ' + queueName)\n+    const handler = null // null will remove all handlers\n+    return this.hermes.unsubscribeAsync(queueName, handler)\n+  }\n \n-/**\n- * Runs a worker for the given queue name, job, and acknowledgement callback.\n- * @private\n- * @param {string} queueName Name of the queue.\n- * @param {object} job Job for the worker to perform.\n- * @param {function} done RabbitMQ acknowledgement callback.\n- */\n-Server.prototype._runWorker = function (queueName, job, done) {\n-  debug('_runWorker(' + [ queueName, job ].join(', ') + ')')\n-  var opts = clone(this._workerOptions[queueName])\n-  defaults(opts, {\n-    queue: queueName,\n-    job: job,\n-    task: this._tasks[queueName],\n-    done: done,\n-    log: this.log,\n-    errorCat: this.errorCat\n-  })\n-  Worker.create(opts)\n-}\n+  /**\n+   * Helper function to unsubscribe from all queues.\n+   * @private\n+   * @return {promise} Resolved when queues are all subscribed.\n+   */\n+  _unsubscribeAll () {\n+    debug('_unsubscribeAll')\n+    return Promise.resolve(this.hermes.getQueues()).bind(this)\n+      .map(this._unsubscribe)\n+  }\n \n-/**\n- * Starts the worker server and listens for jobs coming from all queues.\n- * @return {promise} A promise that resolves when the server is listening.\n- */\n-Server.prototype.start = function () {\n-  debug('start')\n-  this.log.trace('ponos.Server: starting')\n-  return this.hermes.connectAsync().bind(this)\n-    .then(this._subscribeAll)\n-    .then(function () {\n-      this.log.trace('ponos.Server: started')\n-    })\n-    .catch(function (err) {\n-      this.errorCat.report(err)\n-      throw err\n+  /**\n+   * Runs a worker for the given queue name, job, and acknowledgement callback.\n+   * @private\n+   * @param {string} queueName Name of the queue.\n+   * @param {object} job Job for the worker to perform.\n+   * @param {function} done RabbitMQ acknowledgement callback.\n+   */\n+  _runWorker (queueName, job, done) {\n+    debug('_runWorker(' + [ queueName, job ].join(', ') + ')')\n+    let opts = clone(this._workerOptions[queueName])\n+    defaults(opts, {\n+      queue: queueName,\n+      job: job,\n+      task: this._tasks[queueName],\n+      done: done,\n+      log: this.log,\n+      errorCat: this.errorCat\n     })\n-}\n+    Worker.create(opts)\n+  }\n \n-/**\n- * Stops the worker server.\n- * @return {promise} A promise that resolves when the server is stopped.\n- */\n-Server.prototype.stop = function () {\n-  debug('stop')\n-  this.log.trace('ponos.Server: stopping')\n-  return this._unsubscribeAll().bind(this)\n-    .then(function () {\n-      return this.hermes.closeAsync()\n-    })\n-    .then(function () {\n-      this.log.trace('ponos.Server: stopped')\n-    })\n-    .catch(function (err) {\n-      this.errorCat.report(err)\n-      throw err\n-    })\n-}\n+  /**\n+   * Starts the worker server and listens for jobs coming from all queues.\n+   * @return {promise} A promise that resolves when the server is listening.\n+   */\n+  start () {\n+    debug('start')\n+    this.log.trace('ponos.Server: starting')\n+    return this.hermes.connectAsync().bind(this)\n+      .then(this._subscribeAll)\n+      .then(() => {\n+        this.log.trace('ponos.Server: started')\n+      })\n+      .catch((err) => {\n+        this.errorCat.report(err)\n+        throw err\n+      })\n+  }\n \n-/**\n- * Takes a map of queues and task handlers and sets them all.\n- * @param {object} map A map of queue names to task handlers.\n- * @param {string} map.key Queue name.\n- * @param {function} map.value Function to take a job or an object with a task\n- *   and additional options for the worker.\n- * @returns {ponos.Server} The server.\n- */\n-Server.prototype.setAllTasks = function (map) {\n-  debug('setAllTasks')\n-  Object.keys(map).forEach(function (key) {\n-    var value = map[key]\n-    if (isObject(value)) {\n-      if (!isFunction(value.task)) {\n-        log.warn({\n-          key: key\n-        }, 'ponos.Server.setAllTasks: No task function defined')\n-        return\n+  /**\n+   * Stops the worker server.\n+   * @return {promise} A promise that resolves when the server is stopped.\n+   */\n+  stop () {\n+    debug('stop')\n+    this.log.trace('ponos.Server: stopping')\n+    return this._unsubscribeAll().bind(this)\n+      .then(() => {\n+        return this.hermes.closeAsync()\n+      })\n+      .then(() => {\n+        this.log.trace('ponos.Server: stopped')\n+      })\n+      .catch((err) => {\n+        this.errorCat.report(err)\n+        throw err\n+      })\n+  }\n+\n+  /**\n+   * Takes a map of queues and task handlers and sets them all.\n+   * @param {object} map A map of queue names to task handlers.\n+   * @param {string} map.key Queue name.\n+   * @param {function} map.value Function to take a job or an object with a task\n+   *   and additional options for the worker.\n+   * @returns {ponos.Server} The server.\n+   */\n+  setAllTasks (map) {\n+    debug('setAllTasks')\n+    Object.keys(map).forEach(function (key) {","path":"lib/server.js","position":367,"original_position":367,"commit_id":"bfd40adcaf3b10ec610eaf80cb7c8f481284f2eb","original_commit_id":"bfd40adcaf3b10ec610eaf80cb7c8f481284f2eb","user":{"login":"rsandor","id":146592,"avatar_url":"https://avatars.githubusercontent.com/u/146592?v=3","gravatar_id":"","url":"https://api.github.com/users/rsandor","html_url":"https://github.com/rsandor","followers_url":"https://api.github.com/users/rsandor/followers","following_url":"https://api.github.com/users/rsandor/following{/other_user}","gists_url":"https://api.github.com/users/rsandor/gists{/gist_id}","starred_url":"https://api.github.com/users/rsandor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rsandor/subscriptions","organizations_url":"https://api.github.com/users/rsandor/orgs","repos_url":"https://api.github.com/users/rsandor/repos","events_url":"https://api.github.com/users/rsandor/events{/privacy}","received_events_url":"https://api.github.com/users/rsandor/received_events","type":"User","site_admin":false},"body":"Considering the type safety we have inside the `forEach` body it seems like we should be consistent here.","created_at":"2016-03-03T18:29:32Z","updated_at":"2016-03-03T18:29:32Z","html_url":"https://github.com/Runnable/ponos/pull/28#discussion_r54923947","pull_request_url":"https://api.github.com/repos/Runnable/ponos/pulls/28","_links":{"self":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/comments/54923947"},"html":{"href":"https://github.com/Runnable/ponos/pull/28#discussion_r54923947"},"pull_request":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/28"}}},"pull_request":{"url":"https://api.github.com/repos/Runnable/ponos/pulls/28","id":61495490,"html_url":"https://github.com/Runnable/ponos/pull/28","diff_url":"https://github.com/Runnable/ponos/pull/28.diff","patch_url":"https://github.com/Runnable/ponos/pull/28.patch","issue_url":"https://api.github.com/repos/Runnable/ponos/issues/28","number":28,"state":"open","locked":false,"title":"ES6","user":{"login":"bkendall","id":160236,"avatar_url":"https://avatars.githubusercontent.com/u/160236?v=3","gravatar_id":"","url":"https://api.github.com/users/bkendall","html_url":"https://github.com/bkendall","followers_url":"https://api.github.com/users/bkendall/followers","following_url":"https://api.github.com/users/bkendall/following{/other_user}","gists_url":"https://api.github.com/users/bkendall/gists{/gist_id}","starred_url":"https://api.github.com/users/bkendall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bkendall/subscriptions","organizations_url":"https://api.github.com/users/bkendall/orgs","repos_url":"https://api.github.com/users/bkendall/repos","events_url":"https://api.github.com/users/bkendall/events{/privacy}","received_events_url":"https://api.github.com/users/bkendall/received_events","type":"User","site_admin":false},"body":"This is a rewrite of Ponos with ES6 in mind. It is compatable w/ NodeJS 4. This would be considered a breaking change to Ponos, but I suppose if we needed to patch older versions for whatever reason, we would still be able to do that for a short period of time.","created_at":"2016-03-03T01:09:05Z","updated_at":"2016-03-03T18:29:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"59fc93314803fcdbd4494013a0b88db193449895","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Runnable/ponos/pulls/28/commits","review_comments_url":"https://api.github.com/repos/Runnable/ponos/pulls/28/comments","review_comment_url":"https://api.github.com/repos/Runnable/ponos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Runnable/ponos/issues/28/comments","statuses_url":"https://api.github.com/repos/Runnable/ponos/statuses/bfd40adcaf3b10ec610eaf80cb7c8f481284f2eb","head":{"label":"Runnable:es6","ref":"es6","sha":"bfd40adcaf3b10ec610eaf80cb7c8f481284f2eb","user":{"login":"Runnable","id":2828361,"avatar_url":"https://avatars.githubusercontent.com/u/2828361?v=3","gravatar_id":"","url":"https://api.github.com/users/Runnable","html_url":"https://github.com/Runnable","followers_url":"https://api.github.com/users/Runnable/followers","following_url":"https://api.github.com/users/Runnable/following{/other_user}","gists_url":"https://api.github.com/users/Runnable/gists{/gist_id}","starred_url":"https://api.github.com/users/Runnable/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Runnable/subscriptions","organizations_url":"https://api.github.com/users/Runnable/orgs","repos_url":"https://api.github.com/users/Runnable/repos","events_url":"https://api.github.com/users/Runnable/events{/privacy}","received_events_url":"https://api.github.com/users/Runnable/received_events","type":"Organization","site_admin":false},"repo":{"id":41134020,"name":"ponos","full_name":"Runnable/ponos","owner":{"login":"Runnable","id":2828361,"avatar_url":"https://avatars.githubusercontent.com/u/2828361?v=3","gravatar_id":"","url":"https://api.github.com/users/Runnable","html_url":"https://github.com/Runnable","followers_url":"https://api.github.com/users/Runnable/followers","following_url":"https://api.github.com/users/Runnable/following{/other_user}","gists_url":"https://api.github.com/users/Runnable/gists{/gist_id}","starred_url":"https://api.github.com/users/Runnable/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Runnable/subscriptions","organizations_url":"https://api.github.com/users/Runnable/orgs","repos_url":"https://api.github.com/users/Runnable/repos","events_url":"https://api.github.com/users/Runnable/events{/privacy}","received_events_url":"https://api.github.com/users/Runnable/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Runnable/ponos","description":"An opinionated queue based worker server for node.","fork":false,"url":"https://api.github.com/repos/Runnable/ponos","forks_url":"https://api.github.com/repos/Runnable/ponos/forks","keys_url":"https://api.github.com/repos/Runnable/ponos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Runnable/ponos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Runnable/ponos/teams","hooks_url":"https://api.github.com/repos/Runnable/ponos/hooks","issue_events_url":"https://api.github.com/repos/Runnable/ponos/issues/events{/number}","events_url":"https://api.github.com/repos/Runnable/ponos/events","assignees_url":"https://api.github.com/repos/Runnable/ponos/assignees{/user}","branches_url":"https://api.github.com/repos/Runnable/ponos/branches{/branch}","tags_url":"https://api.github.com/repos/Runnable/ponos/tags","blobs_url":"https://api.github.com/repos/Runnable/ponos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Runnable/ponos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Runnable/ponos/git/refs{/sha}","trees_url":"https://api.github.com/repos/Runnable/ponos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Runnable/ponos/statuses/{sha}","languages_url":"https://api.github.com/repos/Runnable/ponos/languages","stargazers_url":"https://api.github.com/repos/Runnable/ponos/stargazers","contributors_url":"https://api.github.com/repos/Runnable/ponos/contributors","subscribers_url":"https://api.github.com/repos/Runnable/ponos/subscribers","subscription_url":"https://api.github.com/repos/Runnable/ponos/subscription","commits_url":"https://api.github.com/repos/Runnable/ponos/commits{/sha}","git_commits_url":"https://api.github.com/repos/Runnable/ponos/git/commits{/sha}","comments_url":"https://api.github.com/repos/Runnable/ponos/comments{/number}","issue_comment_url":"https://api.github.com/repos/Runnable/ponos/issues/comments{/number}","contents_url":"https://api.github.com/repos/Runnable/ponos/contents/{+path}","compare_url":"https://api.github.com/repos/Runnable/ponos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Runnable/ponos/merges","archive_url":"https://api.github.com/repos/Runnable/ponos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Runnable/ponos/downloads","issues_url":"https://api.github.com/repos/Runnable/ponos/issues{/number}","pulls_url":"https://api.github.com/repos/Runnable/ponos/pulls{/number}","milestones_url":"https://api.github.com/repos/Runnable/ponos/milestones{/number}","notifications_url":"https://api.github.com/repos/Runnable/ponos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Runnable/ponos/labels{/name}","releases_url":"https://api.github.com/repos/Runnable/ponos/releases{/id}","deployments_url":"https://api.github.com/repos/Runnable/ponos/deployments","created_at":"2015-08-21T04:08:01Z","updated_at":"2016-02-16T20:59:58Z","pushed_at":"2016-03-03T01:28:38Z","git_url":"git://github.com/Runnable/ponos.git","ssh_url":"git@github.com:Runnable/ponos.git","clone_url":"https://github.com/Runnable/ponos.git","svn_url":"https://github.com/Runnable/ponos","homepage":null,"size":515,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":5,"default_branch":"master"}},"base":{"label":"Runnable:master","ref":"master","sha":"fe2a237b58fd2c6af1610bf6be70b748daef1fa6","user":{"login":"Runnable","id":2828361,"avatar_url":"https://avatars.githubusercontent.com/u/2828361?v=3","gravatar_id":"","url":"https://api.github.com/users/Runnable","html_url":"https://github.com/Runnable","followers_url":"https://api.github.com/users/Runnable/followers","following_url":"https://api.github.com/users/Runnable/following{/other_user}","gists_url":"https://api.github.com/users/Runnable/gists{/gist_id}","starred_url":"https://api.github.com/users/Runnable/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Runnable/subscriptions","organizations_url":"https://api.github.com/users/Runnable/orgs","repos_url":"https://api.github.com/users/Runnable/repos","events_url":"https://api.github.com/users/Runnable/events{/privacy}","received_events_url":"https://api.github.com/users/Runnable/received_events","type":"Organization","site_admin":false},"repo":{"id":41134020,"name":"ponos","full_name":"Runnable/ponos","owner":{"login":"Runnable","id":2828361,"avatar_url":"https://avatars.githubusercontent.com/u/2828361?v=3","gravatar_id":"","url":"https://api.github.com/users/Runnable","html_url":"https://github.com/Runnable","followers_url":"https://api.github.com/users/Runnable/followers","following_url":"https://api.github.com/users/Runnable/following{/other_user}","gists_url":"https://api.github.com/users/Runnable/gists{/gist_id}","starred_url":"https://api.github.com/users/Runnable/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Runnable/subscriptions","organizations_url":"https://api.github.com/users/Runnable/orgs","repos_url":"https://api.github.com/users/Runnable/repos","events_url":"https://api.github.com/users/Runnable/events{/privacy}","received_events_url":"https://api.github.com/users/Runnable/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Runnable/ponos","description":"An opinionated queue based worker server for node.","fork":false,"url":"https://api.github.com/repos/Runnable/ponos","forks_url":"https://api.github.com/repos/Runnable/ponos/forks","keys_url":"https://api.github.com/repos/Runnable/ponos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Runnable/ponos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Runnable/ponos/teams","hooks_url":"https://api.github.com/repos/Runnable/ponos/hooks","issue_events_url":"https://api.github.com/repos/Runnable/ponos/issues/events{/number}","events_url":"https://api.github.com/repos/Runnable/ponos/events","assignees_url":"https://api.github.com/repos/Runnable/ponos/assignees{/user}","branches_url":"https://api.github.com/repos/Runnable/ponos/branches{/branch}","tags_url":"https://api.github.com/repos/Runnable/ponos/tags","blobs_url":"https://api.github.com/repos/Runnable/ponos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Runnable/ponos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Runnable/ponos/git/refs{/sha}","trees_url":"https://api.github.com/repos/Runnable/ponos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Runnable/ponos/statuses/{sha}","languages_url":"https://api.github.com/repos/Runnable/ponos/languages","stargazers_url":"https://api.github.com/repos/Runnable/ponos/stargazers","contributors_url":"https://api.github.com/repos/Runnable/ponos/contributors","subscribers_url":"https://api.github.com/repos/Runnable/ponos/subscribers","subscription_url":"https://api.github.com/repos/Runnable/ponos/subscription","commits_url":"https://api.github.com/repos/Runnable/ponos/commits{/sha}","git_commits_url":"https://api.github.com/repos/Runnable/ponos/git/commits{/sha}","comments_url":"https://api.github.com/repos/Runnable/ponos/comments{/number}","issue_comment_url":"https://api.github.com/repos/Runnable/ponos/issues/comments{/number}","contents_url":"https://api.github.com/repos/Runnable/ponos/contents/{+path}","compare_url":"https://api.github.com/repos/Runnable/ponos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Runnable/ponos/merges","archive_url":"https://api.github.com/repos/Runnable/ponos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Runnable/ponos/downloads","issues_url":"https://api.github.com/repos/Runnable/ponos/issues{/number}","pulls_url":"https://api.github.com/repos/Runnable/ponos/pulls{/number}","milestones_url":"https://api.github.com/repos/Runnable/ponos/milestones{/number}","notifications_url":"https://api.github.com/repos/Runnable/ponos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Runnable/ponos/labels{/name}","releases_url":"https://api.github.com/repos/Runnable/ponos/releases{/id}","deployments_url":"https://api.github.com/repos/Runnable/ponos/deployments","created_at":"2015-08-21T04:08:01Z","updated_at":"2016-02-16T20:59:58Z","pushed_at":"2016-03-03T01:28:38Z","git_url":"git://github.com/Runnable/ponos.git","ssh_url":"git@github.com:Runnable/ponos.git","clone_url":"https://github.com/Runnable/ponos.git","svn_url":"https://github.com/Runnable/ponos","homepage":null,"size":515,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/28"},"html":{"href":"https://github.com/Runnable/ponos/pull/28"},"issue":{"href":"https://api.github.com/repos/Runnable/ponos/issues/28"},"comments":{"href":"https://api.github.com/repos/Runnable/ponos/issues/28/comments"},"review_comments":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/28/comments"},"review_comment":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Runnable/ponos/pulls/28/commits"},"statuses":{"href":"https://api.github.com/repos/Runnable/ponos/statuses/bfd40adcaf3b10ec610eaf80cb7c8f481284f2eb"}}}}