Skip to content

Commit

Permalink
stop ignoring the lib directory
Browse files Browse the repository at this point in the history
  • Loading branch information
lholmquist committed Mar 6, 2017
1 parent e43ecba commit 5612456
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 2 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
node_modules/
/coverage
lib/
1 change: 0 additions & 1 deletion .npmignore

This file was deleted.

118 changes: 118 additions & 0 deletions lib/swapi-node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
var request = require('request'),
util = require('./util');

const BASE_URL = 'http://swapi.co/api/';

function sendRequest(options) {
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error || response.statusCode > 399) {
return reject({error: response.statusCode});
}

var jsonBody;

try {
jsonBody = JSON.parse(body);
} catch (e) {
return reject({error: 'JSON parse error'});
}

['nextPage', 'previousPage'].forEach((value) => {
jsonBody[value] = (() => {
return () => {
var url = jsonBody[(value.indexOf('next') > -1) ? 'next' : 'previous'];
if (url) {
return makeRequest(url);
}

return Promise.resolve(null);
};
})();
});

Object.keys(jsonBody).forEach((value) => {
if (typeof jsonBody[value] !== 'function') {
jsonBody['get' + util.capitaliseFirstLetter(value)] = (() => {
return () => {
if (!Array.isArray(jsonBody[value])) {
if (jsonBody[value].indexOf(BASE_URL) > -1) {
return makeRequest(jsonBody[value]);
}

return Promise.resolve(jsonBody[value]);
}

var p = jsonBody[value].map((val) => {
if (val.indexOf(BASE_URL) > -1) {
return makeRequest(val);
}
return Promise.resolve(val);
});

return Promise.all(p).then((v) => {
return v;
});
};
})();
}
});

return resolve(jsonBody);
});
});
}

function makeRequest(url) {
var options = {
url: (url.indexOf(BASE_URL) > -1) ? url : BASE_URL + url,
headers: {
'User-Agent': 'swapi-node',
'SWAPI-Node-Version': require('../package.json').version,
}
};

return sendRequest(options);
}

function parseOptions(options) {
var id, opts;

opts = options || {};

if (typeof opts === 'object') {
return opts;
} else {
return {
id: opts
};
}


}

module.exports = {
get (url) {
return makeRequest(url);
},
getPerson (options) {
var opts = parseOptions(options);
return makeRequest('people' + (opts.id ? '/' + opts.id : '/'));
},
getStarship (options) {
var opts = parseOptions(options);
return makeRequest('starship' + (opts.id ? '/' + opts.id : '/'));
},
getVehicle (options) {
var opts = parseOptions(options);
return makeRequest('vehicles' + (opts.id ? '/' + opts.id : '/'));
},
getFilm (options) {
var opts = parseOptions(options);
return makeRequest('films' + (opts.id ? '/' + opts.id : '/'));
},
getSpecies (options) {
var opts = parseOptions(options);
return makeRequest('species' + (opts.id ? '/' + opts.id : '/'));
}
};
5 changes: 5 additions & 0 deletions lib/util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = {
capitaliseFirstLetter (string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
};

0 comments on commit 5612456

Please sign in to comment.