UNPKG

giantbomb

Version:

A simple, consistent wrapper for the Giant Bomb API.

104 lines (94 loc) 2.64 kB
// Generated by CoffeeScript 1.12.7 (function() { var _, buildDetailQuery, buildListQuery, formatFilterObject, httpDefaults, request, util; util = require('util'); request = require('request'); _ = require('lodash'); httpDefaults = { baseUrl: 'https://www.giantbomb.com/api', json: true, headers: { 'User-Agent': 'Node.js client - npmjs.com/package/giantbomb' }, qs: { api_key: '', format: 'json' }, qsStringifyOptions: { encode: false } }; formatFilterObject = function(filter, i) { var end, start; if ((filter != null ? filter.value : void 0) != null) { if (!_.isArray(filter.value)) { filter.value = [filter.value]; } return util.format('%s:%s', filter.field, filter.value.join('|')); } if (filter.start && filter.end) { start = filter.start.toISOString(); end = filter.end.toISOString(); return util.format('%s:%s|%s', filter.field, start, end); } }; buildDetailQuery = function(config) { var qs; qs = {}; if (config.fields) { qs.field_list = config.fields.join(','); } return qs; }; buildListQuery = function(config) { var filters, qs; qs = { limit: config.perPage || 10, offset: 0 }; if (config.fields) { qs.field_list = config.fields.join(','); } if (config.page) { qs.offset = (config.page - 1) * qs.limit; } if (config.sortBy) { qs.sort = config.sortBy + ':' + config.sortDir || 'asc'; } if (config.filters) { filters = config.filters.map(formatFilterObject); qs.filter = filters.join(','); } return qs; }; module.exports = function(apiKey) { return { sendRequest: function(opts, cb) { opts = _.defaultsDeep(opts, httpDefaults); opts.qs.api_key = apiKey; request.debug = process.env.NODE_DEBUG === 'giantbomb'; return request(opts, function(err, res, body) { var perPage, total; if (body.number_of_total_results) { total = body.number_of_total_results; perPage = body.limit; body.number_of_total_pages = Math.ceil(total / perPage); } return cb(err, res, body); }); }, sendListRequest: function(url, config, cb) { return this.sendRequest({ url: url, qs: buildListQuery(config) }, cb); }, sendDetailRequest: function(url, config, cb) { return this.sendRequest({ url: url, qs: buildDetailQuery(config) }, cb); } }; }; }).call(this);