Source: common/randStringGen.js

/***
 * 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;