aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarak <[email protected]>2015-07-08 14:34:39 -0700
committerMarak <[email protected]>2015-07-08 14:34:39 -0700
commite25e1ebc349c426c6b2598dc907eae497ef67160 (patch)
treee40debbcbb1484c9c6391dd49e00558f5a4f944c
parenteaf5c65cfae0a6636555884c18e6c955fae7887e (diff)
downloadfaker-e25e1ebc349c426c6b2598dc907eae497ef67160.tar.xz
faker-e25e1ebc349c426c6b2598dc907eae497ef67160.zip
[refactor] [major] Adds incremental browser builds. Switch to using prototype for internal API. Previous usage of `module.parent` is not acceptable. Locale information is now passed into Faker constructor. Closes #125
-rw-r--r--build/gulpfile.js47
-rw-r--r--index.js6
-rw-r--r--lib/address.js240
-rw-r--r--lib/company.js106
-rw-r--r--lib/date.js112
-rw-r--r--lib/fake.js88
-rw-r--r--lib/finance.js119
-rw-r--r--lib/hacker.js47
-rw-r--r--lib/helpers.js314
-rw-r--r--lib/image.js75
-rw-r--r--lib/index.js172
-rw-r--r--lib/internet.js213
-rw-r--r--lib/locales.js1
-rw-r--r--lib/locales/de/index.js2
-rw-r--r--lib/lorem.js90
-rw-r--r--lib/name.js164
-rw-r--r--lib/phone_number.js32
-rw-r--r--lib/random.js141
-rw-r--r--locale/ReadMe.md12
-rw-r--r--locale/de.js5
-rw-r--r--locale/de_AT.js5
-rw-r--r--locale/de_CH.js5
-rw-r--r--locale/en.js5
-rw-r--r--locale/en_AU.js5
-rw-r--r--locale/en_BORK.js5
-rw-r--r--locale/en_CA.js5
-rw-r--r--locale/en_GB.js5
-rw-r--r--locale/en_IND.js5
-rw-r--r--locale/en_US.js5
-rw-r--r--locale/en_au_ocker.js5
-rw-r--r--locale/es.js5
-rw-r--r--locale/fa.js5
-rw-r--r--locale/fr.js5
-rw-r--r--locale/fr_CA.js5
-rw-r--r--locale/ge.js5
-rw-r--r--locale/it.js5
-rw-r--r--locale/ja.js5
-rw-r--r--locale/ko.js5
-rw-r--r--locale/nb_NO.js5
-rw-r--r--locale/nep.js5
-rw-r--r--locale/nl.js5
-rw-r--r--locale/pl.js5
-rw-r--r--locale/pt_BR.js5
-rw-r--r--locale/ru.js5
-rw-r--r--locale/sk.js5
-rw-r--r--locale/sv.js5
-rw-r--r--locale/tr.js5
-rw-r--r--locale/uk.js5
-rw-r--r--locale/vi.js5
-rw-r--r--locale/zh_CN.js5
-rw-r--r--locale/zh_TW.js5
51 files changed, 1144 insertions, 997 deletions
diff --git a/build/gulpfile.js b/build/gulpfile.js
index 1990537b..9425b053 100644
--- a/build/gulpfile.js
+++ b/build/gulpfile.js
@@ -21,6 +21,7 @@ var browserify = require('browserify');
var transform = require('vinyl-transform');
var path = require('path');
var fs = require('fs');
+var through = require('through2')
gulp.task('browser-package', function() {
@@ -89,19 +90,57 @@ gulp.task('documentation', function(cb) {
});
+var tasks = ['nodeLocalRequires', 'browser-package', 'documentation'];
+// var tasks = [];
+
+var locales = require('../lib/locales');
+var localTasks = Object.keys(locales);
+
+/* task for generating unique browser builds for every locale */
+Object.keys(locales).forEach(function(locale, i) {
+ if (i > 0) {
+ // return;
+ }
+ tasks.push(locale + 'Task');
+ gulp.task(locale + 'Task', function() {
+
+ var browserified = transform(function(filename) {
+ // use browserify to create UMD stand-alone browser package
+ var b = browserify(filename, {
+ standalone: 'faker'
+ });
+ return b.bundle();
+ });
+ process.chdir('../locale/');
+ return gulp.src('./' + locale + '.js')
+ .pipe(browserified)
+ .pipe(rename('faker.' + locale + '.js'))
+ .pipe(gulp.dest('../build/build/locales/' + locale))
+ .pipe(gulp.dest('../examples/browser/locales/' + locale + "/"))
+ .pipe(rename({ extname: ".min.js" }))
+ .pipe(uglify())
+ .pipe(gulp.dest('../build/build/locales/' + locale))
+ .pipe(gulp.dest('../examples/browser/locales/' + locale + '/'))
+ .pipe(rename('../examples/browser/locales/' + locale + '/' + 'faker.' + locale + 'min.js'));
+
+ });
+});
+
gulp.task('nodeLocalRequires', function (cb){
var locales = require('../lib/locales');
for (var locale in locales) {
var localeFile = path.normalize(__dirname + "/../locale/" + locale + ".js");
var localeRequire = '';
- localeRequire += "var faker = require('../lib');\n";
- localeRequire += 'faker.locale = "' + locale + '";\n';
+ localeRequire += "var Faker = require('../lib');\n";
+ localeRequire += "var faker = new Faker({ locale: '" + locale + "', localeFallback: 'en' });\n";
+ // TODO: better fallback support
localeRequire += "faker.locales['" + locale + "'] = require('../lib/locales/" + locale + "');\n";
+ localeRequire += "faker.locales['" + 'en' + "'] = require('../lib/locales/" + 'en' + "');\n";
localeRequire += "module['exports'] = faker;\n";
- console.log(localeRequire);
fs.writeFileSync(localeFile, localeRequire);
}
cb();
});
-gulp.task('default', ['nodeLocalRequires', 'browser-package', 'documentation']);
+
+gulp.task('default', tasks);
diff --git a/index.js b/index.js
index 852bed46..828f061d 100644
--- a/index.js
+++ b/index.js
@@ -1,4 +1,4 @@
-module['exports'] = require('./lib');
-
// since we are requiring the top level of faker, load all locales by default
-module['exports'].locales = require('./lib/locales');
+var Faker = require('./lib');
+var faker = new Faker({ locales: require('./lib/locales') });
+module['exports'] = faker; \ No newline at end of file
diff --git a/lib/address.js b/lib/address.js
index 9821264a..d53e0ef8 100644
--- a/lib/address.js
+++ b/lib/address.js
@@ -1,122 +1,124 @@
-var Helpers = require('./helpers');
-var faker = require('./index'),
-f = faker.fake;
-
-var address = {
- zipCode: function (format) {
- // if zip format is not specified, use the zip format defined for the locale
- if (typeof format === 'undefined') {
- var localeFormat = faker.definitions.address.zipFormat;
- if (typeof localeFormat === 'string') {
- format = localeFormat;
- } else {
- format = faker.random.array_element(localeFormat);
- }
+function Address (faker) {
+ var f = faker.fake,
+ Helpers = faker.helpers;
+
+ this.zipCode = function (format) {
+ // if zip format is not specified, use the zip format defined for the locale
+ if (typeof format === 'undefined') {
+ var localeFormat = faker.definitions.address.zipFormat;
+ if (typeof localeFormat === 'string') {
+ format = localeFormat;
+ } else {
+ format = faker.random.array_element(localeFormat);
}
- return Helpers.replaceSymbols(format);
- },
-
- city: function (format) {
- var formats = [
- '{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}',
- '{{address.cityPrefix}} {{name.firstName}}',
- '{{name.firstName}} {{address.citySuffix}}',
- '{{name.lastName}} {{address.citySuffix}}'
- ];
-
- if (typeof format !== "number") {
- format = faker.random.number(formats.length - 1);
- }
-
- return f(formats[format]);
-
- },
-
- cityPrefix: function () {
- return faker.random.array_element(faker.definitions.address.city_prefix);
- },
-
- citySuffix: function () {
- return faker.random.array_element(faker.definitions.address.city_suffix);
- },
-
- streetName: function () {
- var result;
- switch (faker.random.number(1)) {
- case 0:
- result = faker.name.lastName() + " " + faker.address.streetSuffix();
- break;
- case 1:
- result = faker.name.firstName() + " " + faker.address.streetSuffix();
- break;
- }
- return result;
- },
-
- //
- // TODO: change all these methods that accept a boolean to instead accept an options hash.
- //
- streetAddress: function (useFullAddress) {
- if (useFullAddress === undefined) { useFullAddress = false; }
- var address = "";
- switch (faker.random.number(2)) {
- case 0:
- address = Helpers.replaceSymbolWithNumber("#####") + " " + faker.address.streetName();
- break;
- case 1:
- address = Helpers.replaceSymbolWithNumber("####") + " " + faker.address.streetName();
- break;
- case 2:
- address = Helpers.replaceSymbolWithNumber("###") + " " + faker.address.streetName();
- break;
- }
- return useFullAddress ? (address + " " + faker.address.secondaryAddress()) : address;
- },
-
- streetSuffix: function () {
- return faker.random.array_element(faker.definitions.address.street_suffix);
- },
-
- streetPrefix: function () {
- return faker.random.array_element(faker.definitions.address.street_prefix);
- },
-
- secondaryAddress: function () {
- return Helpers.replaceSymbolWithNumber(faker.random.array_element(
- [
- 'Apt. ###',
- 'Suite ###'
- ]
- ));
- },
-
- county: function () {
- return faker.random.array_element(faker.definitions.address.county);
- },
-
- country: function () {
- return faker.random.array_element(faker.definitions.address.country);
- },
-
- countryCode: function () {
- return faker.random.array_element(faker.definitions.address.country_code);
- },
-
- state: function (useAbbr) {
- return faker.random.array_element(faker.definitions.address.state);
- },
-
- stateAbbr: function () {
- return faker.random.array_element(faker.definitions.address.state_abbr);
- },
-
- latitude: function () {
- return (faker.random.number(180 * 10000) / 10000.0 - 90.0).toFixed(4);
- },
-
- longitude: function () {
- return (faker.random.number(360 * 10000) / 10000.0 - 180.0).toFixed(4);
+ }
+ return Helpers.replaceSymbols(format);
+ }
+
+ this.city = function (format) {
+ var formats = [
+ '{{address.cityPrefix}} {{name.firstName}} {{address.citySuffix}}',
+ '{{address.cityPrefix}} {{name.firstName}}',
+ '{{name.firstName}} {{address.citySuffix}}',
+ '{{name.lastName}} {{address.citySuffix}}'
+ ];
+
+ if (typeof format !== "number") {
+ format = faker.random.number(formats.length - 1);
}
-};
-module.exports = address;
+ return f(formats[format]);
+
+ }
+
+ this.cityPrefix = function () {
+ return faker.random.array_element(faker.definitions.address.city_prefix);
+ }
+
+ this.citySuffix = function () {
+ return faker.random.array_element(faker.definitions.address.city_suffix);
+ }
+
+ this.streetName = function () {
+ var result;
+ switch (faker.random.number(1)) {
+ case 0:
+ result = faker.name.lastName() + " " + faker.address.streetSuffix();
+ break;
+ case 1:
+ result = faker.name.firstName() + " " + faker.address.streetSuffix();
+ break;
+ }
+ return result;
+ }
+
+ //
+ // TODO: change all these methods that accept a boolean to instead accept an options hash.
+ //
+ this.streetAddress = function (useFullAddress) {
+ if (useFullAddress === undefined) { useFullAddress = false; }
+ var address = "";
+ switch (faker.random.number(2)) {
+ case 0:
+ address = Helpers.replaceSymbolWithNumber("#####") + " " + faker.address.streetName();
+ break;
+ case 1:
+ address = Helpers.replaceSymbolWithNumber("####") + " " + faker.address.streetName();
+ break;
+ case 2:
+ address = Helpers.replaceSymbolWithNumber("###") + " " + faker.address.streetName();
+ break;
+ }
+ return useFullAddress ? (address + " " + faker.address.secondaryAddress()) : address;
+ }
+
+ this.streetSuffix = function () {
+ return faker.random.array_element(faker.definitions.address.street_suffix);
+ }
+
+ this.streetPrefix = function () {
+ return faker.random.array_element(faker.definitions.address.street_prefix);
+ }
+
+ this.secondaryAddress = function () {
+ return Helpers.replaceSymbolWithNumber(faker.random.array_element(
+ [
+ 'Apt. ###',
+ 'Suite ###'
+ ]
+ ));
+ }
+
+ this.county = function () {
+ return faker.random.array_element(faker.definitions.address.county);
+ }
+
+ this.country = function () {
+ return faker.random.array_element(faker.definitions.address.country);
+ }
+
+ this.countryCode = function () {
+ return faker.random.array_element(faker.definitions.address.country_code);
+ }
+
+ this.state = function (useAbbr) {
+ return faker.random.array_element(faker.definitions.address.state);
+ }
+
+ this.stateAbbr = function () {
+ return faker.random.array_element(faker.definitions.address.state_abbr);
+ }
+
+ this.latitude = function () {
+ return (faker.random.number(180 * 10000) / 10000.0 - 90.0).toFixed(4);
+ }
+
+ this.longitude = function () {
+ return (faker.random.number(360 * 10000) / 10000.0 - 180.0).toFixed(4);
+ }
+
+ return this;
+}
+
+
+module.exports = Address;
diff --git a/lib/company.js b/lib/company.js
index 9bcd7881..d0f74357 100644
--- a/lib/company.js
+++ b/lib/company.js
@@ -1,64 +1,64 @@
-var faker = require('./index'),
-f = faker.fake;
-
-var company = {
-
- suffixes: function () {
- // Don't want the source array exposed to modification, so return a copy
- return faker.definitions.company.suffix.slice(0);
- },
-
- companyName: function (format) {
-
- var formats = [
- '{{name.lastName}} {{company.companySuffix}}',
- '{{name.lastName}} - {{name.lastName}}',
- '{{name.lastName}}, {{name.lastName}} and {{name.lastName}}'
- ];
-
- if (typeof format !== "number") {
- format = faker.random.number(formats.length - 1);
- }
-
- return f(formats[format]);
- },
+var Company = function (faker) {
+
+ var self = this;
+ var f = faker.fake;
+
+ this.suffixes = function () {
+ // Don't want the source array exposed to modification, so return a copy
+ return faker.definitions.company.suffix.slice(0);
+ }
+
+ this.companyName = function (format) {
+
+ var formats = [
+ '{{name.lastName}} {{company.companySuffix}}',
+ '{{name.lastName}} - {{name.lastName}}',
+ '{{name.lastName}}, {{name.lastName}} and {{name.lastName}}'
+ ];
+
+ if (typeof format !== "number") {
+ format = faker.random.number(formats.length - 1);
+ }
- companySuffix: function () {
- return faker.random.array_element(faker.company.suffixes());
- },
+ return f(formats[format]);
+ }
- catchPhrase: function () {
- return f('{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}')
- },
+ this.companySuffix = function () {
+ return faker.random.array_element(faker.company.suffixes());
+ }
- bs: function () {
- return f('{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}');
- },
+ this.catchPhrase = function () {
+ return f('{{company.catchPhraseAdjective}} {{company.catchPhraseDescriptor}} {{company.catchPhraseNoun}}')
+ }
- catchPhraseAdjective: function () {
- return faker.random.array_element(faker.definitions.company.adjective);
- },
+ this.bs = function () {
+ return f('{{company.bsAdjective}} {{company.bsBuzz}} {{company.bsNoun}}');
+ }
- catchPhraseDescriptor: function () {
- return faker.random.array_element(faker.definitions.company.descriptor);
- },
+ this.catchPhraseAdjective = function () {
+ return faker.random.array_element(faker.definitions.company.adjective);
+ }
- catchPhraseNoun: function () {
- return faker.random.array_element(faker.definitions.company.noun);
- },
+ this.catchPhraseDescriptor = function () {
+ return faker.random.array_element(faker.definitions.company.descriptor);
+ }
- bsAdjective: function () {
- return faker.random.array_element(faker.definitions.company.bs_adjective);
- },
+ this.catchPhraseNoun = function () {
+ return faker.random.array_element(faker.definitions.company.noun);
+ }
- bsBuzz: function () {
- return faker.random.array_element(faker.definitions.company.bs_verb);
- },
+ this.bsAdjective = function () {
+ return faker.random.array_element(faker.definitions.company.bs_adjective);
+ }
- bsNoun: function () {
- return faker.random.array_element(faker.definitions.company.bs_noun);
- }
+ this.bsBuzz = function () {
+ return faker.random.array_element(faker.definitions.company.bs_verb);
+ }
-};
+ this.bsNoun = function () {
+ return faker.random.array_element(faker.definitions.company.bs_noun);
+ }
+
+}
-module.exports = company;
+module['exports'] = Company; \ No newline at end of file
diff --git a/lib/date.js b/lib/date.js
index d3a58eb4..e868580d 100644
--- a/lib/date.js
+++ b/lib/date.js
@@ -1,56 +1,58 @@
-var faker = require("./index");
-
-var date = {
-
- past: function (years, refDate) {
- var date = (refDate) ? new Date(Date.parse(refDate)) : new Date();
- var range = {
- min: 1000,
- max: (years || 1) * 365 * 24 * 3600 * 1000
- };
-
- var past = date.getTime();
- past -= faker.random.number(range); // some time from now to N years ago, in milliseconds
- date.setTime(past);
-
- return date;
- },
-
- future: function (years, refDate) {
- var date = (refDate) ? new Date(Date.parse(refDate)) : new Date();
- var range = {
- min: 1000,
- max: (years || 1) * 365 * 24 * 3600 * 1000
- };
-
- var future = date.getTime();
- future += faker.random.number(range); // some time from now to N years later, in milliseconds
- date.setTime(future);
-
- return date;
- },
-
- between: function (from, to) {
- var fromMilli = Date.parse(from);
- var dateOffset = faker.random.number(Date.parse(to) - fromMilli);
-
- var newDate = new Date(fromMilli + dateOffset);
-
- return newDate;
- },
-
- recent: function (days) {
- var date = new Date();
- var range = {
- min: 1000,
- max: (days || 1) * 24 * 3600 * 1000
- };
-
- var future = date.getTime();
- future -= faker.random.number(range); // some time from now to N days ago, in milliseconds
- date.setTime(future);
-
- return date;
- }
+var _Date = function (faker) {
+ var self = this;
+ self.past = function (years, refDate) {
+ var date = (refDate) ? new Date(Date.parse(refDate)) : new Date();
+ var range = {
+ min: 1000,
+ max: (years || 1) * 365 * 24 * 3600 * 1000
+ };
+
+ var past = date.getTime();
+ past -= faker.random.number(range); // some time from now to N years ago, in milliseconds
+ date.setTime(past);
+
+ return date;
+ };
+
+ self.future = function (years, refDate) {
+ var date = (refDate) ? new Date(Date.parse(refDate)) : new Date();
+ var range = {
+ min: 1000,
+ max: (years || 1) * 365 * 24 * 3600 * 1000
+ };
+
+ var future = date.getTime();
+ future += faker.random.number(range); // some time from now to N years later, in milliseconds
+ date.setTime(future);
+
+ return date;
+ };
+
+ self.between = function (from, to) {
+ var fromMilli = Date.parse(from);
+ var dateOffset = faker.random.number(Date.parse(to) - fromMilli);
+
+ var newDate = new Date(fromMilli + dateOffset);
+
+ return newDate;
+ };
+
+ self.recent = function (days) {
+ var date = new Date();
+ var range = {
+ min: 1000,
+ max: (days || 1) * 24 * 3600 * 1000
+ };
+
+ var future = date.getTime();
+ future -= faker.random.number(range); // some time from now to N days ago, in milliseconds
+ date.setTime(future);
+
+ return date;
+ }
+
+ return self;
+
};
-module.exports = date;
+
+module['exports'] = _Date; \ No newline at end of file
diff --git a/lib/fake.js b/lib/fake.js
index 327e3de9..c2e43aa4 100644
--- a/lib/fake.js
+++ b/lib/fake.js
@@ -3,55 +3,61 @@
*/
-var faker = require('./');
+function Fake (faker) {
+
+ this.fake = function fake (str) {
+ // setup default response as empty string
+ var res = '';
-module['exports'] = function fake (str) {
+ // if incoming str parameter is not provided, return error message
+ if (typeof str !== 'string' || str.length === 0) {
+ res = 'string parameter is required!';
+ return res;
+ }
- // setup default response as empty string
- var res = '';
-
- // if incoming str parameter is not provided, return error message
- if (typeof str !== 'string' || str.length === 0) {
- res = 'string parameter is required!';
- return res;
- }
+ // find first matching {{ and }}
+ var start = str.search('{{');
+ var end = str.search('}}');
- // find first matching {{ and }}
- var start = str.search('{{');
- var end = str.search('}}');
-
- // if no {{ and }} is found, we are done
- if (start === -1 && end === -1) {
- return str;
- }
+ // if no {{ and }} is found, we are done
+ if (start === -1 && end === -1) {
+ return str;
+ }
- // console.log('attempting to parse', str);
+ // console.log('attempting to parse', str);
- // extract method name from between the {{ }} that we found
- // for example: {{name.firstName}}
- var method = str.substr(start + 2, end - start - 2);
- method = method.replace('}}', '');
- method = method.replace('{{', '');
+ // extract method name from between the {{ }} that we found
+ // for example: {{name.firstName}}
+ var method = str.substr(start + 2, end - start - 2);
+ method = method.replace('}}', '');
+ method = method.replace('{{', '');
- // console.log('method', method)
+ // console.log('method', method)
- // split the method into module and function
- var parts = method.split('.');
-
- if (typeof faker[parts[0]] === "undefined") {
- throw new Error('Invalid module: ' + parts[0]);
- }
+ // split the method into module and function
+ var parts = method.split('.');
- if (typeof faker[parts[0]][parts[1]] === "undefined") {
- throw new Error('Invalid method: ' + parts[0] + "." + parts[1]);
- }
+ if (typeof faker[parts[0]] === "undefined") {
+ throw new Error('Invalid module: ' + parts[0]);
+ }
+
+ if (typeof faker[parts[0]][parts[1]] === "undefined") {
+ throw new Error('Invalid method: ' + parts[0] + "." + parts[1]);
+ }
+
+ // assign the function from the module.function namespace
+ var fn = faker[parts[0]][parts[1]];
+
+ // replace the found tag with the returned fake value
+ res = str.replace('{{' + method + '}}', fn());
- // assign the function from the module.function namespace
- var fn = faker[parts[0]][parts[1]];
+ // return the response recursively until we are done finding all tags
+ return fake(res);
+ }
+
+ return this;
+
- // replace the found tag with the returned fake value
- res = str.replace('{{' + method + '}}', fn());
+}
- // return the response recursively until we are done finding all tags
- return fake(res);
-}; \ No newline at end of file
+module['exports'] = Fake; \ No newline at end of file
diff --git a/lib/finance.js b/lib/finance.js
index 65703562..89f5e285 100644
--- a/lib/finance.js
+++ b/lib/finance.js
@@ -1,87 +1,86 @@
-var Helpers = require('./helpers'),
- faker = require('./index');
+var Finance = function (faker) {
+ var Helpers = faker.helpers,
+ self = this;
-var finance = {
+ self.account = function (length) {
- account: function (length) {
+ length = length || 8;
- length = length || 8;
+ var template = '';
- var template = '';
+ for (var i = 0; i < length; i++) {
+ template = template + '#';
+ }
+ length = null;
+ return Helpers.replaceSymbolWithNumber(template);
+ }
- for (var i = 0; i < length; i++) {
- template = template + '#';
- }
- length = null;
- return Helpers.replaceSymbolWithNumber(template);
- },
+ self.accountName = function () {
- accountName: function () {
+ return [Helpers.randomize(faker.definitions.finance.account_type), 'Account'].join(' ');
+ }
- return [Helpers.randomize(faker.definitions.finance.account_type), 'Account'].join(' ');
- },
+ self.mask = function (length, parens, elipsis) {
- mask: function (length, parens, elipsis) {
+ //set defaults
+ length = (length == 0 || !length || typeof length == 'undefined') ? 4 : length;
+ parens = (parens === null) ? true : parens;
+ elipsis = (elipsis === null) ? true : elipsis;
- //set defaults
- length = (length == 0 || !length || typeof length == 'undefined') ? 4 : length;
- parens = (parens === null) ? true : parens;
- elipsis = (elipsis === null) ? true : elipsis;
+ //create a template for length
+ var template = '';
- //create a template for length
- var template = '';
+ for (var i = 0; i < length; i++) {
+ template = template + '#';
+ }
- for (var i = 0; i < length; i++) {
- template = template + '#';
- }
+ //prefix with elipsis
+ template = (elipsis) ? ['...', template].join('') : template;
- //prefix with elipsis
- template = (elipsis) ? ['...', template].join('') : template;
+ template = (parens) ? ['(', template, ')'].join('') : template;
- template = (parens) ? ['(', template, ')'].join('') : template;
+ //generate random numbers
+ template = Helpers.replaceSymbolWithNumber(template);
- //generate random numbers
- template = Helpers.replaceSymbolWithNumber(template);
+ return template;
- return template;
+ }
- },
+ //min and max take in minimum and maximum amounts, dec is the decimal place you want rounded to, symbol is $, €, £, etc
+ //NOTE: this returns a string representation of the value, if you want a number use parseFloat and no symbol
- //min and max take in minimum and maximum amounts, dec is the decimal place you want rounded to, symbol is $, €, £, etc
- //NOTE: this returns a string representation of the value, if you want a number use parseFloat and no symbol
+ self.amount = function (min, max, dec, symbol) {
- amount: function (min, max, dec, symbol) {
+ min = min || 0;
+ max = max || 1000;
+ dec = dec || 2;
+ symbol = symbol || '';
- min = min || 0;
- max = max || 1000;
- dec = dec || 2;
- symbol = symbol || '';
+ return symbol + (Math.round((Math.random() * (max - min) + min) * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec);
- return symbol + (Math.round((Math.random() * (max - min) + min) * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec);
+ }
- },
+ self.transactionType = function () {
+ return Helpers.randomize(faker.definitions.finance.transaction_type);
+ }
- transactionType: function () {
- return Helpers.randomize(faker.definitions.finance.transaction_type);
- },
+ self.currencyCode = function () {
+ return faker.random.object_element(faker.definitions.finance.currency)['code'];
+ }
- currencyCode: function () {
- return faker.random.object_element(faker.definitions.finance.currency)['code'];
- },
+ self.currencyName = function () {
+ return faker.random.object_element(faker.definitions.finance.currency, 'key');
+ }
- currencyName: function () {
- return faker.random.object_element(faker.definitions.finance.currency, 'key');
- },
+ self.currencySymbol = function () {
+ var symbol;
- currencySymbol: function () {
- var symbol;
+ while (!symbol) {
+ symbol = faker.random.object_element(faker.definitions.finance.currency)['symbol'];
+ }
+ return symbol;
+ }
+}
- while (!symbol) {
- symbol = faker.random.object_element(faker.definitions.finance.currency)['symbol'];
- }
- return symbol;
- }
-};
-
-module.exports = finance; \ No newline at end of file
+module['exports'] = Finance; \ No newline at end of file
diff --git a/lib/hacker.js b/lib/hacker.js
index e67eba8e..7aba150e 100644
--- a/lib/hacker.js
+++ b/lib/hacker.js
@@ -1,35 +1,34 @@
-var faker = require('./index');
-
-var hacker = {
-
- abbreviation : function () {
+var Hacker = function (faker) {
+ var self = this;
+
+ self.abbreviation = function () {
return faker.random.array_element(faker.definitions.hacker.abbreviation);
- },
+ };
- adjective : function () {
+ self.adjective = function () {
return faker.random.array_element(faker.definitions.hacker.adjective);
- },
+ };
- noun : function () {
+ self.noun = function () {
return faker.random.array_element(faker.definitions.hacker.noun);
- },
+ };
- verb : function () {
+ self.verb = function () {
return faker.random.array_element(faker.definitions.hacker.verb);
- },
+ };
- ingverb : function () {
+ self.ingverb = function () {
return faker.random.array_element(faker.definitions.hacker.ingverb);
- },
+ };
- phrase : function () {
+ self.phrase = function () {
var data = {
- abbreviation: hacker.abbreviation(),
- adjective: hacker.adjective(),
- ingverb: hacker.ingverb(),
- noun: hacker.noun(),
- verb: hacker.verb()
+ abbreviation: self.abbreviation(),
+ adjective: self.adjective(),
+ ingverb: self.ingverb(),
+ noun: self.noun(),
+ verb: self.verb()
};
var phrase = faker.random.array_element([ "If we {{verb}} the {{noun}}, we can get to the {{abbreviation}} {{noun}} through the {{adjective}} {{abbreviation}} {{noun}}!",
@@ -44,9 +43,9 @@ var hacker = {
return faker.helpers.mustache(phrase, data);
- },
-
-
+ };
+
+ return self;
};
-module.exports = hacker;
+module['exports'] = Hacker; \ No newline at end of file
diff --git a/lib/helpers.js b/lib/helpers.js
index 82d36603..d59cd241 100644
--- a/lib/helpers.js
+++ b/lib/helpers.js
@@ -1,190 +1,197 @@
-var faker = require('./index');
+var Helpers = function (faker) {
+
+ var self = this;
+
+ // backword-compatibility
+ self.randomNumber = function (range) {
+ return faker.random.number(range);
+ };
-// backword-compatibility
-exports.randomNumber = function (range) {
- return faker.random.number(range);
-};
+ // backword-compatibility
+ self.randomize = function (array) {
+ array = array || ["a", "b", "c"];
+ return faker.random.array_element(array);
+ };
-// backword-compatibility
-exports.randomize = function (array) {
- array = array || ["a", "b", "c"];
- return faker.random.array_element(array);
-};
+ // slugifies string
+ self.slugify = function (string) {
+ string = string || "";
+ return string.replace(/ /g, '-').replace(/[^\w\.\-]+/g, '');
+ };
-// slugifies string
-exports.slugify = function (string) {
- string = string || "";
- return string.replace(/ /g, '-').replace(/[^\w\.\-]+/g, '');
-};
+ // parses string for a symbol and replace it with a random number from 1-10
+ self.replaceSymbolWithNumber = function (string, symbol) {
+ string = string || "";
+ // default symbol is '#'
+ if (symbol === undefined) {
+ symbol = '#';
+ }
-// parses string for a symbol and replace it with a random number from 1-10
-exports.replaceSymbolWithNumber = function (string, symbol) {
- string = string || "";
- // default symbol is '#'
- if (symbol === undefined) {
- symbol = '#';
- }
+ var str = '';
+ for (var i = 0; i < string.length; i++) {
+ if (string.charAt(i) == symbol) {
+ str += faker.random.number(9);
+ } else {
+ str += string.charAt(i);
+ }
+ }
+ return str;
+ };
- var str = '';
- for (var i = 0; i < string.length; i++) {
- if (string.charAt(i) == symbol) {
- str += faker.random.number(9);
- } else {
- str += string.charAt(i);
- }
- }
- return str;
-};
+ // parses string for symbols (numbers or letters) and replaces them appropriately
+ self.replaceSymbols = function (string) {
+ string = string || "";
+ var alpha = ['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']
+ var str = '';
-// parses string for symbols (numbers or letters) and replaces them appropriately
-exports.replaceSymbols = function (string) {
- string = string || "";
- var alpha = ['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']
- var str = '';
-
- for (var i = 0; i < string.length; i++) {
- if (string.charAt(i) == "#") {
- str += faker.random.number(9);
- } else if (string.charAt(i) == "?") {
- str += alpha[Math.floor(Math.random() * alpha.length)];
- } else {
- str += string.charAt(i);
- }
+ for (var i = 0; i < string.length; i++) {
+ if (string.charAt(i) == "#") {
+ str += faker.random.number(9);
+ } else if (string.charAt(i) == "?") {
+ str += alpha[Math.floor(Math.random() * alpha.length)];
+ } else {
+ str += string.charAt(i);
+ }
+ }
+ return str;
+ };
+
+ // takes an array and returns it randomized
+ self.shuffle = function (o) {
+ o = o || ["a", "b", "c"];
+ for (var j, x, i = o.length-1; i; j = faker.random.number(i), x = o[--i], o[i] = o[j], o[j] = x);
+ return o;
+ };
+
+ self.mustache = function (str, data) {
+ for(var p in data) {
+ var re = new RegExp('{{' + p + '}}', 'g')
+ str = str.replace(re, data[p]);
}
return str;
-};
-
-// takes an array and returns it randomized
-exports.shuffle = function (o) {
- o = o || ["a", "b", "c"];
- for (var j, x, i = o.length-1; i; j = faker.random.number(i), x = o[--i], o[i] = o[j], o[j] = x);
- return o;
-};
+ };
-exports.mustache = function (str, data) {
- for(var p in data) {
- var re = new RegExp('{{' + p + '}}', 'g')
- str = str.replace(re, data[p]);
- }
- return str;
-};
+ self.createCard = function () {
+ return {
+ "name": faker.name.findName(),
+ "username": faker.internet.userName(),
+ "email": faker.internet.email(),
+ "address": {
+ "streetA": faker.address.streetName(),
+ "streetB": faker.address.streetAddress(),
+ "streetC": faker.address.streetAddress(true),
+ "streetD": faker.address.secondaryAddress(),
+ "city": faker.address.city(),
+ "state": faker.address.state(),
+ "country": faker.address.country(),
+ "zipcode": faker.address.zipCode(),
+ "geo": {
+ "lat": faker.address.latitude(),
+ "lng": faker.address.longitude()
+ }
+ },
+ "phone": faker.phone.phoneNumber(),
+ "website": faker.internet.domainName(),
+ "company": {
+ "name": faker.company.companyName(),
+ "catchPhrase": faker.company.catchPhrase(),
+ "bs": faker.company.bs()
+ },
+ "posts": [
+ {
+ "words": faker.lorem.words(),
+ "sentence": faker.lorem.sentence(),
+ "sentences": faker.lorem.sentences(),
+ "paragraph": faker.lorem.paragraph()
+ },
+ {
+ "words": faker.lorem.words(),
+ "sentence": faker.lorem.sentence(),
+ "sentences": faker.lorem.sentences(),
+ "paragraph": faker.lorem.paragraph()
+ },
+ {
+ "words": faker.lorem.words(),
+ "sentence": faker.lorem.sentence(),
+ "sentences": faker.lorem.sentences(),
+ "paragraph": faker.lorem.paragraph()
+ }
+ ],
+ "accountHistory": [faker.helpers.createTransaction(), faker.helpers.createTransaction(), faker.helpers.createTransaction()]
+ };
+ };
-exports.createCard = function () {
+ self.contextualCard = function () {
+ var name = faker.name.firstName(),
+ userName = faker.internet.userName(name);
return {
- "name": faker.name.findName(),
- "username": faker.internet.userName(),
- "email": faker.internet.email(),
+ "name": name,
+ "username": userName,
+ "avatar": faker.internet.avatar(),
+ "email": faker.internet.email(userName),
+ "dob": faker.date.past(50, new Date("Sat Sep 20 1992 21:35:02 GMT+0200 (CEST)")),
+ "phone": faker.phone.phoneNumber(),
"address": {
- "streetA": faker.address.streetName(),
- "streetB": faker.address.streetAddress(),
- "streetC": faker.address.streetAddress(true),
- "streetD": faker.address.secondaryAddress(),
+ "street": faker.address.streetName(true),
+ "suite": faker.address.secondaryAddress(),
"city": faker.address.city(),
- "state": faker.address.state(),
- "country": faker.address.country(),
"zipcode": faker.address.zipCode(),
"geo": {
"lat": faker.address.latitude(),
"lng": faker.address.longitude()
}
},
- "phone": faker.phone.phoneNumber(),
"website": faker.internet.domainName(),
"company": {
"name": faker.company.companyName(),
"catchPhrase": faker.company.catchPhrase(),
"bs": faker.company.bs()
- },
- "posts": [
- {
- "words": faker.lorem.words(),
- "sentence": faker.lorem.sentence(),
- "sentences": faker.lorem.sentences(),
- "paragraph": faker.lorem.paragraph()
- },
- {
- "words": faker.lorem.words(),
- "sentence": faker.lorem.sentence(),
- "sentences": faker.lorem.sentences(),
- "paragraph": faker.lorem.paragraph()
- },
- {
- "words": faker.lorem.words(),
- "sentence": faker.lorem.sentence(),
- "sentences": faker.lorem.sentences(),
- "paragraph": faker.lorem.paragraph()
- }
- ],
- "accountHistory": [faker.helpers.createTransaction(), faker.helpers.createTransaction(), faker.helpers.createTransaction()]
+ }
};
-};
+ };
-exports.contextualCard = function () {
- var name = faker.name.firstName(),
- userName = faker.internet.userName(name);
- return {
- "name": name,
- "username": userName,
- "avatar": faker.internet.avatar(),
- "email": faker.internet.email(userName),
- "dob": faker.date.past(50, new Date("Sat Sep 20 1992 21:35:02 GMT+0200 (CEST)")),
- "phone": faker.phone.phoneNumber(),
- "address": {
- "street": faker.address.streetName(true),
- "suite": faker.address.secondaryAddress(),
- "city": faker.address.city(),
- "zipcode": faker.address.zipCode(),
- "geo": {
- "lat": faker.address.latitude(),
- "lng": faker.address.longitude()
+
+ self.userCard = function () {
+ return {
+ "name": faker.name.findName(),
+ "username": faker.internet.userName(),
+ "email": faker.internet.email(),
+ "address": {
+ "street": faker.address.streetName(true),
+ "suite": faker.address.secondaryAddress(),
+ "city": faker.address.city(),
+ "zipcode": faker.address.zipCode(),
+ "geo": {
+ "lat": faker.address.latitude(),
+ "lng": faker.address.longitude()
+ }
+ },
+ "phone": faker.phone.phoneNumber(),
+ "website": faker.internet.domainName(),
+ "company": {
+ "name": faker.company.companyName(),
+ "catchPhrase": faker.company.catchPhrase(),
+ "bs": faker.company.bs()
}
- },
- "website": faker.internet.domainName(),
- "company": {
- "name": faker.company.companyName(),
- "catchPhrase": faker.company.catchPhrase(),
- "bs": faker.company.bs()
- }
+ };
};
-};
-
-exports.userCard = function () {
+ self.createTransaction = function(){
return {
- "name": faker.name.findName(),
- "username": faker.internet.userName(),
- "email": faker.internet.email(),
- "address": {
- "street": faker.address.streetName(true),
- "suite": faker.address.secondaryAddress(),
- "city": faker.address.city(),
- "zipcode": faker.address.zipCode(),
- "geo": {
- "lat": faker.address.latitude(),
- "lng": faker.address.longitude()
- }
- },
- "phone": faker.phone.phoneNumber(),
- "website": faker.internet.domainName(),
- "company": {
- "name": faker.company.companyName(),
- "catchPhrase": faker.company.catchPhrase(),
- "bs": faker.company.bs()
- }
+ "amount" : faker.finance.amount(),
+ "date" : new Date(2012, 1, 2), //TODO: add a ranged date method
+ "business": faker.company.companyName(),
+ "name": [faker.finance.accountName(), faker.finance.mask()].join(' '),
+ "type" : self.randomize(faker.definitions.finance.transaction_type),
+ "account" : faker.finance.account()
};
-};
-
-exports.createTransaction = function(){
- return {
- "amount" : faker.finance.amount(),
- "date" : new Date(2012, 1, 2), //TODO: add a ranged date method
- "business": faker.company.companyName(),
- "name": [faker.finance.accountName(), faker.finance.mask()].join(' '),
- "type" : exports.randomize(faker.definitions.finance.transaction_type),
- "account" : faker.finance.account()
};
+
+ return self;
+
};
+
/*
String.prototype.capitalize = function () { //v1.0
return this.replace(/\w+/g, function (a) {
@@ -193,3 +200,4 @@ String.prototype.capitalize = function () { //v1.0
};
*/
+module['exports'] = Helpers; \ No newline at end of file
diff --git a/lib/image.js b/lib/image.js
index 3f87ab7d..e791ffea 100644
--- a/lib/image.js
+++ b/lib/image.js
@@ -1,14 +1,15 @@
-var faker = require('./index');
+var Image = function (faker) {
-var image = {
- image: function () {
+ var self = this;
+
+ self.image = function () {
var categories = ["abstract", "animals", "business", "cats", "city", "food", "nightlife", "fashion", "people", "nature", "sports", "technics", "transport"];
- return image[faker.random.array_element(categories)]();
- },
- avatar: function () {
+ return self[faker.random.array_element(categories)]();
+ };
+ self.avatar = function () {
return faker.internet.avatar();
- },
- imageUrl: function (width, height, category) {
+ };
+ self.imageUrl = function (width, height, category) {
var width = width || 640;
var height = height || 480;
@@ -17,46 +18,46 @@ var image = {
url += '/' + category;
}
return url;
- },
- abstract: function (width, height) {
+ };
+ self.abstract = function (width, height) {
return faker.image.imageUrl(width, height, 'abstract');
- },
- animals: function (width, height) {
+ };
+ self.animals = function (width, height) {
return faker.image.imageUrl(width, height, 'animals');
- },
- business: function (width, height) {
+ };
+ self.business = function (width, height) {
return faker.image.imageUrl(width, height, 'business');
- },
- cats: function (width, height) {
+ };
+ self.cats = function (width, height) {
return faker.image.imageUrl(width, height, 'cats');
- },
- city: function (width, height) {
+ };
+ self.city = function (width, height) {
return faker.image.imageUrl(width, height, 'city');
- },
- food: function (width, height) {
+ };
+ self.food = function (width, height) {
return faker.image.imageUrl(width, height, 'food');
- },
- nightlife: function (width, height) {
+ };
+ self.nightlife = function (width, height) {
return faker.image.imageUrl(width, height, 'nightlife');
- },
- fashion: function (width, height) {
+ };
+ self.fashion = function (width, height) {
return faker.image.imageUrl(width, height, 'fashion');
- },
- people: function (width, height) {
+ };
+ self.people = function (width, height) {
return faker.image.imageUrl(width, height, 'people');
- },
- nature: function (width, height) {
+ };
+ self.nature = function (width, height) {
return faker.image.imageUrl(width, height, 'nature');
- },
- sports: function (width, height) {
+ };
+ self.sports = function (width, height) {
return faker.image.imageUrl(width, height, 'sports');
- },
- technics: function (width, height) {
+ };
+ self.technics = function (width, height) {
return faker.image.imageUrl(width, height, 'technics');
- },
- transport: function (width, height) {
+ };
+ self.transport = function (width, height) {
return faker.image.imageUrl(width, height, 'transport');
- }
-};
+ }
+}
-module.exports = image;
+module["exports"] = Image; \ No newline at end of file
diff --git a/lib/index.js b/lib/index.js
index 5d7e8b5d..281befed 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -16,75 +16,111 @@
if you plan on modifying the faker library you should be performing your changes in the /lib/ directory
*/
-exports.random = require('./random');
-exports.fake = require('./fake');
-
-exports.name = require('./name');
-exports.address = require('./address');
-exports.phone = require('./phone_number');
-exports.internet = require('./internet');
-exports.company = require('./company');
-exports.image = require('./image');
-exports.lorem = require('./lorem');
-exports.helpers = require('./helpers');
-exports.date = require('./date');
-exports.finance = require('./finance');
-exports.hacker = require('./hacker');
-//exports.commerce = require('./commerce');
-
-// don't load all locales by default
-var locales = {};
-exports.locales = locales;
-locales = require('./locales');
-
-// default locale
-exports.locale = "en";
-
-// in case a locale is missing a definition, fallback to this locale
-exports.localeFallback = "en";
-
-exports.definitions = {};
-
-
-var _definitions = {
- "name": ["first_name", "last_name", "prefix", "suffix", "title", "male_first_name", "female_first_name", "male_middle_name", "female_middle_name", "male_last_name", "female_last_name"],
- "address": ["city_prefix", "city_suffix", "street_suffix", "county", "country", "country_code", "state", "state_abbr", "street_prefix", "zipFormat"],
- "company": ["adjective", "noun", "descriptor", "bs_adjective", "bs_noun", "bs_verb", "suffix"],
- "lorem": ["words"],
- "hacker": ["abbreviation", "adjective", "noun", "verb", "ingverb"],
- "phone_number": ["formats"],
- "finance": ["account_type", "transaction_type", "currency"],
- "internet": ["avatar_uri", "domain_suffix", "free_email", "password"],
- "commerce": ["color", "department", "product_name", "price", "categories"],
- "title": "",
- "separator": ""
-};
-// Create a Getter for all definitions.foo.bar propetries
-Object.keys(_definitions).forEach(function(d){
- if (typeof exports.definitions[d] === "undefined") {
- exports.definitions[d] = {};
- }
-
- if (typeof _definitions[d] === "string") {
- exports.definitions[d] = _definitions[d];
-
-
- return;
- }
-
- _definitions[d].forEach(function(p){
- Object.defineProperty(exports.definitions[d], p, {
- get: function () {
- if (typeof locales[exports.locale][d] === "undefined" || typeof locales[exports.locale][d][p] === "undefined") {
- // certain localization sets contain less data then others.
- // in the case of a missing defintion, use the default localeFallback to substitute the missing set data
- return locales[exports.localeFallback][d][p];
- } else {
- // return localized data
- return locales[exports.locale][d][p];
+function Faker (opts) {
+
+ var self = this;
+
+ opts = opts || {};
+
+ // assign options
+ var locales = self.locales || opts.locales || {};
+ var locale = self.locale || opts.locale || "en";
+ var localeFallback = self.localeFallback || opts.localeFallback || "en";
+
+ self.locales = locales;
+ self.locale = locale;
+ self.localeFallback = localeFallback;
+
+
+ self.definitions = {};
+
+ var Fake = require('./fake');
+ self.fake = new Fake(self).fake;
+
+ var Random = require('./random');
+ self.random = new Random(self);
+ // self.random = require('./random');
+
+ var Helpers = require('./helpers');
+ self.helpers = new Helpers(self);
+
+ var Name = require('./name');
+ self.name = new Name(self);
+ // self.name = require('./name');
+
+ var Address = require('./address');
+ self.address = new Address(self);
+
+ var Company = require('./company');
+ self.company = new Company(self);
+
+ var Finance = require('./finance');
+ self.finance = new Finance(self);
+
+ var Image = require('./image');
+ self.image = new Image(self);
+
+ var Lorem = require('./lorem');
+ self.lorem = new Lorem(self);
+
+ var Hacker = require('./hacker');
+ self.hacker = new Hacker(self);
+
+ var Internet = require('./internet');
+ self.internet = new Internet(self);
+
+ var Phone = require('./phone_number');
+ self.phone = new Phone(self);
+
+ var _Date = require('./date');
+ self.date = new _Date(self);
+
+ // TODO: fix self.commerce = require('./commerce');
+
+ var _definitions = {
+ "name": ["first_name", "last_name", "prefix", "suffix", "title", "male_first_name", "female_first_name", "male_middle_name", "female_middle_name", "male_last_name", "female_last_name"],
+ "address": ["city_prefix", "city_suffix", "street_suffix", "county", "country", "country_code", "state", "state_abbr", "street_prefix", "zipFormat"],
+ "company": ["adjective", "noun", "descriptor", "bs_adjective", "bs_noun", "bs_verb", "suffix"],
+ "lorem": ["words"],
+ "hacker": ["abbreviation", "adjective", "noun", "verb", "ingverb"],
+ "phone_number": ["formats"],
+ "finance": ["account_type", "transaction_type", "currency"],
+ "internet": ["avatar_uri", "domain_suffix", "free_email", "password"],
+ "commerce": ["color", "department", "product_name", "price", "categories"],
+ "title": "",
+ "separator": ""
+ };
+
+ // Create a Getter for all definitions.foo.bar propetries
+ Object.keys(_definitions).forEach(function(d){
+ if (typeof self.definitions[d] === "undefined") {
+ self.definitions[d] = {};
+ }
+
+ if (typeof _definitions[d] === "string") {
+ self.definitions[d] = _definitions[d];
+ return;
+ }
+
+ _definitions[d].forEach(function(p){
+ Object.defineProperty(self.definitions[d], p, {
+ get: function () {
+ if (typeof self.locales[self.locale][d] === "undefined" || typeof self.locales[self.locale][d][p] === "undefined") {
+ // certain localization sets contain less data then others.
+ // in the case of a missing defintion, use the default localeFallback to substitute the missing set data
+ // throw new Error('unknown property ' + d + p)
+ return self.locales[localeFallback][d][p];
+ } else {
+ // return localized data
+ return self.locales[self.locale][d][p];
+ }
}
- }
+ });
});
});
-});
+
+
+};
+
+module['exports'] = Faker; \ No newline at end of file
diff --git a/lib/internet.js b/lib/internet.js
index 513daf4a..fd9fd877 100644
--- a/lib/internet.js
+++ b/lib/internet.js
@@ -1,112 +1,113 @@
-var faker = require('./index'),
- password_generator = require('../vendor/password-generator.js'),
+var password_generator = require('../vendor/password-generator.js'),
random_ua = require('../vendor/user-agent');
-var internet = {
-
- avatar: function () {
- return faker.random.array_element(faker.definitions.internet.avatar_uri);
- },
-
- email: function (firstName, lastName, provider) {
- provider = provider || faker.random.array_element(faker.definitions.internet.free_email);
- return faker.helpers.slugify(faker.internet.userName(firstName, lastName)) + "@" + provider;
- },
-
- userName: function (firstName, lastName) {
- var result;
- firstName = firstName || faker.name.firstName();
- lastName = lastName || faker.name.lastName();
- switch (faker.random.number(2)) {
- case 0:
- result = firstName + faker.random.number(99);
- break;
- case 1:
- result = firstName + faker.random.array_element([".", "_"]) + lastName;
- break;
- case 2:
- result = firstName + faker.random.array_element([".", "_"]) + lastName + faker.random.number(99);
- break;
- }
- result = result.toString().replace(/'/g, "");
- result = result.replace(/ /g, "");
- return result;
- },
-
- protocol: function () {
- var protocols = ['http','https'];
- return faker.random.array_element(protocols);
- },
-
- url: function () {
- return faker.internet.protocol() + '://' + faker.internet.domainName();
- },
-
- domainName: function () {
- return faker.internet.domainWord() + "." + faker.internet.domainSuffix();
- },
-
- domainSuffix: function () {
- return faker.random.array_element(faker.definitions.internet.domain_suffix);
- },
-
- domainWord: function () {
- return faker.name.firstName().replace(/([\\~#&*{}/:<>?|\"])/ig, '').toLowerCase();
- },
-
- ip: function () {
- var randNum = function () {
- return (faker.random.number(255)).toFixed(0);
- };
-
- var result = [];
- for (var i = 0; i < 4; i++) {
- result[i] = randNum();
- }
-
- return result.join(".");
- },
-
- userAgent: function () {
- return random_ua.generate();
- },
-
- color: function (baseRed255, baseGreen255, baseBlue255) {
- baseRed255 = baseRed255 || 0;
- baseGreen255 = baseGreen255 || 0;
- baseBlue255 = baseBlue255 || 0;
- // based on awesome response : http://stackoverflow.com/questions/43044/algorithm-to-randomly-generate-an-aesthetically-pleasing-color-palette
- var red = Math.floor((faker.random.number(256) + baseRed255) / 2);
- var green = Math.floor((faker.random.number(256) + baseGreen255) / 2);
- var blue = Math.floor((faker.random.number(256) + baseBlue255) / 2);
- var redStr = red.toString(16);
- var greenStr = green.toString(16);
- var blueStr = blue.toString(16);
- return '#' +
- (redStr.length === 1 ? '0' : '') + redStr +
- (greenStr.length === 1 ? '0' : '') + greenStr +
- (blueStr.length === 1 ? '0': '') + blueStr;
-
- },
-
- mac: function(){
- var i, mac = "";
- for (i=0; i < 12; i++) {
- mac+= parseInt(Math.random()*16).toString(16);
- if (i%2==1 && i != 11) {
- mac+=":";
- }
- }
- return mac;
- },
-
- password: function (len, memorable, pattern, prefix) {
- len = len || 15;
- if (typeof memorable === "undefined") {
- memorable = false;
+var Internet = function (faker) {
+ var self = this;
+ self.avatar = function () {
+ return faker.random.array_element(faker.definitions.internet.avatar_uri);
+ };
+
+ self.email = function (firstName, lastName, provider) {
+ provider = provider || faker.random.array_element(faker.definitions.internet.free_email);
+ return faker.helpers.slugify(faker.internet.userName(firstName, lastName)) + "@" + provider;
+ };
+
+ self.userName = function (firstName, lastName) {
+ var result;
+ firstName = firstName || faker.name.firstName();
+ lastName = lastName || faker.name.lastName();
+ switch (faker.random.number(2)) {
+ case 0:
+ result = firstName + faker.random.number(99);
+ break;
+ case 1:
+ result = firstName + faker.random.array_element([".", "_"]) + lastName;
+ break;
+ case 2:
+ result = firstName + faker.random.array_element([".", "_"]) + lastName + faker.random.number(99);
+ break;
}
- return password_generator(len, memorable, pattern, prefix);
+ result = result.toString().replace(/'/g, "");
+ result = result.replace(/ /g, "");
+ return result;
+ };
+
+ self.protocol = function () {
+ var protocols = ['http','https'];
+ return faker.random.array_element(protocols);
+ };
+
+ self.url = function () {
+ return faker.internet.protocol() + '://' + faker.internet.domainName();
+ };
+
+ self.domainName = function () {
+ return faker.internet.domainWord() + "." + faker.internet.domainSuffix();
+ };
+
+ self.domainSuffix = function () {
+ return faker.random.array_element(faker.definitions.internet.domain_suffix);
+ };
+
+ self.domainWord = function () {
+ return faker.name.firstName().replace(/([\\~#&*{}/:<>?|\"])/ig, '').toLowerCase();
+ };
+
+ self.ip = function () {
+ var randNum = function () {
+ return (faker.random.number(255)).toFixed(0);
+ };
+
+ var result = [];
+ for (var i = 0; i < 4; i++) {
+ result[i] = randNum();
+ }
+
+ return result.join(".");
+ };
+
+ self.userAgent = function () {
+ return random_ua.generate();
+ };
+
+ self.color = function (baseRed255, baseGreen255, baseBlue255) {
+ baseRed255 = baseRed255 || 0;
+ baseGreen255 = baseGreen255 || 0;
+ baseBlue255 = baseBlue255 || 0;
+ // based on awesome response : http://stackoverflow.com/questions/43044/algorithm-to-randomly-generate-an-aesthetically-pleasing-color-palette
+ var red = Math.floor((faker.random.number(256) + baseRed255) / 2);
+ var green = Math.floor((faker.random.number(256) + baseGreen255) / 2);
+ var blue = Math.floor((faker.random.number(256) + baseBlue255) / 2);
+ var redStr = red.toString(16);
+ var greenStr = green.toString(16);
+ var blueStr = blue.toString(16);
+ return '#' +
+ (redStr.length === 1 ? '0' : '') + redStr +
+ (greenStr.length === 1 ? '0' : '') + greenStr +
+ (blueStr.length === 1 ? '0': '') + blueStr;
+
+ };
+
+ self.mac = function(){
+ var i, mac = "";
+ for (i=0; i < 12; i++) {
+ mac+= parseInt(Math.random()*16).toString(16);
+ if (i%2==1 && i != 11) {
+ mac+=":";
+ }
+ }
+ return mac;
+ };
+
+ self.password = function (len, memorable, pattern, prefix) {
+ len = len || 15;
+ if (typeof memorable === "undefined") {
+ memorable = false;
}
+ return password_generator(len, memorable, pattern, prefix);
+ }
+
};
-module.exports = internet;
+
+module["exports"] = Internet;
diff --git a/lib/locales.js b/lib/locales.js
index 2b092372..a9cba642 100644
--- a/lib/locales.js
+++ b/lib/locales.js
@@ -1,4 +1,3 @@
-var faker = require('./index');
exports['de'] = require('./locales/de');
exports['de_AT'] = require('./locales/de_AT');
exports['de_CH'] = require('./locales/de_CH');
diff --git a/lib/locales/de/index.js b/lib/locales/de/index.js
index 3c6eeaf2..6dfe27a3 100644
--- a/lib/locales/de/index.js
+++ b/lib/locales/de/index.js
@@ -7,4 +7,4 @@ de.internet = require("./internet");
de.lorem = require("./lorem");
de.name = require("./name");
de.phone_number = require("./phone_number");
-de.cell_phone = require("./cell_phone");
+de.cell_phone = require("./cell_phone"); \ No newline at end of file
diff --git a/lib/lorem.js b/lib/lorem.js
index 54a28998..f5d50d73 100644
--- a/lib/lorem.js
+++ b/lib/lorem.js
@@ -1,47 +1,51 @@
-var faker = require('./index');
-var Helpers = require('./helpers');
-
-var lorem = {
- words: function (num) {
- if (typeof num == 'undefined') { num = 3; }
- return Helpers.shuffle(faker.definitions.lorem.words).slice(0, num);
- },
-
- sentence: function (wordCount, range) {
- if (typeof wordCount == 'undefined') { wordCount = 3; }
- if (typeof range == 'undefined') { range = 7; }
-
- // strange issue with the node_min_test failing for captialize, please fix and add faker.lorem.back
- //return faker.lorem.words(wordCount + Helpers.randomNumber(range)).join(' ').capitalize();
-
- return faker.lorem.words(wordCount + faker.random.number(range)).join(' ');
- },
-
- sentences: function (sentenceCount) {
- if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
- var sentences = [];
- for (sentenceCount; sentenceCount > 0; sentenceCount--) {
- sentences.push(faker.lorem.sentence());
- }
- return sentences.join("\n");
- },
-
- paragraph: function (sentenceCount) {
- if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
- return faker.lorem.sentences(sentenceCount + faker.random.number(3));
- },
-
- paragraphs: function (paragraphCount, separator) {
- if (typeof separator === "undefined") {
- separator = "\n \r";
- }
- if (typeof paragraphCount == 'undefined') { paragraphCount = 3; }
- var paragraphs = [];
- for (paragraphCount; paragraphCount > 0; paragraphCount--) {
- paragraphs.push(faker.lorem.paragraph());
+
+var Lorem = function (faker) {
+ var self = this;
+ var Helpers = faker.helpers;
+
+ self.words = function (num) {
+ if (typeof num == 'undefined') { num = 3; }
+ return Helpers.shuffle(faker.definitions.lorem.words).slice(0, num);
+ };
+
+ self.sentence = function (wordCount, range) {
+ if (typeof wordCount == 'undefined') { wordCount = 3; }
+ if (typeof range == 'undefined') { range = 7; }
+
+ // strange issue with the node_min_test failing for captialize, please fix and add faker.lorem.back
+ //return faker.lorem.words(wordCount + Helpers.randomNumber(range)).join(' ').capitalize();
+
+ return faker.lorem.words(wordCount + faker.random.number(range)).join(' ');
+ };
+
+ self.sentences = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ var sentences = [];
+ for (sentenceCount; sentenceCount > 0; sentenceCount--) {
+ sentences.push(faker.lorem.sentence());
}
- return paragraphs.join(separator);
+ return sentences.join("\n");
+ };
+
+ self.paragraph = function (sentenceCount) {
+ if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
+ return faker.lorem.sentences(sentenceCount + faker.random.number(3));
+ };
+
+ self.paragraphs = function (paragraphCount, separator) {
+ if (typeof separator === "undefined") {
+ separator = "\n \r";
}
+ if (typeof paragraphCount == 'undefined') { paragraphCount = 3; }
+ var paragraphs = [];
+ for (paragraphCount; paragraphCount > 0; paragraphCount--) {
+ paragraphs.push(faker.lorem.paragraph());
+ }
+ return paragraphs.join(separator);
+ }
+
+ return self;
};
-module.exports = lorem;
+
+module["exports"] = Lorem;
diff --git a/lib/name.js b/lib/name.js
index 5d3864f6..5f1c577f 100644
--- a/lib/name.js
+++ b/lib/name.js
@@ -1,99 +1,97 @@
-var faker = require('./index');
+function Name (faker) {
-var _name = {
-
- firstName: function (gender) {
- if (typeof faker.definitions.name.male_first_name !== "undefined" && typeof faker.definitions.name.female_first_name !== "undefined") {
- // some locale datasets ( like ru ) have first_name split by gender. since the name.first_name field does not exist in these datasets,
- // we must randomly pick a name from either gender array so faker.name.firstName will return the correct locale data ( and not fallback )
- if (typeof gender !== 'number') {
- gender = faker.random.number(1);
- }
- if (gender === 0) {
- return faker.random.array_element(faker.locales[faker.locale].name.male_first_name)
- } else {
- return faker.random.array_element(faker.locales[faker.locale].name.female_first_name);
- }
+ this.firstName = function (gender) {
+ if (typeof faker.definitions.name.male_first_name !== "undefined" && typeof faker.definitions.name.female_first_name !== "undefined") {
+ // some locale datasets ( like ru ) have first_name split by gender. since the name.first_name field does not exist in these datasets,
+ // we must randomly pick a name from either gender array so faker.name.firstName will return the correct locale data ( and not fallback )
+ if (typeof gender !== 'number') {
+ gender = faker.random.number(1);
+ }
+ if (gender === 0) {
+ return faker.random.array_element(faker.locales[faker.locale].name.male_first_name)
+ } else {
+ return faker.random.array_element(faker.locales[faker.locale].name.female_first_name);
}
- return faker.random.array_element(faker.definitions.name.first_name);
- },
+ }
+ return faker.random.array_element(faker.definitions.name.first_name);
+ };
- lastName: function (gender) {
- if (typeof faker.definitions.name.male_last_name !== "undefined" && typeof faker.definitions.name.female_last_name !== "undefined") {
- // some locale datasets ( like ru ) have last_name split by gender. i have no idea how last names can have genders, but also i do not speak russian
- // see above comment of firstName method
- if (typeof gender !== 'number') {
- gender = faker.random.number(1);
- }
- if (gender === 0) {
- return faker.random.array_element(faker.locales[faker.locale].name.male_last_name);
- } else {
- return faker.random.array_element(faker.locales[faker.locale].name.female_last_name);
- }
+ this.lastName = function (gender) {
+ if (typeof faker.definitions.name.male_last_name !== "undefined" && typeof faker.definitions.name.female_last_name !== "undefined") {
+ // some locale datasets ( like ru ) have last_name split by gender. i have no idea how last names can have genders, but also i do not speak russian
+ // see above comment of firstName method
+ if (typeof gender !== 'number') {
+ gender = faker.random.number(1);
+ }
+ if (gender === 0) {
+ return faker.random.array_element(faker.locales[faker.locale].name.male_last_name);
+ } else {
+ return faker.random.array_element(faker.locales[faker.locale].name.female_last_name);
}
- return faker.random.array_element(faker.definitions.name.last_name);
- },
+ }
+ return faker.random.array_element(faker.definitions.name.last_name);
+ };
- findName: function (firstName, lastName, gender) {
- var r = faker.random.number(8);
- var prefix, suffix;
- // in particular locales first and last names split by gender,
- // thus we keep consistency by passing 0 as male and 1 as female
- if (typeof gender !== 'number') {
- gender = faker.random.number(1);
- }
- firstName = firstName || faker.name.firstName(gender);
- lastName = lastName || faker.name.lastName(gender);
- switch (r) {
- case 0:
- prefix = faker.name.prefix();
- if (prefix) {
- return prefix + " " + firstName + " " + lastName;
- }
- case 1:
- suffix = faker.name.prefix();
- if (suffix) {
- return firstName + " " + lastName + " " + suffix;
- }
- }
+ this.findName = function (firstName, lastName, gender) {
+ var r = faker.random.number(8);
+ var prefix, suffix;
+ // in particular locales first and last names split by gender,
+ // thus we keep consistency by passing 0 as male and 1 as female
+ if (typeof gender !== 'number') {
+ gender = faker.random.number(1);
+ }
+ firstName = firstName || faker.name.firstName(gender);
+ lastName = lastName || faker.name.lastName(gender);
+ switch (r) {
+ case 0:
+ prefix = faker.name.prefix();
+ if (prefix) {
+ return prefix + " " + firstName + " " + lastName;
+ }
+ case 1:
+ suffix = faker.name.prefix();
+ if (suffix) {
+ return firstName + " " + lastName + " " + suffix;
+ }
+ }
- return firstName + " " + lastName;
- },
+ return firstName + " " + lastName;
+ };
- jobTitle: function () {
- return faker.name.jobDescriptor() + " " +
- faker.name.jobArea() + " " +
- faker.name.jobType();
- },
+ this.jobTitle = function () {
+ return faker.name.jobDescriptor() + " " +
+ faker.name.jobArea() + " " +
+ faker.name.jobType();
+ };
- prefix: function () {
- return faker.random.array_element(faker.definitions.name.prefix);
- },
+ this.prefix = function () {
+ return faker.random.array_element(faker.definitions.name.prefix);
+ };
- suffix: function () {
- return faker.random.array_element(faker.definitions.name.suffix);
- },
+ this.suffix = function () {
+ return faker.random.array_element(faker.definitions.name.suffix);
+ };
- title: function() {
- var descriptor = faker.random.array_element(faker.definitions.name.title.descriptor),
- level = faker.random.array_element(faker.definitions.name.title.level),
- job = faker.random.array_element(faker.definitions.name.title.job);
+ this.title = function() {
+ var descriptor = faker.random.array_element(faker.definitions.name.title.descriptor),
+ level = faker.random.array_element(faker.definitions.name.title.level),
+ job = faker.random.array_element(faker.definitions.name.title.job);
- return descriptor + " " + level + " " + job;
- },
+ return descriptor + " " + level + " " + job;
+ };
- jobDescriptor: function () {
- return faker.random.array_element(faker.definitions.name.title.descriptor);
- },
+ this.jobDescriptor = function () {
+ return faker.random.array_element(faker.definitions.name.title.descriptor);
+ };
- jobArea: function () {
- return faker.random.array_element(faker.definitions.name.title.level);
- },
+ this.jobArea = function () {
+ return faker.random.array_element(faker.definitions.name.title.level);
+ };
- jobType: function () {
- return faker.random.array_element(faker.definitions.name.title.job);
- }
+ this.jobType = function () {
+ return faker.random.array_element(faker.definitions.name.title.job);
+ };
-};
+}
-module.exports = _name;
+module['exports'] = Name; \ No newline at end of file
diff --git a/lib/phone_number.js b/lib/phone_number.js
index 2b6bb142..f683832c 100644
--- a/lib/phone_number.js
+++ b/lib/phone_number.js
@@ -1,21 +1,23 @@
-var faker = require('./index');
+var Phone = function (faker) {
+ var self = this;
-var phone = {
- phoneNumber: function (format) {
- format = format || faker.phone.phoneFormats();
- return faker.helpers.replaceSymbolWithNumber(format);
- },
+ self.phoneNumber = function (format) {
+ format = format || faker.phone.phoneFormats();
+ return faker.helpers.replaceSymbolWithNumber(format);
+ };
- // FIXME: this is strange passing in an array index.
- phoneNumberFormat: function (phoneFormatsArrayIndex) {
- phoneFormatsArrayIndex = phoneFormatsArrayIndex || 0;
- return faker.helpers.replaceSymbolWithNumber(faker.definitions.phone_number.formats[phoneFormatsArrayIndex]);
- },
+ // FIXME: this is strange passing in an array index.
+ self.phoneNumberFormat = function (phoneFormatsArrayIndex) {
+ phoneFormatsArrayIndex = phoneFormatsArrayIndex || 0;
+ return faker.helpers.replaceSymbolWithNumber(faker.definitions.phone_number.formats[phoneFormatsArrayIndex]);
+ };
- phoneFormats: function () {
- return faker.random.array_element(faker.definitions.phone_number.formats);
- }
+ self.phoneFormats = function () {
+ return faker.random.array_element(faker.definitions.phone_number.formats);
+ };
+
+ return self;
};
-module.exports = phone;
+module['exports'] = Phone; \ No newline at end of file
diff --git a/lib/random.js b/lib/random.js
index 41a06f28..7d592849 100644
--- a/lib/random.js
+++ b/lib/random.js
@@ -1,71 +1,78 @@
var mersenne = require('../vendor/mersenne');
-var faker = require('./index');
-
-var random = {
- // returns a single random number based on a max number or range
- 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 = 1;
- }
- 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 = options.precision * Math.floor(
- mersenne.rand(max / options.precision, options.min / options.precision));
-
- return randomNumber;
-
- },
-
- // takes an array and returns a random element of the array
- array_element: function (array) {
- array = array || ["a", "b", "c"];
- var r = faker.random.number({ max: array.length - 1 });
- return array[r];
- },
-
- // takes an object and returns the randomly key or value
- object_element: function (object, field) {
- object = object || {};
- var array = Object.keys(object);
- var key = faker.random.array_element(array);
-
- return field === "key" ? key : object[key];
- },
-
- uuid : function () {
- var RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
- var replacePlaceholders = function (placeholder) {
- var random = Math.random()*16|0;
- var value = placeholder == 'x' ? random : (random &0x3 | 0x8);
- return value.toString(16);
+
+function Random (faker) {
+
+ // returns a single random number based on a max number or range
+ this.number = function (options) {
+
+ if (typeof options === "number") {
+ options = {
+ max: options
};
- return RFC4122_TEMPLATE.replace(/[xy]/g, replacePlaceholders);
- },
+ }
+
+ options = options || {};
+
+ if (typeof options.min === "undefined") {
+ options.min = 0;
+ }
+
+ if (typeof options.max === "undefined") {
+ options.max = 1;
+ }
+ 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 = options.precision * Math.floor(
+ mersenne.rand(max / options.precision, options.min / options.precision));
+
+ return randomNumber;
+
+ }
+
+ // takes an array and returns a random element of the array
+ this.array_element = function (array) {
+ array = array || ["a", "b", "c"];
+ var r = faker.random.number({ max: array.length - 1 });
+ return array[r];
+ }
+
+ // takes an object and returns the randomly key or value
+ this.object_element = function (object, field) {
+ object = object || {};
+ var array = Object.keys(object);
+ var key = faker.random.array_element(array);
+
+ return field === "key" ? key : object[key];
+ }
+
+ this.uuid = function () {
+ var RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
+ var replacePlaceholders = function (placeholder) {
+ var random = Math.random()*16|0;
+ var value = placeholder == 'x' ? random : (random &0x3 | 0x8);
+ return value.toString(16);
+ };
+ return RFC4122_TEMPLATE.replace(/[xy]/g, replacePlaceholders);
+ }
+
+ this.boolean =function () {
+ return !!faker.random.number(1)
+ }
+
+ return this;
+
+}
+
+module['exports'] = Random;
+
- boolean: function () {
- return !!faker.random.number(1)
- }
-};
-module.exports = random;
+// module.exports = random;
diff --git a/locale/ReadMe.md b/locale/ReadMe.md
new file mode 100644
index 00000000..1b56bc8f
--- /dev/null
+++ b/locale/ReadMe.md
@@ -0,0 +1,12 @@
+# Read Me
+
+The files in this directory have been auto-generated from the `gulpfile`.
+
+These file exist in order to allow users to require the `faker` library using a specific locale ( instead of the default behavior or loading all all locales ).
+
+Example:
+
+``` js
+var faker = require('../locale/en');
+console.log(faker.name.findName());
+``` \ No newline at end of file
diff --git a/locale/de.js b/locale/de.js
index e851119a..5c29adac 100644
--- a/locale/de.js
+++ b/locale/de.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "de";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'de', localeFallback: 'en' });
faker.locales['de'] = require('../lib/locales/de');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/de_AT.js b/locale/de_AT.js
index 0a7a4529..193a9a47 100644
--- a/locale/de_AT.js
+++ b/locale/de_AT.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "de_AT";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'de_AT', localeFallback: 'en' });
faker.locales['de_AT'] = require('../lib/locales/de_AT');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/de_CH.js b/locale/de_CH.js
index 20b5f3d9..6685dab3 100644
--- a/locale/de_CH.js
+++ b/locale/de_CH.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "de_CH";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'de_CH', localeFallback: 'en' });
faker.locales['de_CH'] = require('../lib/locales/de_CH');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en.js b/locale/en.js
index 5b4fac04..4eb5d1bf 100644
--- a/locale/en.js
+++ b/locale/en.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en', localeFallback: 'en' });
+faker.locales['en'] = require('../lib/locales/en');
faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_AU.js b/locale/en_AU.js
index d38c9125..fbb140c8 100644
--- a/locale/en_AU.js
+++ b/locale/en_AU.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_AU";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_AU', localeFallback: 'en' });
faker.locales['en_AU'] = require('../lib/locales/en_AU');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_BORK.js b/locale/en_BORK.js
index e3f46825..62392506 100644
--- a/locale/en_BORK.js
+++ b/locale/en_BORK.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_BORK";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_BORK', localeFallback: 'en' });
faker.locales['en_BORK'] = require('../lib/locales/en_BORK');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_CA.js b/locale/en_CA.js
index 92d60ccc..bfecb640 100644
--- a/locale/en_CA.js
+++ b/locale/en_CA.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_CA";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_CA', localeFallback: 'en' });
faker.locales['en_CA'] = require('../lib/locales/en_CA');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_GB.js b/locale/en_GB.js
index 1aca74e5..fcef0af3 100644
--- a/locale/en_GB.js
+++ b/locale/en_GB.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_GB";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_GB', localeFallback: 'en' });
faker.locales['en_GB'] = require('../lib/locales/en_GB');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_IND.js b/locale/en_IND.js
index 7aea1659..a46fe6aa 100644
--- a/locale/en_IND.js
+++ b/locale/en_IND.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_IND";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_IND', localeFallback: 'en' });
faker.locales['en_IND'] = require('../lib/locales/en_IND');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_US.js b/locale/en_US.js
index e7176c52..8d75c6cb 100644
--- a/locale/en_US.js
+++ b/locale/en_US.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_US";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_US', localeFallback: 'en' });
faker.locales['en_US'] = require('../lib/locales/en_US');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/en_au_ocker.js b/locale/en_au_ocker.js
index 32d5cfa8..b6d32073 100644
--- a/locale/en_au_ocker.js
+++ b/locale/en_au_ocker.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "en_au_ocker";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'en_au_ocker', localeFallback: 'en' });
faker.locales['en_au_ocker'] = require('../lib/locales/en_au_ocker');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/es.js b/locale/es.js
index 05dc8eac..4759ed85 100644
--- a/locale/es.js
+++ b/locale/es.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "es";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'es', localeFallback: 'en' });
faker.locales['es'] = require('../lib/locales/es');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/fa.js b/locale/fa.js
index 4030381e..24889c92 100644
--- a/locale/fa.js
+++ b/locale/fa.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "fa";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'fa', localeFallback: 'en' });
faker.locales['fa'] = require('../lib/locales/fa');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/fr.js b/locale/fr.js
index 2612d57e..bf175f4d 100644
--- a/locale/fr.js
+++ b/locale/fr.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "fr";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'fr', localeFallback: 'en' });
faker.locales['fr'] = require('../lib/locales/fr');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/fr_CA.js b/locale/fr_CA.js
index f1cf0446..a777b205 100644
--- a/locale/fr_CA.js
+++ b/locale/fr_CA.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "fr_CA";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'fr_CA', localeFallback: 'en' });
faker.locales['fr_CA'] = require('../lib/locales/fr_CA');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/ge.js b/locale/ge.js
index ec435b05..a4ee50cf 100644
--- a/locale/ge.js
+++ b/locale/ge.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "ge";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'ge', localeFallback: 'en' });
faker.locales['ge'] = require('../lib/locales/ge');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/it.js b/locale/it.js
index 38fbd63f..b0fc88ef 100644
--- a/locale/it.js
+++ b/locale/it.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "it";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'it', localeFallback: 'en' });
faker.locales['it'] = require('../lib/locales/it');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/ja.js b/locale/ja.js
index 72ac4a57..07721eb0 100644
--- a/locale/ja.js
+++ b/locale/ja.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "ja";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'ja', localeFallback: 'en' });
faker.locales['ja'] = require('../lib/locales/ja');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/ko.js b/locale/ko.js
index b1da382c..47488a39 100644
--- a/locale/ko.js
+++ b/locale/ko.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "ko";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'ko', localeFallback: 'en' });
faker.locales['ko'] = require('../lib/locales/ko');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/nb_NO.js b/locale/nb_NO.js
index 28e63009..ee65719a 100644
--- a/locale/nb_NO.js
+++ b/locale/nb_NO.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "nb_NO";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'nb_NO', localeFallback: 'en' });
faker.locales['nb_NO'] = require('../lib/locales/nb_NO');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/nep.js b/locale/nep.js
index 5f0353ab..a215934a 100644
--- a/locale/nep.js
+++ b/locale/nep.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "nep";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'nep', localeFallback: 'en' });
faker.locales['nep'] = require('../lib/locales/nep');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/nl.js b/locale/nl.js
index e9fe55d1..4a6bf44d 100644
--- a/locale/nl.js
+++ b/locale/nl.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "nl";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'nl', localeFallback: 'en' });
faker.locales['nl'] = require('../lib/locales/nl');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/pl.js b/locale/pl.js
index 52e7c315..fe7207e4 100644
--- a/locale/pl.js
+++ b/locale/pl.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "pl";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'pl', localeFallback: 'en' });
faker.locales['pl'] = require('../lib/locales/pl');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/pt_BR.js b/locale/pt_BR.js
index 45fab9e7..6c926d2d 100644
--- a/locale/pt_BR.js
+++ b/locale/pt_BR.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "pt_BR";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'pt_BR', localeFallback: 'en' });
faker.locales['pt_BR'] = require('../lib/locales/pt_BR');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/ru.js b/locale/ru.js
index 17481f53..286686d4 100644
--- a/locale/ru.js
+++ b/locale/ru.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "ru";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'ru', localeFallback: 'en' });
faker.locales['ru'] = require('../lib/locales/ru');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/sk.js b/locale/sk.js
index aada039a..d9f9c5d7 100644
--- a/locale/sk.js
+++ b/locale/sk.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "sk";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'sk', localeFallback: 'en' });
faker.locales['sk'] = require('../lib/locales/sk');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/sv.js b/locale/sv.js
index 2677674e..7d97ab62 100644
--- a/locale/sv.js
+++ b/locale/sv.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "sv";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'sv', localeFallback: 'en' });
faker.locales['sv'] = require('../lib/locales/sv');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/tr.js b/locale/tr.js
index 8eaabce6..0b8e155f 100644
--- a/locale/tr.js
+++ b/locale/tr.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "tr";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'tr', localeFallback: 'en' });
faker.locales['tr'] = require('../lib/locales/tr');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/uk.js b/locale/uk.js
index 40b749b7..708ba058 100644
--- a/locale/uk.js
+++ b/locale/uk.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "uk";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'uk', localeFallback: 'en' });
faker.locales['uk'] = require('../lib/locales/uk');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/vi.js b/locale/vi.js
index 5b50e677..b20de574 100644
--- a/locale/vi.js
+++ b/locale/vi.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "vi";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'vi', localeFallback: 'en' });
faker.locales['vi'] = require('../lib/locales/vi');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/zh_CN.js b/locale/zh_CN.js
index d621dbb3..ee9a169f 100644
--- a/locale/zh_CN.js
+++ b/locale/zh_CN.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "zh_CN";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'zh_CN', localeFallback: 'en' });
faker.locales['zh_CN'] = require('../lib/locales/zh_CN');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;
diff --git a/locale/zh_TW.js b/locale/zh_TW.js
index 9955e104..a54b6846 100644
--- a/locale/zh_TW.js
+++ b/locale/zh_TW.js
@@ -1,4 +1,5 @@
-var faker = require('../lib');
-faker.locale = "zh_TW";
+var Faker = require('../lib');
+var faker = new Faker({ locale: 'zh_TW', localeFallback: 'en' });
faker.locales['zh_TW'] = require('../lib/locales/zh_TW');
+faker.locales['en'] = require('../lib/locales/en');
module['exports'] = faker;