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/commerce.ts | |
| parent | 0abec83219a3e070ef9517849df556cad609ec4d (diff) | |
| download | faker-82ab145286909d49a798c95bf46ea504ebdd7be7.tar.xz faker-82ab145286909d49a798c95bf46ea504ebdd7be7.zip | |
feat: migrate commerce (#106)
Diffstat (limited to 'src/commerce.ts')
| -rw-r--r-- | src/commerce.ts | 151 |
1 files changed, 151 insertions, 0 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 + ); + } +} |
