openclient
Version:
An opinionated client for RESTful APIs (particularly OpenStack's).
91 lines (66 loc) • 2.42 kB
JavaScript
var base = require("../../client/base"),
error = require("../../client/error");
var ContainerManager = base.Manager.extend({
namespace: "containers",
init: function (client) {
this._super(client);
this.method_map.create = "put";
},
_safe_id: function (id) {
return encodeURIComponent(id);
},
prepare_params: function (params, url, plural_or_singular) {
params.result_key = false;
return this._super(params, url, plural_or_singular);
},
prepare_namespace: function (params) {
return params.manager_method === "create" ? params.id : "";
},
create: function (params, callback) {
var manager = this,
success = params.success,
error = params.error;
if (params.success) delete params.success;
if (params.error) delete params.error;
params.id = this._safe_id(params.name || params.data.name);
delete params.data;
this._super(params, function (err, result, xhr) {
if (err) return manager.safe_complete(err, null, xhr, {error: error}, callback);
manager.get({id: params.id,}, function (err, result, xhr) {
if (err) return manager.safe_complete(err, null, xhr, {error: error}, callback);
manager.safe_complete(null, result, xhr, {success: success}, callback);
});
});
},
get: function (params, callback) {
params.http_method = "head";
params.id = params.id || params.data.id;
params.parseHeaders = function (headers) {
var result = {};
Object.keys(headers).forEach(function (key) {
if (key.indexOf("x-container-") === 0) {
result[key.replace("x-container-", "")] = headers[key];
}
if (result['object-count']) result.count = parseInt(result['object-count'], 10);
if (result['bytes-used']) result.bytes = parseInt(result['bytes-used'], 10);
});
result.id = params.id;
result.name = decodeURIComponent(params.id);
return result;
};
this._super(params, callback);
},
all: function (params, callback) {
var manager = this;
params.query = params.query || {};
if (!params.query.format) params.query.format = "json";
params.parseResult = function (results) {
results.forEach(function (result) {
result.id = manager._safe_id(result.name);
});
return results;
};
this._super(params, callback);
}
});
module.exports = ContainerManager;