var _ = require('../../lib/utils');
/**
* Perform an elasticsearch [indices.open](http://www.elasticsearch.org/guide/reference/api/admin-indices-open-close/) request
*
* @for Client
* @method indices.open
* @param {Object} params - An object with parameters used to carry out this action
* @param {Date|Number} params.timeout - Explicit operation timeout
* @param {Date|Number} params.master_timeout - Specify timeout for connection to master
*/
function doIndicesOpen(params) {
var request = {}
, url = {}
, query = {};
params = params || {};
request.method = 'POST';
// find the url's params
if (typeof params.index !== 'object' && typeof params.index !== 'undefined') {
url.index = '' + params.index;
} else {
throw new TypeError('Invalid index:' + params.index + ' should be a string.');
}
// build the url
if (url.hasOwnProperty('index')) {
request.url = '/' + url.index + '/_open';
}
else {
throw new TypeError('Unable to build a url with those params. Supply at least index');
}
// build the query string
if (params.hasOwnProperty('timeout')) {
if (params.timeout instanceof Date) {
query.timeout = params.timeout.getTime();
} else if (_.isNumeric(params.timeout)) {
query.timeout = params.timeout;
} else {
throw new TypeError('Invalid timeout:' + params.timeout + ' should be be some sort of time.');
}
}
if (params.hasOwnProperty('master_timeout')) {
if (params.master_timeout instanceof Date) {
query.master_timeout = params.master_timeout.getTime();
} else if (_.isNumeric(params.master_timeout)) {
query.master_timeout = params.master_timeout;
} else {
throw new TypeError('Invalid master_timeout:' + params.master_timeout + ' should be be some sort of time.');
}
}
request.url = request.url + _.makeQueryString(query);
return this.client.request(request);
}
module.exports = doIndicesOpen;