aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShinigami <[email protected]>2022-01-14 17:39:47 +0100
committerDamien Retzinger <[email protected]>2022-01-14 18:37:49 -0500
commit82ab145286909d49a798c95bf46ea504ebdd7be7 (patch)
tree56cf2a81352f5bdd080a05db350dc8281009df26 /src
parent0abec83219a3e070ef9517849df556cad609ec4d (diff)
downloadfaker-82ab145286909d49a798c95bf46ea504ebdd7be7.tar.xz
faker-82ab145286909d49a798c95bf46ea504ebdd7be7.zip
feat: migrate commerce (#106)
Diffstat (limited to 'src')
-rw-r--r--src/commerce.ts151
-rw-r--r--src/index.ts3
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);