text: /**
   *  mixin pullRequests
   *
   *  Copyright 2012 Cloud9 IDE, Inc.
   *
   *  This product includes software developed by
   *  Cloud9 IDE, Inc (http://c9.io).
   *
   *  Author: Mike de Boer <info@mikedeboer.nl>
   **/
  
  "use strict";
  
  var error = require("./../../error");
  var Util = require("./../../util");
  
  var pullRequests = module.exports = {
      pullRequests: {}
  };
  
  (function() {
      /** section: github
       *  pullRequests#getAll(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - state (String): Optional. Validation rule: ` ^(open|closed)$ `.
       *  - page (Number): Optional. Page number of the results to fetch. Validation rule: ` ^[0-9]+$ `.
       *  - per_page (Number): Optional. A custom page size up to 100. Default is 30. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getAll = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#get(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       **/
      this.get = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#create(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - title (String): Required. 
       *  - body (String): Optional. 
       *  - base (String): Required. Required string - The branch (or git ref) you want your changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repo that requests a merge to a base of another repo. 
       *  - head (String): Required. Required string - The branch (or git ref) where your changes are implemented. 
       **/
      this.create = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#createFromIssue(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - issue (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - base (String): Required. Required string - The branch (or git ref) you want your changes pulled into. This should be an existing branch on the current repository. You cannot submit a pull request to one repo that requests a merge to a base of another repo. 
       *  - head (String): Required. Required string - The branch (or git ref) where your changes are implemented. 
       **/
      this.createFromIssue = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#update(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - state (String): Optional. Validation rule: ` ^(open|closed)$ `.
       *  - title (String): Required. 
       *  - body (String): Optional. 
       **/
      this.update = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#getCommits(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - page (Number): Optional. Page number of the results to fetch. Validation rule: ` ^[0-9]+$ `.
       *  - per_page (Number): Optional. A custom page size up to 100. Default is 30. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getCommits = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#getFiles(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - page (Number): Optional. Page number of the results to fetch. Validation rule: ` ^[0-9]+$ `.
       *  - per_page (Number): Optional. A custom page size up to 100. Default is 30. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getFiles = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#getMerged(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - page (Number): Optional. Page number of the results to fetch. Validation rule: ` ^[0-9]+$ `.
       *  - per_page (Number): Optional. A custom page size up to 100. Default is 30. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getMerged = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#merge(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - commit_message (String): Optional. Optional string - The message that will be used for the merge commit 
       **/
      this.merge = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#getComments(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - page (Number): Optional. Page number of the results to fetch. Validation rule: ` ^[0-9]+$ `.
       *  - per_page (Number): Optional. A custom page size up to 100. Default is 30. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getComments = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#getComment(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       **/
      this.getComment = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#createComment(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - body (String): Required. 
       *  - commit_id (String): Required. Required string - Sha of the commit to comment on. 
       *  - path (String): Required. Required string - Relative path of the file to comment on. 
       *  - position (Number): Required. Required number - Column index in the diff to comment on. 
       **/
      this.createComment = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#createCommentReply(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - body (String): Required. 
       *  - in_reply_to (Number): Required. 
       **/
      this.createCommentReply = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#updateComment(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       *  - body (String): Required. 
       **/
      this.updateComment = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
      /** section: github
       *  pullRequests#deleteComment(msg, callback) -> null
       *      - msg (Object): Object that contains the parameters and their values to be sent to the server.
       *      - callback (Function): function to call when the request is finished with an error as first argument and result data as second argument.
       * 
       *  ##### Params on the `msg` object:
       * 
       *  - headers (Object): Optional. Key/ value pair of request headers to pass along with the HTTP request. Valid headers are: 'If-Modified-Since', 'If-None-Match', 'Cookie', 'User-Agent'.
       *  - user (String): Required. 
       *  - repo (String): Required. 
       *  - number (Number): Required. Validation rule: ` ^[0-9]+$ `.
       **/
      this.deleteComment = function(msg, block, callback) {
          var self = this;
          this.client.httpSend(msg, block, function(err, res) {
              if (err)
                  return self.sendError(err, null, msg, callback);
  
              var ret;
              try {
                  ret = res.data && JSON.parse(res.data);
              }
              catch (ex) {
                  if (callback)
                      callback(new error.InternalServerError(ex.message), res);
                  return;
              }
              
              if (!ret)
                  ret = {};
              if (!ret.meta)
                  ret.meta = {};
              ["x-ratelimit-limit", "x-ratelimit-remaining", "x-oauth-scopes", "link", "location", "last-modified", "etag", "status"].forEach(function(header) {
                  if (res.headers[header])
                      ret.meta[header] = res.headers[header];
              });
              
              if (callback)
                  callback(null, ret);
          });
      };
  
  }).call(pullRequests.pullRequests);
  