All files / src/github index.js

100% Statements 19/19
100% Branches 13/13
100% Functions 4/4
100% Lines 19/19
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                                                      8x 8x 8x 1x   7x     7x 7x                           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 {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.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,
      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,
      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,
      uri: `${this.baseApiUrl}/${url}`,
      qs: Object.assign(this.options, options),
    }, callback);
  }
}
 
export default Github;