UNPKG

zurvan

Version:

A library for simulating time in Node.js

87 lines (69 loc) 1.79 kB
'use strict'; var TypeChecks = require('./TypeChecks'); var SequenceGenerator = require('./SequenceGenerator'); function UIDManager() { this._sequenceGenerator = new SequenceGenerator(); this._issuedUids = {}; } function serialize(value) { var serialized; try { serialized = JSON.stringify(value); if (!serialized) { serialized = value.toString(); } } catch (err) { serialized = 'not easily serializable: <<' + value + '>>'; } return serialized; } function failure(reason) { return { passed: false, failureReason: reason }; } function success() { return { passed: true }; } UIDManager.prototype.setUp = function(throwOnValidationFailure, uidUser) { this._throwOnValidationFailure = throwOnValidationFailure; this._uidUser = uidUser; }; UIDManager.prototype.isAcceptableUidImpl = function(uid) { if (!TypeChecks.isObject(uid)) { return failure(serialize(uid) + ' is not an object'); } if (this._issuedUids[uid.uid] !== uid) { return failure(serialize(uid) + ' was not issued'); } return success(); }; UIDManager.prototype.isAcceptableUid = function(uid) { var uidValidation = this.isAcceptableUidImpl(uid); if (!uidValidation.passed) { if (this._throwOnValidationFailure) { throw new Error( 'Invalid UID during clearing ' + this._uidUser + '. Reason: ' + uidValidation.failureReason ); } return false; } return true; }; UIDManager.prototype.getUid = function() { var sequenceNumber = this._sequenceGenerator.generate(); var uid = { uid: sequenceNumber }; uid.ref = uid; this._issuedUids[uid.uid] = uid; return uid; }; UIDManager.prototype.clear = function() { this._issuedUids = {}; }; module.exports = UIDManager;