Skip to content

Commit

Permalink
Merge pull request #2 from rspective/generate-many
Browse files Browse the repository at this point in the history
generate many unique codes
  • Loading branch information
tpindel committed Dec 2, 2015
2 parents fc4c9b3 + bf51079 commit a0703ae
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 8 deletions.
24 changes: 20 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Voucher Code Generator

Generate unique, hard to guess coupon codes.
Generate unique, hard to guess coupon, voucher codes.

This library originates from [Voucherify](http://www.voucherify.io/?utm_source=inbound&utm_medium=github&utm_campaign=js-voucher-code-generator-beta).

Expand All @@ -17,11 +17,27 @@ Include with require:
var voucher_codes = require('voucher-code-generator');
```

Generate codes of requested length:
Generate 5 codes, each 8 characters long:
```
voucher_codes.generate({
length: 8
length: 8,
count: 5
});
```

Sample result: `B5xdYJn1`
Sample result: `['FR6bwx1q', 'ByamOdWV', '7roFwfQs', 'rmWlwvll', 'pgih5eAB']`


### Testing

Install dependencies:

```
npm install
```

Run tests:

```
npm run test
```
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "voucher-code-generator",
"version": "0.0.1",
"version": "0.0.2",

"homepage": "http://www.voucherify.io/",
"description": "Voucher Code Generator",
Expand Down
17 changes: 15 additions & 2 deletions test/voucher_codes.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,29 @@ describe('voucher_codes', function(){

it('should generate code of request length', function(){
var length = 5;
var code = voucher_codes.generate({length: length});
var code = voucher_codes.generate({length: length})[0];

expect(code.length).toBe(length);
});

it('should generate code of default length', function(){
var default_length = 8;
var code = voucher_codes.generate({});
var code = voucher_codes.generate({})[0];

expect(code.length).toBe(default_length);
});

it('should generate 5 unique codes', function(){
var codes = voucher_codes.generate({
length: 2,
count: 5
});

expect(codes.length).toBe(5);
codes.forEach(function(code) {
expect(code.length).toBe(2);
expect(codes.indexOf(code)).toBe(codes.lastIndexOf(code)); // check uniqueness
})
})

});
15 changes: 14 additions & 1 deletion voucher_codes.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function randomElem(arr) {
return arr[randomInt(0, arr.length-1)];
}

function generate(config) {
function generateOne(config) {
var length = config.length || 8;
var charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var code = "";
Expand All @@ -18,6 +18,19 @@ function generate(config) {
return code;
}

function generate(config) {
var count = config.count || 1;
var codes = {};
while (count > 0) {
var code = generateOne(config);
if (codes[code] === undefined) {
codes[code] = true;
count--;
}
}
return Object.keys(codes);
}

module.exports = {
generate: generate
};

0 comments on commit a0703ae

Please sign in to comment.