/*** * Copyright 2015 RAPP * * 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. * * Authors: Konstantinos Panayiotou * Contact: klpanagi@gmail.com * */ /** * @file * @description Random String Generator. Generates and cache unique id * strings. * * @author Konstantinos Panayiotou <klpanagi@gmail.com> * @copyright Rapp Project EU 2015 */ /** * @class RandStrGen * * @description Random String Generator class. Generate cached unique strings. * * @param {Number} [_length=5] - Generated strings length. * @param {Array} [_charsArray=] - Characters Array to use on string * generation * */ function RandStrGen (_length, _charsArray) { var charsArray_ = _charsArray || "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var stringLength_ = _length || 5; var cache_ = {}; this.setCharsArray = function ( _charsArray ){ charsArray_ = _charsArray || charsArray_; }; this.setLength = function ( _length ){ stringLength_ = _length || stringLength_; }; this.getCharsArray = function ( ){ return charsArray_; }; this.getLength = function ( ){ return stringLength_; }; this.addCached = function ( _key ){ cache_[ _key.toString() ] = true; //true means current string key exists. //console.log( 'String [%s] added into cached unique strings', _key); }; this.removeCached = function ( _key ) { if( cache_[ _key.toString() ] !== undefined ){ //remove string "_key" from cached random strings. delete cache_[ _key.toString() ]; //console.log( 'String [%s] removed from cached unique strings', _key); } }; this.getCache = function ( ){ return cache_; }; this.isUnique = function ( _key ){ if ( cache_[ _key.toString() ] === undefined ){ return true; } else{ return false; } }; } /** * @description Create a new random identity key (string) * * @function create * @memberof RandStrGen * * @returns {String} - The generated identity key. */ RandStrGen.prototype.create = function ( ){ // @lends RandStrGen var randStr = ''; for (var i=0; i<this.getLength(); i++) { var rnum = Math.floor(Math.random() * this.getCharsArray().length); randStr += this.getCharsArray().substring(rnum,rnum+1); } return randStr; }; /** * @description Create a new UNIQUE identity key (string). * * @function create * @memberof RandStrGen * * @returns {String} - The generated identity key. */ RandStrGen.prototype.createUnique = function ( ){ var randStr = ''; do{ randStr = this.create(); } while ( this.isUnique( randStr.toString() ) === false ); this.addCached( randStr ); return randStr; }; module.exports = RandStrGen;