giantbomb
Version:
A simple, consistent wrapper for the Giant Bomb API.
108 lines (97 loc) • 2.82 kB
JavaScript
// 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);