diff options
| author | Shinigami <[email protected]> | 2022-01-14 17:39:47 +0100 |
|---|---|---|
| committer | Damien Retzinger <[email protected]> | 2022-01-14 18:37:49 -0500 |
| commit | 82ab145286909d49a798c95bf46ea504ebdd7be7 (patch) | |
| tree | 56cf2a81352f5bdd080a05db350dc8281009df26 /src | |
| parent | 0abec83219a3e070ef9517849df556cad609ec4d (diff) | |
| download | faker-82ab145286909d49a798c95bf46ea504ebdd7be7.tar.xz faker-82ab145286909d49a798c95bf46ea504ebdd7be7.zip | |
feat: migrate commerce (#106)
Diffstat (limited to 'src')
| -rw-r--r-- | src/commerce.ts | 151 | ||||
| -rw-r--r-- | src/index.ts | 3 |
2 files changed, 153 insertions, 1 deletions
diff --git a/src/commerce.ts b/src/commerce.ts new file mode 100644 index 00000000..61a5f5a1 --- /dev/null +++ b/src/commerce.ts @@ -0,0 +1,151 @@ +import type { Faker } from '.'; + +export class Commerce { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Commerce.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + } + + /** + * color + * + * @method faker.commerce.color + */ + color(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.color + ); + } + + /** + * department + * + * @method faker.commerce.department + */ + department(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.department + ); + } + + /** + * productName + * + * @method faker.commerce.productName + */ + productName(): string { + return ( + this.faker.commerce.productAdjective() + + ' ' + + this.faker.commerce.productMaterial() + + ' ' + + this.faker.commerce.product() + ); + } + + /** + * price + * + * @method faker.commerce.price + * @param min + * @param max + * @param dec + * @param symbol + */ + price( + min: number = 1, + max: number = 1000, + dec: number = 2, + symbol: string = '' + ): string { + if (min < 0 || max < 0) { + return symbol + 0.0; + } + + const randValue = this.faker.datatype.number({ max: max, min: min }); + + return ( + symbol + + (Math.round(randValue * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed( + dec + ) + ); + } + + // TODO @Shinigami92 2022-01-12: unimplemented member functions + + /* + categories (num) { + var categories = []; + + do { + var category = this.faker.random.arrayElement(this.faker.definitions.commerce.department); + if(categories.indexOf(category) === -1) { + categories.push(category); + } + } while(categories.length < num); + + return categories; + }; + + */ + /* + mergeCategories (categories) { + var separator = this.faker.definitions.separator || " &"; + // TODO: find undefined here + categories = categories || this.faker.definitions.commerce.categories; + var commaSeparated = categories.slice(0, -1).join(', '); + + return [commaSeparated, categories[categories.length - 1]].join(separator + " "); + }; + */ + + /** + * productAdjective + * + * @method faker.commerce.productAdjective + */ + productAdjective(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.product_name.adjective + ); + } + + /** + * productMaterial + * + * @method faker.commerce.productMaterial + */ + productMaterial(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.product_name.material + ); + } + + /** + * product + * + * @method faker.commerce.product + */ + product(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.product_name.product + ); + } + + /** + * productDescription + * + * @method faker.commerce.productDescription + */ + productDescription(): string { + return this.faker.random.arrayElement( + this.faker.definitions.commerce.product_description + ); + } +} diff --git a/src/index.ts b/src/index.ts index 0fd77478..b5cdd3c4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ import { Animal } from './animal'; +import { Commerce } from './commerce'; import { Database } from './database'; import { Datatype } from './datatype'; import { _Date } from './date'; @@ -176,7 +177,7 @@ export class Faker { readonly address = new (require('./address'))(this); readonly animal: Animal = new Animal(this); - readonly commerce = new (require('./commerce'))(this); + readonly commerce: Commerce = new Commerce(this); readonly company = new (require('./company'))(this); readonly database: Database = new Database(this); readonly date: _Date = new _Date(this); |
