-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgithub.coffee
65 lines (54 loc) · 2.3 KB
/
github.coffee
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
request = require "request"
async = require "async"
HEADERS = {"User-Agent": "gitscore"}
authedRequest = (opts, cb) ->
if process.env.GITHUB_API_TOKEN
request(opts, cb).auth(process.env.GITHUB_API_TOKEN)
else
request(opts, cb)
class Github
@user: (username, callback) ->
authedRequest {url: "https://api.github.com/users/#{username}", headers: HEADERS}, (error, response, body) ->
error = "Unable to lookup user #{username}" if !error and response.statusCode != 200
responseContent = JSON.parse(body)
error = "#{username} is an organization, gitscore only supports users." if responseContent.type == "Organization"
callback(error, responseContent, response.headers["x-ratelimit-remaining"]) if callback
@userRepos: (username, callback) ->
authedRequest {url: "https://api.github.com/users/#{username}/repos", headers: HEADERS}, (error, response, body) ->
error = "Unable to lookup user #{username}" if !error and response.statusCode != 200
callback(error, JSON.parse(body), response.headers["x-ratelimit-remaining"]) if callback
@userGists: (username, callback) ->
authedRequest {url: "https://api.github.com/users/#{username}/gists", headers: HEADERS}, (error, response, body) ->
error = "Unable to lookup user #{username}" if !error and response.statusCode != 200
callback(error, JSON.parse(body), response.headers["x-ratelimit-remaining"]) if callback
@userCombined: (username, callback) ->
userData = {}
throttle = 0
async.auto
user: (callback) =>
@user username, (error, response, throttle_val) ->
if error
callback(error)
return
throttle = throttle_val
userData.user = response
callback()
repos: (callback) =>
@userRepos username, (error, response, throttle_val) ->
if error
callback(error)
return
throttle = throttle_val
userData.repos = response
callback()
gists: (callback) =>
@userGists username, (error, response, throttle_val) ->
if error
callback(error)
return
throttle = throttle_val
userData.gists = response
callback()
, (err) ->
callback err, userData, throttle
module.exports = Github