reduced lib size and complexity

This commit is contained in:
Dan Zajdband
2012-08-20 13:06:11 -03:00
parent 4145e42d8f
commit ec61902af1
3 changed files with 59 additions and 101 deletions

View File

@@ -1,9 +1,16 @@
/*
* Module dependencies
*/
var request = require('superagent')
, endpoints = require('./endpoints.json');
/*
* Exports the constructor
*/
module.exports = function MovieDB(api_key){
var MovieDB = module.exports = function(api_key){
if(api_key) this.api_key = api_key;
else throw new Error('Bad api key');
};
@@ -12,10 +19,58 @@ module.exports = function MovieDB(api_key){
* API auth
*/
require('./auth');
MovieDB.prototype.requestToken = function(fn){
var self = this;
request
.get(endpoints.base_url + endpoints.authentication.requestToken)
.send({'api_key': self.api_key})
.set('Accept', 'application/json')
.end(function(res){
if(res.ok) self.token = res.body;
else throw new Error('Invalid authentication');
fn();
});
};
/*
* API request
* Generate API methods
*/
require('./request');
Object.keys(endpoints.methods).forEach(function(method){
var met = endpoints.methods[method];
Object.keys(met).forEach(function(m){
MovieDB.prototype[method + m] = function(params, fn){
var self = this;
if("function" == typeof params) {
fn = params;
params = {};
}
if(!this.token || Date.now() > +new Date(this.token.expires_at)) {
this.requestToken(function(){
execMethod.call(self, met[m].method, params, met[m].resource, fn);
});
} else {
execMethod.call(this, met[m].method, params, met[m].resource, fn);
}
};
});
});
var execMethod = function(type, params, endpoint, fn){
params = params || {};
endpoint = endpoint.replace(':id', params.id);
request(type, endpoints.base_url + endpoint)
.query({api_key : this.api_key})
.send(params)
.set('Accept', 'application/json')
.end(function(res){
if(res.ok) fn(null, res.body);
else if(res.body && res.body.status_message) fn(new Error(res.body.status_message), null);
else fn(res.error, null);
});
};