All files / src/github index.js

100% Statements 20/20
100% Branches 15/15
100% Functions 4/4
100% Lines 20/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118                                                        10x 10x 10x 1x   9x     9x     9x 9x                           4x 1x 1x   4x                                       4x 1x 1x   4x                                       4x 1x 1x   4x                      
import isFunction from 'lodash.isfunction';
import Core from '../core/core';
 
/**
 * @class Github
 * @description Github class
 * @example
 * const github = new Github({
 *  accessToken: 'your-access-token',
 * });
 *
 * github.get('some-github-route').then((data) => {
 *  console.log(data);
 * });
 */
class Github extends Core {
 
  /**
   * @constructs Github
   * @description Constructs an instance of Github.
   *
   * @param {object} config - Config of class.
   * @param {string} config.accessToken - accessToken of Github.
   * @param {string} [config.userAgent] - User-Agent header for requests.
   * @param {object} [options] - Options of class.
   *
   */
  constructor(config = {}, options = {}) {
    super(options);
    this.name = 'github';
    if (!config.accessToken) {
      this.checkValidConfig(['accessToken'], config);
    }
    this.options = {
      access_token: config.accessToken,
    };
    this.headers = {
      'User-Agent': config.userAgent ? config.userAgent : 'node-social-api',
    };
    this.url = 'https://api.github.com';
    this.baseApiUrl = this.url;
  }
 
  /**
   * @memberof Github
   * @function get
   * @description Make a get request to Github api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  get(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'GET',
      json: true,
      headers: this.headers,
      uri: `${this.baseApiUrl}/${url}`,
      qs: Object.assign(this.options, options),
    }, callback);
  }
 
  /**
   * @memberof Github
   * @function post
   * @description Make a post request to Github api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  post(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'POST',
      json: true,
      headers: this.headers,
      uri: `${this.baseApiUrl}/${url}`,
      form: Object.assign(this.options, options),
    }, callback);
  }
 
  /**
   * @memberof Github
   * @function delete
   * @description Make a delete request to github api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  delete(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'DELETE',
      json: true,
      headers: this.headers,
      uri: `${this.baseApiUrl}/${url}`,
      qs: Object.assign(this.options, options),
    }, callback);
  }
}
 
export default Github;