Skip to content

Commit

Permalink
follow eslint rules
Browse files Browse the repository at this point in the history
  • Loading branch information
steve-232 committed Oct 16, 2020
1 parent 286ec6b commit 96444f4
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 60 deletions.
71 changes: 36 additions & 35 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,51 +1,52 @@
'use strict'
function getRandomNumber(limit) {
return Math.floor(Math.random() * limit).toString();
}

function filterSymbols(excludeSymbols, group) {
let newGroup = group;
excludeSymbols.forEach((symbol) => {
newGroup = newGroup.replace(symbol, '');
});

return newGroup;
}

function createId(availableChars, idLength) {
let id = '';

function generateUniqueId ({
for (let i = 0; i < idLength; i += 1) {
id += availableChars[getRandomNumber(availableChars.length)];
}

return id;
}

function generateUniqueId({
length = 20,
useLetters = true,
useNumbers = true,
includeSymbols = [],
excludeSymbols = []
excludeSymbols = [],
} = {}) {
let letters = 'abcdefghijklmnopqrstuvwxyz'
let numbers = '0123456789'
let availableChars = []
let lettersArr = []
let numbersArr = []
let letters = 'abcdefghijklmnopqrstuvwxyz';
let numbers = '0123456789';
let availableChars = [];
let lettersArr = [];
let numbersArr = [];

if (useLetters) {
if (excludeSymbols.length) letters = filterSymbols(excludeSymbols, letters)
lettersArr = letters.split('')
if (excludeSymbols.length) letters = filterSymbols(excludeSymbols, letters);
lettersArr = letters.split('');
}

if (useNumbers) {
if (excludeSymbols.length) numbers = filterSymbols(excludeSymbols, numbers)
numbersArr = numbers.split('')
if (excludeSymbols.length) numbers = filterSymbols(excludeSymbols, numbers);
numbersArr = numbers.split('');
}

availableChars = [...lettersArr, ...numbersArr, ...includeSymbols]

return createId(availableChars, length)
}

function createId (availableChars, idLength) {
let id = ''

for (let i = 0; i < idLength; i++) {
id += availableChars[getRandomNumber(availableChars.length)]
}

return id
}

function filterSymbols (excludeSymbols, group) {
excludeSymbols.forEach(symbol => (group = group.replace(symbol, '')))

return group
}
availableChars = [...lettersArr, ...numbersArr, ...includeSymbols];

function getRandomNumber (limit) {
return Math.floor(Math.random() * limit).toString()
return createId(availableChars, length);
}

module.exports = generateUniqueId
module.exports = generateUniqueId;
52 changes: 27 additions & 25 deletions index.test.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,44 @@
const generateUniqueID = require('./index')
const generateUniqueID = require('./index');

test('default behavior', () => {
const id1 = generateUniqueID()
const id2 = generateUniqueID()
const id1 = generateUniqueID();
const id2 = generateUniqueID();

expect(id1.length).toBe(20)
expect(id1).not.toMatch(id2)
})
expect(id1.length).toBe(20);
expect(id1).not.toMatch(id2);
});

test('use only letters', () => {
const id = generateUniqueID({ useNumbers: false, length: 50 })
const id = generateUniqueID({ useNumbers: false, length: 50 });

expect(id.match(/[0-9]/g)).toBe(null)
expect(id.length).toBe(50)
})
expect(id.match(/[0-9]/g)).toBe(null);
expect(id.length).toBe(50);
});

test('use only numbers', () => {
const id = generateUniqueID({ useLetters: false, length: 30 })
const id = generateUniqueID({ useLetters: false, length: 30 });

expect(id.match(/[a-z]/g)).toBe(null)
expect(id.length).toBe(30)
})
expect(id.match(/[a-z]/g)).toBe(null);
expect(id.length).toBe(30);
});

test('include symbols', () => {
let id = generateUniqueID({ includeSymbols: ['@', '#'], length: 100 })
let id = generateUniqueID({ includeSymbols: ['@', '#'], length: 100 });

expect(((/(@|#)/g)).test(id)).toBe(true)
expect(((/(@|#)/g)).test(id)).toBe(true);

id = generateUniqueID({ includeSymbols: ['@', '#'], length: 10, useLetters: false, useNumbers: false })
id = generateUniqueID({
includeSymbols: ['@', '#'], length: 10, useLetters: false, useNumbers: false,
});

expect(id.match(/[a-z0-9]/g)).toBe(null)
expect(id.includes('@')).toBe(true)
expect(id.includes('#')).toBe(true)
expect(id.length).toBe(10)
})
expect(id.match(/[a-z0-9]/g)).toBe(null);
expect(id.includes('@')).toBe(true);
expect(id.includes('#')).toBe(true);
expect(id.length).toBe(10);
});

test('exclude symbols', () => {
const id = generateUniqueID({ useLetters: false, excludeSymbols: ['0', '1', '2', '3', '4', '5'] })
const id = generateUniqueID({ useLetters: false, excludeSymbols: ['0', '1', '2', '3', '4', '5'] });

expect(id.match(/[0-5]/g)).toBe(null)
})
expect(id.match(/[0-5]/g)).toBe(null);
});

0 comments on commit 96444f4

Please sign in to comment.