diff --git a/README.md b/README.md index b23396f..f96e04e 100644 --- a/README.md +++ b/README.md @@ -132,5 +132,28 @@ Selects a random element from provided array. // 'pear' +  + +  +### `Fake.simpleSchemaDoc(schema)` + +Returns a random object created from [SimpleSchema](http://github.com/aldeed/meteor-simple-schema) definition. + +*Example:* + BookSchema = new SimpleSchema({ + title: { + type: String + }, + pages: { + type: Number + }, + available: { + type: Boolean + } + }); + var fakeDoc = Fake.simpleSchemaDoc(BookSchema); + // { "title": "Tendy Orbiter", "pages": 112, "available": true } + +Only `Number`, `String` and `Boolean` type fields are supported at the moment. diff --git a/fake.js b/fake.js index 477fef6..bb6c399 100644 --- a/fake.js +++ b/fake.js @@ -56,7 +56,7 @@ var colors = [ 'gray', 'indianred', 'khaki', 'lightcoral', 'lightsalmon', 'lightyellow', 'maroon', 'mistyrose', 'navajowhite', 'mocassin', 'orange', 'orangered', 'peru', 'red', 'rosybrown', 'saddlebrown', 'sandybrown', 'sienna', - 'silver', 'slategray', 'tan', 'tomato', 'yeal', 'navy', 'black', + 'silver', 'slategray', 'tan', 'tomato', 'teal', 'navy', 'black', ]; @@ -254,6 +254,50 @@ Fake.color = function() { +var _getRandomString = function (min, max) { + var length = Math.round(Math.random() * (max - min)) + min; + var s = '', ds = _.truncate(Fake.sentence(), {length: length, omission: '.'}); + while ((s.length + ds.length) <= length) { + s += ds; + ds = Fake.sentence(); + } + return s; +}; +var _getRandomNumber = function (min, max, isInteger) { + var r = Math.random() * (max - min) + min; + if (isInteger) + r = Math.round(r); + return r; +}; - +Fake.simpleSchemaDoc = function(schema) { + var fakeObj = {}; + _.each(schema._schemaKeys, function (key) { + var schemaKey = schema._schema[key], + type = schema._schema[key].type.name, + max = _.get(schemaKey, 'max', Number.MAX_SAFE_INTEGER), + min = _.get(schemaKey, 'min', Number.MIN_SAFE_INTEGER), + value = null; + min = _.clamp(min, Number.MIN_SAFE_INTEGER, max); + switch(type) { + case 'String': + max = _.clamp(max, 0, 100); + min = _.clamp(min, 0, max); + value = _getRandomString(min, max); + break; + case 'Number': + var decimal = _.get(schemaKey, 'decimal', false) + value = _getRandomNumber(min, max, !decimal); + break; + case 'Boolean': + value = _getRandomNumber(0, 1) > 0.5; + break; + } + if(_.isString(value) || _.isNumber(value) || _.isBoolean(value)) { + lodash.set(fakeObj, key, value); + } + }); + + return fakeObj; +}; diff --git a/package.js b/package.js index 4fdaf88..924bd1f 100644 --- a/package.js +++ b/package.js @@ -1,12 +1,13 @@ Package.describe({ name: "anti:fake", - version: "0.4.1", + version: "0.4.1_1", summary: "Random text and data generator", git: "https://github.com/anticoders/meteor-fake.git", }); Package.on_use(function (api, where) { + api.use(["erasaur:meteor-lodash@4.0.0"]); api.export('Fake', ['client', 'server']); api.add_files('fake.js', ['client', 'server']); });