UNPKG

basho-riak-client-covs

Version:

Basho's officially supported NodeJS client for Riak

185 lines (164 loc) 5.49 kB
/** * * Copyright 2014-present Basho Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; var CommandBase = require('../commandbase'); var inherits = require('util').inherits; var Joi = require('joi'); var RpbYokozunaIndex = require('../../protobuf/riakprotobuf').getProtoFor('RpbYokozunaIndex'); /** * Provides the (Yokozuna) StoreIndex command. * @module YZ */ /** * Command used to store a Yokozuna index. * * As a convenience, a builder class is provided: * * var store = StoreIndex.Builder() * .withIndexName('index_name') * .withSchemaName('my_schema') * .withCallback(callback) * .build(); * * See {{#crossLink "StoreIndex.Builder"}}StoreIndex.Builder{{/crossLink}} * * @class StoreIndex * @constructor * @param {Object} options The options for this command * @param {String} options.indexName The name of the index. * @param {String} [options.schemaName=_yz_default] The name of the schema for this index. * @param {Number} [options.timeout] Set a timeout for this operation. * @param {Number} [options.nVal] The number of replicas. * @param {Function} callback The callback to be executed when the operation completes. * @param {String} callback.err An error message. Will be null if no error. * @param {Boolean} callback.response The operation either succeeds or errors. This will be true. * @param {Object} callback.data additional error data. Will be null if no error. * @extends CommandBase */ function StoreIndex(options, callback) { CommandBase.call(this, 'RpbYokozunaIndexPutReq' , 'RpbPutResp', callback); this.validateOptions(options, schema); } inherits(StoreIndex, CommandBase); StoreIndex.prototype.constructPbRequest = function() { var protobuf = this.getPbReqBuilder(); var pbIndex = new RpbYokozunaIndex(); pbIndex.setName(new Buffer(this.options.indexName)); pbIndex.setNVal(this.options.nVal > 0 ? this.options.nVal : null ); if (this.options.schemaName) { pbIndex.setSchema(new Buffer(this.options.schemaName)); } protobuf.index = pbIndex; if (this.options.timeout) { protobuf.setTimeout(this.options.timeout); } return protobuf; }; StoreIndex.prototype.onSuccess = function(RpbPutResp) { // RpbPutResp is simply null (no body) this._callback(null, true); return true; }; var schema = Joi.object().keys({ indexName: Joi.string().required(), schemaName: Joi.string().default(null).optional(), timeout: Joi.number().default(null).optional(), nVal: Joi.number().optional() }); /** * A builder for constructing StoreIndex instances. * * Rather than having to manually construct the __options__ and instantiating * a StoreIndex directly, this builder may be used. * * var store = StoreIndex.Builder() * .withIndexName('index_name') * .withSchemaName('my_schema') * .withCallback(callback) * .build(); * * @class StoreIndex.Builder * @constructor */ function Builder(){} Builder.prototype = { /** * The name of the index to store. * @method withIndexName * @param {String} indexName the name of the index * @chainable */ withIndexName : function(indexName) { this.indexName = indexName; return this; }, /** * The name of the schema to use with this index. * If not provided the default '_yz_default' will be used. * @method withSchemaName * @param {String} schemaName the name of the schema to use. * @chainable */ withSchemaName : function(schemaName) { this.schemaName = schemaName; return this; }, /** * Set a timeout for this operation. * @method withTimeout * @param {Number} timeout a timeout in milliseconds. * @chainable */ withTimeout : function(timeout) { this.timeout = timeout; return this; }, /** * Set the nVal. * @method withNVal * @param {Number} nVal the number of replicas. * @chainable */ withNVal : function(nVal) { this.nVal = nVal; return this; }, /** * Set the callback to be executed when the operation completes. * @method withCallback * @param {Function} callback the callback to execute * @param {String} callback.err An error message * @param {Boolean} callback.response operation either succeeds or errors. This will be true. * @chainable */ withCallback : function(callback) { this.callback = callback; return this; }, /** * Construct a StoreIndex instance. * @method build * @return {StoreIndex} */ build : function() { var cb = this.callback; delete this.callback; return new StoreIndex(this, cb); } }; module.exports = StoreIndex; module.exports.Builder = Builder;