1 | var number = require('./providers/number');
|
2 |
|
3 | var random_element = function(array) {
|
4 | var index = this.integer(0, array.length - 1);
|
5 | return array[index];
|
6 | };
|
7 |
|
8 | var random_key = function(object) {
|
9 | var keys = Object.keys(object);
|
10 | return this.random_element(keys);
|
11 | };
|
12 |
|
13 | var random_value = function(object) {
|
14 | return object[this.random_key(object)];
|
15 | };
|
16 |
|
17 | var register_provider = function(provider) {
|
18 | for (var i in provider) {
|
19 | this.define(i, provider[i]);
|
20 | }
|
21 | };
|
22 |
|
23 | var extend = function(a, b) {
|
24 | for (var i in b) {
|
25 | a[i] = b[i];
|
26 | }
|
27 |
|
28 | return a;
|
29 | };
|
30 |
|
31 | var 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 |
|
49 | var numerify = function(format) {
|
50 | return format.replace(/#/g, this._digit);
|
51 | };
|
52 |
|
53 | var letterify = function(format) {
|
54 | return format.replace(/X/g, this._letter);
|
55 | };
|
56 |
|
57 | var join = function() {
|
58 | var tokens = Array.prototype.slice.apply(arguments);
|
59 | return tokens.filter(Boolean).join(' ');
|
60 | };
|
61 |
|
62 | var populate = function(format) {
|
63 | var casual = this;
|
64 | return format.replace(/\{\{(.+?)\}\}/g, function(match, generator) {
|
65 | return casual['_' + generator]();
|
66 | });
|
67 | };
|
68 |
|
69 | var populate_one_of = function(formats) {
|
70 | return this.populate(this.random_element(formats));
|
71 | };
|
72 |
|
73 | module.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 | };
|