Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions Generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function parseId(id) {
}
}

function generateId(letters, numLetters, numbers, numNumbers) {
function generateId(letters, numLetters, numbers, numNumbers, delimiter) {
if (numLetters > 0 && numNumbers <= 0) {
var nextLetters = incrementLetters(letters);
var id = fillLetters(nextLetters, numLetters);
Expand All @@ -89,7 +89,7 @@ function generateId(letters, numLetters, numbers, numNumbers) {
nextLetters = incrementLetters(letters);
}
var id = fillLetters(nextLetters, numLetters)
+ " - " + fillZeros(nextNumber, numNumbers);
+ delimiter + fillZeros(nextNumber, numNumbers);
return {id: id, letters: nextLetters, numbers: nextNumber};
}
}
Expand All @@ -100,6 +100,11 @@ function int(_var, _default) {
return isNaN(_int) ? _default : _int;
}

function delimter(_var, _default) {
if (typeof(_var) === "undefined") return _default;
return /^\s|[\/\-:,.%"'+=&*#@~!;^`]|\s/.test(_var) ? _var : _default;
}

var Generator = (function() {
function Generator(options) {
options = options || {};
Expand All @@ -120,6 +125,7 @@ var Generator = (function() {
this.keys[key].options = {};
this.keys[key].options.digits = int(options.digits, 6);
this.keys[key].options.letters = int(options.letters, 3);
this.keys[key].options.delimiter = delimter(options.delimiter, " - ");
this.keys[key].options.store = typeof(options.store) === "function"
? options.store : function() {}
this.keys[key].options.store_freq = int(options.store_freq, 1);
Expand Down Expand Up @@ -155,7 +161,7 @@ var Generator = (function() {
this.add(key);
}
var _new = generateId(this.keys[key].letters, this.keys[key].options.letters,
this.keys[key].numbers, this.keys[key].options.digits);
this.keys[key].numbers, this.keys[key].options.digits, this.keys[key].options.delimiter);
this.keys[key].letters = _new.letters;
this.keys[key].numbers = _new.numbers;
this.keys[key].generatedIds.push(_new.id);
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ $ npm install sequential-ids --save
var sequential = require("sequential-ids");

var generator = new sequential.Generator({
digits: 6, letters: 3,
digits: 6, letters: 3, delimiter: "/",
store: function(key, ids) {
db.store(key, ids[ids.length - 1]);
},
Expand All @@ -51,17 +51,17 @@ generator.add('otherKey', {
});

generator.start();
var new_id_1 = generator.generate(); // => AAB - 001
var new_id_2 = generator.generate(); // => AAB - 002
var new_id_1 = generator.generate(); // => AAB / 000001
var new_id_2 = generator.generate(); // => AAB / 000002
// ...
var other_id_1 = generator.generate('otherKey'); // => A - 01
var other_id_1 = generator.generate('otherKey'); // => A 01
var other_id_2 = generator.generate('otherKey'); // => A - 02
// ...

// possibly in another file
var accessor = new sequential.Accessor();
accessor.next(function(err, id) {
console.log("new id: %s", id); // => AAB - 003
console.log("new id: %s", id); // => AAB / 000003
});

accessor.next('otherKey',function(err, id) {
Expand Down Expand Up @@ -117,6 +117,9 @@ accessor.next('otherKey',function(err, id) {
* no. of letters to use.
* assigning `0` (zero) lets you ignore the letters part
* Defaults to `3`.
* `delimiter`:
* delimiter to use between digits and letters.
* Defaults to `-`.
* `store`:
* a function that will be called to store the IDs on disk for
persistence.
Expand Down