From 51ec3946aa9644259c54e346bc58756543f679dd Mon Sep 17 00:00:00 2001 From: Luiz Strobelt Date: Sun, 4 Oct 2020 17:09:34 -0300 Subject: Check if seed is a number or array before seeding faker.random --- lib/random.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index 5afd27e2..f959440d 100644 --- a/lib/random.js +++ b/lib/random.js @@ -5,15 +5,14 @@ var mersenne = require('../vendor/mersenne'); * @namespace faker.random */ function Random (faker, seed) { - // Use a user provided seed if it exists - if (seed) { - if (Array.isArray(seed) && seed.length) { - mersenne.seed_array(seed); - } - else { - mersenne.seed(seed); - } + // Use a user provided seed if it is an array or number + if (Array.isArray(seed) && seed.length) { + mersenne.seed_array(seed); } + else if(!isNaN(seed)) { + mersenne.seed(seed); + } + /** * returns a single random number based on a max number or range * -- cgit v1.2.3 From e7ccc03441383ba48f2ce42b26ae1da32f8bace0 Mon Sep 17 00:00:00 2001 From: Daniel Lipowicz Date: Tue, 1 Dec 2020 15:51:59 +0100 Subject: Implement issue 1062; Add random.aplha functionality to blacklist some characters --- lib/random.js | 74 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 19 deletions(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index 5afd27e2..63912298 100644 --- a/lib/random.js +++ b/lib/random.js @@ -1,5 +1,20 @@ var mersenne = require('../vendor/mersenne'); +/** + * Method to reduce array of characters + * @param arr existing array of characters + * @param values array of characters which should be removed + * @return {*} new array without banned characters + */ +var arrayRemove = function (arr, values) { + values.forEach(function(value){ + arr = arr.filter(function(ele){ + return ele !== value; + }); + }); + return arr; +}; + /** * * @namespace faker.random @@ -54,7 +69,7 @@ function Random (faker, seed) { return randomNumber; - } + }; /** * returns a single random floating-point number based on a max number or range @@ -77,8 +92,8 @@ function Random (faker, seed) { opts.precision = 0.01; } return faker.random.number(opts); - } - + }; + /** * takes an array and returns a random element of the array * @@ -89,7 +104,7 @@ function Random (faker, seed) { array = array || ["a", "b", "c"]; var r = faker.random.number({ max: array.length - 1 }); return array[r]; - } + }; /** * takes an array and returns a subset with random elements of the array @@ -117,7 +132,7 @@ function Random (faker, seed) { } return arrayCopy; - } + }; /** * takes an object and returns the randomly key or value @@ -132,7 +147,7 @@ function Random (faker, seed) { var key = faker.random.arrayElement(array); return field === "key" ? key : object[key]; - } + }; /** * uuid @@ -147,7 +162,7 @@ function Random (faker, seed) { return value.toString(16); }; return RFC4122_TEMPLATE.replace(/[xy]/g, replacePlaceholders); - } + }; /** * boolean @@ -156,7 +171,7 @@ function Random (faker, seed) { */ this.boolean = function () { return !!faker.random.number(1) - } + }; // TODO: have ability to return specific type of word? As in: noun, adjective, verb, etc /** @@ -204,7 +219,7 @@ function Random (faker, seed) { var randomWordMethod = faker.random.arrayElement(wordMethods); var result = faker.fake('{{' + randomWordMethod + '}}'); return faker.random.arrayElement(result.split(' ')); - } + }; /** * randomWords @@ -221,7 +236,7 @@ function Random (faker, seed) { words.push(faker.random.word()); } return words.join(' '); - } + }; /** * locale @@ -230,7 +245,7 @@ function Random (faker, seed) { */ this.image = function randomImage () { return faker.image.image(); - } + }; /** * locale @@ -245,47 +260,68 @@ function Random (faker, seed) { * alpha. returns lower/upper alpha characters based count and upcase options * * @method faker.random.alpha - * @param {mixed} options // defaults to { count: 1, upcase: false } + * @param {mixed} options // defaults to { count: 1, upcase: false, bannedChars: [] } */ this.alpha = function alpha(options) { if (typeof options === "undefined") { options = { count: 1 - } + }; } else if (typeof options === "number") { options = { count: options, - } + }; } else if (typeof options.count === "undefined") { - options.count = 1 + options.count = 1; } if (typeof options.upcase === "undefined") { options.upcase = false; } + if (typeof options.bannedChars ==="undefined"){ + options.bannedChars = []; + } var wholeString = ""; + var charsArray = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; + if(options.bannedChars){ + charsArray = arrayRemove(charsArray,options.bannedChars); + } for(var i = 0; i < options.count; i++) { - wholeString += faker.random.arrayElement(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]); + wholeString += faker.random.arrayElement(charsArray); } return options.upcase ? wholeString.toUpperCase() : wholeString; - }; + } /** * alphaNumeric * * @method faker.random.alphaNumeric * @param {number} count defaults to 1 + * {mixed} options // defaults to { bannedChars: [] } + * options.bannedChars - array of characters which should be banned in new string */ - this.alphaNumeric = function alphaNumeric(count) { + this.alphaNumeric = function alphaNumeric(count, options) { if (typeof count === "undefined") { count = 1; } + if (typeof options ==="undefined"){ + options = {}; + } + if (typeof options.bannedChars ==="undefined"){ + options.bannedChars = []; + } var wholeString = ""; + var charsArray = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] + if(options) { + if (options.bannedChars) { + charsArray = arrayRemove(charsArray, options.bannedChars); + } + } for(var i = 0; i < count; i++) { - wholeString += faker.random.arrayElement(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]); + wholeString += faker.random.arrayElement(charsArray); } return wholeString; -- cgit v1.2.3 From 58c61afb1b8baa160add593e5af7c110de011968 Mon Sep 17 00:00:00 2001 From: LBuerstmayr Date: Mon, 1 Mar 2021 21:00:50 +0100 Subject: WIP: issue-1114-datatypes-module --- lib/random.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index f815c94f..5c585236 100644 --- a/lib/random.js +++ b/lib/random.js @@ -333,16 +333,8 @@ function Random (faker, seed) { * @param {number} count defaults to 1 */ this.hexaDecimal = function hexaDecimal(count) { - if (typeof count === "undefined") { - count = 1; - } - - var wholeString = ""; - for(var i = 0; i < count; i++) { - wholeString += faker.random.arrayElement(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); - } - - return "0x"+wholeString; + console.log("DeprecationWarning: Method is now located in faker.datatype.hexaDecimal"); + return faker.datatype.hexaDecimal(count); }; return this; -- cgit v1.2.3 From 7ad22c2e2aae2f5e6215bcdb91cf3fd28e727d92 Mon Sep 17 00:00:00 2001 From: LBuerstmayr Date: Mon, 1 Mar 2021 22:46:26 +0100 Subject: Issue 1114: New datatype module Current status: - moved number(), float(), hexaDecimal(), boolean(), uuid() from random to datatype - moved respective test from random.unit to datatype.unit - tests of moved methods in random now check if DeprecationWarning is printed and respective method in datatype module is called - adapted all lib files that use moved methods (mostly number) - adapted tests of respective files to spy on the correct method - adapted README in order to promote usage of method that logs a DeprecationWarning --- lib/random.js | 75 +++++++++++++---------------------------------------------- 1 file changed, 16 insertions(+), 59 deletions(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index 5c585236..5b4eebac 100644 --- a/lib/random.js +++ b/lib/random.js @@ -29,68 +29,27 @@ function Random (faker, seed) { } /** + * @Deprecated * returns a single random number based on a max number or range * * @method faker.random.number * @param {mixed} options {min, max, precision} */ this.number = function (options) { - - if (typeof options === "number") { - options = { - max: options - }; - } - - options = options || {}; - - if (typeof options.min === "undefined") { - options.min = 0; - } - - if (typeof options.max === "undefined") { - options.max = 99999; - } - if (typeof options.precision === "undefined") { - options.precision = 1; - } - - // Make the range inclusive of the max value - var max = options.max; - if (max >= 0) { - max += options.precision; - } - - var randomNumber = Math.floor( - mersenne.rand(max / options.precision, options.min / options.precision)); - // Workaround problem in Float point arithmetics for e.g. 6681493 / 0.01 - randomNumber = randomNumber / (1 / options.precision); - - return randomNumber; - + console.log("DeprecationWarning: Method is now located in faker.datatype.number"); + return faker.datatype.number(options); }; /** + * @Deprecated * returns a single random floating-point number based on a max number or range * * @method faker.random.float * @param {mixed} options */ this.float = function (options) { - if (typeof options === "number") { - options = { - precision: options - }; - } - options = options || {}; - var opts = {}; - for (var p in options) { - opts[p] = options[p]; - } - if (typeof opts.precision === 'undefined') { - opts.precision = 0.01; - } - return faker.random.number(opts); + console.log("DeprecationWarning: Method is now located in faker.datatype.float"); + return faker.datatype.float(options); }; /** @@ -101,7 +60,7 @@ function Random (faker, seed) { */ this.arrayElement = function (array) { array = array || ["a", "b", "c"]; - var r = faker.random.number({ max: array.length - 1 }); + var r = faker.datatype.number({ max: array.length - 1 }); return array[r]; }; @@ -116,7 +75,7 @@ function Random (faker, seed) { array = array || ["a", "b", "c"]; if (typeof count !== 'number') { - count = faker.random.number({ min: 1, max: array.length }); + count = faker.datatype.number({ min: 1, max: array.length }); } else if (count > array.length) { count = array.length; } else if (count < 0) { @@ -126,7 +85,7 @@ function Random (faker, seed) { var arrayCopy = array.slice(); var countToRemove = arrayCopy.length - count; for (var i = 0; i < countToRemove; i++) { - var indexToRemove = faker.random.number({ max: arrayCopy.length - 1 }); + var indexToRemove = faker.datatype.number({ max: arrayCopy.length - 1 }); arrayCopy.splice(indexToRemove, 1); } @@ -149,18 +108,14 @@ function Random (faker, seed) { }; /** + * @Deprecated * uuid * * @method faker.random.uuid */ this.uuid = function () { - var RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; - var replacePlaceholders = function (placeholder) { - var random = faker.random.number({ min: 0, max: 15 }); - var value = placeholder == 'x' ? random : (random &0x3 | 0x8); - return value.toString(16); - }; - return RFC4122_TEMPLATE.replace(/[xy]/g, replacePlaceholders); + console.log("DeprecationWarning: Method is now located in faker.datatype.uuid"); + return faker.datatype.uuid(); }; /** @@ -169,7 +124,8 @@ function Random (faker, seed) { * @method faker.random.boolean */ this.boolean = function () { - return !!faker.random.number(1) + console.log("DeprecationWarning: Method is now located in faker.datatype.boolean"); + return faker.datatype.boolean(); }; // TODO: have ability to return specific type of word? As in: noun, adjective, verb, etc @@ -229,7 +185,7 @@ function Random (faker, seed) { this.words = function randomWords (count) { var words = []; if (typeof count === "undefined") { - count = faker.random.number({min:1, max: 3}); + count = faker.datatype.number({min:1, max: 3}); } for (var i = 0; i Date: Wed, 3 Mar 2021 20:08:40 -0500 Subject: Updates deprecation message Fixes typo is jsdoc --- lib/random.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index 5b4eebac..2fef879e 100644 --- a/lib/random.js +++ b/lib/random.js @@ -36,7 +36,7 @@ function Random (faker, seed) { * @param {mixed} options {min, max, precision} */ this.number = function (options) { - console.log("DeprecationWarning: Method is now located in faker.datatype.number"); + console.log("Deprecation Warning: faker.random.number is now located in faker.datatype.number"); return faker.datatype.number(options); }; @@ -48,7 +48,7 @@ function Random (faker, seed) { * @param {mixed} options */ this.float = function (options) { - console.log("DeprecationWarning: Method is now located in faker.datatype.float"); + console.log("Deprecation Warning: faker.random.float is now located in faker.datatype.float"); return faker.datatype.float(options); }; @@ -114,7 +114,7 @@ function Random (faker, seed) { * @method faker.random.uuid */ this.uuid = function () { - console.log("DeprecationWarning: Method is now located in faker.datatype.uuid"); + console.log("Deprecation Warning: faker.random.uuid is now located in faker.datatype.uuid"); return faker.datatype.uuid(); }; @@ -124,7 +124,7 @@ function Random (faker, seed) { * @method faker.random.boolean */ this.boolean = function () { - console.log("DeprecationWarning: Method is now located in faker.datatype.boolean"); + console.log("Deprecation Warning: faker.random.boolean is now located in faker.datatype.boolean"); return faker.datatype.boolean(); }; @@ -290,7 +290,7 @@ function Random (faker, seed) { * @param {number} count defaults to 1 */ this.hexaDecimal = function hexaDecimal(count) { - console.log("DeprecationWarning: Method is now located in faker.datatype.hexaDecimal"); + console.log("Deprecation Warning: faker.random.hexaDecimal is now located in faker.datatype.hexaDecimal"); return faker.datatype.hexaDecimal(count); }; -- cgit v1.2.3 From f4d1478b40c1507b5a0dd3e87b5d7983dd02298a Mon Sep 17 00:00:00 2001 From: Tilo Westermann <854017+tilowestermann@users.noreply.github.com> Date: Tue, 9 Mar 2021 08:28:37 +0100 Subject: Update description of faker.random.objectElement --- lib/random.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/random.js') diff --git a/lib/random.js b/lib/random.js index 2fef879e..6b532f25 100644 --- a/lib/random.js +++ b/lib/random.js @@ -93,7 +93,7 @@ function Random (faker, seed) { }; /** - * takes an object and returns the randomly key or value + * takes an object and returns a random key or value * * @method faker.random.objectElement * @param {object} object -- cgit v1.2.3