octo.js | |
---|---|
/*!
* octo.js
* Copyright (c) 2012 Justin Palmer <justin@labratrevenge.com>
* MIT Licensed
*/
(function() {
if(typeof superagent === 'undefined' && require) {
superagent = require('superagent')
btoa = require('btoa')
}
var octo = {} | |
The main entry point for interacting with the GitHub API v3. | octo.api = function() {
var host = 'https://api.github.com',
agent = superagent,
limit,
remaining,
username,
password,
token
function api() {}
function pager(method, path, params) {
var page = 1,
perpage = 30,
hasnext = false,
hasprev = false,
headers = {},
noop = function() {},
events = {
success: noop,
error: noop,
end: noop
}
var request = function() {
var req = superagent[method](api.host() + path)
var complete = function(res) {
limit = ~~res.header['x-ratelimit-limit']
remaining = ~~res.header['x-ratelimit-remaining']
var link = res.header['link']
hasnext = (/rel=\"next\"/i).test(link)
hasprev = (/rel=\"next\"/).test(link)
events.end.call(this, res)
if(res.ok) events.success.call(this, res)
if(res.error) events.error.call(this, res)
}
if(token) req.set('Authorization', 'token ' + token)
if(!token && username && password)
req.set('Authorization', 'Basic ' + btoa(username + ':' + password))
req
.set(headers)
.query({page: page, per_page: perpage})
.send(params)
.end(complete)
} |
PagingEach subsequent request for additional pages can easily share the same callbacks and properties. | function pager() { request() } |
Sets or gets the current page Returns the pager | pager.page = function(v) {
if(!arguments.length) return page
page = v
return pager
} |
Sets or gets the items returned per page Returns the pager | pager.perpage = function(v) {
if(!arguments.length) return perpage
perpage = v
return pager
} |
Increments the page number by one and fires a requests for the next page Returns the pager | pager.next = function() {
page += 1
request()
return pager
} |
Decrements the page number by one and fires a request for the previous page Returns the pager | pager.prev = function() {
page -= 1
request()
return pager
} |
Determines if the server is reporting a next page of results | pager.hasnext = function() {
return hasnext;
} |
Determines if the server is reporting a previous page of results | pager.hasprev = function() {
return hasprev;
} |
Registers a callback for an event Supported events:
Returns a pager | pager.on = function(event, callback) {
events[event] = callback
return pager
}
pager.set = function(key, val) {
headers[key] = val
return pager
}
return pager
} |
Sets or gets the GitHub API host Uses https://api.github.com by default
Returns the api | api.host = function(val) {
if(!arguments.length) return host
host = val
return api
} |
Initializes a GET request to GitHub API v3 Returns a pager | api.get = function(path, params) {
return new pager('get', path)
} |
Initializes a POST request to GitHub API v3 Returns a pager | api.post = function(path, params) {
return new pager('post', path, params)
} |
Initializes a PATCH request to GitHub API v3 Returns a pager | api.patch = function(path, params) {
return new pager('patch', path, params)
} |
Initializes a PUT request to GitHub API v3 Returns a pager | api.put = function(path, params) {
return new pager('put', path, params)
} |
Initializes a DELETE request to GitHub API v3 Returns a pager | api.delete = function(path, params) {
return new pager('delete', path, params)
} |
Returns the API rate limit as reported by GitHub | api.limit = function() {
return limit
} |
Returns the number of requests that can be made before the | api.remaining = function() {
return remaining;
} |
Sets or gets the Basic Auth username Returns the api | api.username = function(v) {
if(!arguments.length) return username;
username = v
return api
} |
Sets or gets the Basic Auth password Returns the api | api.password = function(v) {
if(!arguments.length) return password;
password = v
return api
} |
Sets or gets an OAuth two token. You can temporarily use Basic Auth to create a GitHub Authorization which will grant you an OAuth token. You can use this token in your scripts Returns the api | api.token = function(v) {
if(!arguments.length) return token;
token = v
return api
}
return api
}
if(typeof module !== 'undefined')
module.exports = octo
else
window.octo = octo
}).call(this)
|