UNPKG

1.72 kBJavaScriptView Raw
1var number = require('./providers/number');
2
3var random_element = function(array) {
4 var index = this.integer(0, array.length - 1);
5 return array[index];
6};
7
8var random_key = function(object) {
9 var keys = Object.keys(object);
10 return this.random_element(keys);
11};
12
13var random_value = function(object) {
14 return object[this.random_key(object)];
15};
16
17var register_provider = function(provider) {
18 for (var i in provider) {
19 this.define(i, provider[i]);
20 }
21};
22
23var extend = function(a, b) {
24 for (var i in b) {
25 a[i] = b[i];
26 }
27
28 return a;
29};
30
31var define = function(name, generator) {
32 if (typeof generator != 'function') {
33 this[name] = generator;
34 return;
35 }
36
37 if (generator.length) {
38 this[name] = generator.bind(this);
39 } else {
40 Object.defineProperty(this, name, {
41 get: generator,
42 configurable: true
43 });
44 }
45
46 this['_' + name] = generator.bind(this);
47};
48
49var numerify = function(format) {
50 return format.replace(/#/g, this._digit);
51};
52
53var letterify = function(format) {
54 return format.replace(/X/g, this._letter);
55};
56
57var join = function() {
58 var tokens = Array.prototype.slice.apply(arguments);
59 return tokens.filter(Boolean).join(' ');
60};
61
62var populate = function(format) {
63 var casual = this;
64 return format.replace(/\{\{(.+?)\}\}/g, function(match, generator) {
65 return casual['_' + generator]();
66 });
67};
68
69var populate_one_of = function(formats) {
70 return this.populate(this.random_element(formats));
71};
72
73module.exports = {
74 random_element: random_element,
75 random_value: random_value,
76 random_key: random_key,
77 register_provider: register_provider,
78 extend: extend,
79 define: define,
80 numerify: numerify,
81 letterify:letterify,
82 join: join,
83 populate: populate,
84 populate_one_of: populate_one_of
85};