UNPKG

giantbomb

Version:

A simple, consistent wrapper for the Giant Bomb API.

108 lines (97 loc) 2.82 kB
// Generated by CoffeeScript 1.12.7 (function() { var api, buildDetailFunc, buildListFunc, buildResourceMethods, buildResources, buildSearchFunc, buildSearchResource, resources; api = require('./api'); resources = require('./resources'); buildDetailFunc = function(api, resource) { return function() { var cb, config, resourceId, resourcePath; if (arguments.length === 2) { resourceId = arguments[0], cb = arguments[1]; config = {}; } else { resourceId = arguments[0], config = arguments[1], cb = arguments[2]; } resourcePath = resource.singular + "/" + resourceId; return api.sendDetailRequest(resourcePath, config, cb); }; }; buildListFunc = function(api, resource) { return function() { var cb, config; if (arguments.length === 1) { cb = arguments[0]; config = {}; } else { config = arguments[0], cb = arguments[1]; } if (resource.sortBy && !config.sortBy) { config.sortBy = resource.sortBy; config.sortDir = resource.sortDir; } return api.sendListRequest(resource.plural, config, cb); }; }; buildSearchFunc = function(listFunc, resource) { return function() { var cb, config, q; if (arguments.length === 2) { q = arguments[0], cb = arguments[1]; config = {}; } else { q = arguments[0], config = arguments[1], cb = arguments[2]; } config.filters || (config.filters = []); config.filters.push({ field: resource.searchBy, value: q }); return listFunc(config, cb); }; }; buildResourceMethods = function(api, resource) { var output; output = { get: buildDetailFunc(api, resource), list: buildListFunc(api, resource) }; if (resource.searchBy) { output.search = buildSearchFunc(output.list, resource); } return output; }; buildSearchResource = function(api) { return function(q, config, cb) { var qs; qs = { query: q, limit: config.limit || 10, page: config.page || 1 }; if (config.resources) { qs.resources = config.resources.join(','); } if (config.fields) { qs.field_list = config.fields.join(','); } return api.sendRequest({ url: 'search', qs: qs }, cb); }; }; buildResources = function(api, resources) { var methods, name, resource; methods = { search: buildSearchResource(api) }; for (name in resources) { resource = resources[name]; methods[name] = buildResourceMethods(api, resource); } return methods; }; module.exports = function(apiKey) { return buildResources(api(apiKey), resources); }; }).call(this);