Skip to content

Commit

Permalink
feat: migrate hacker (#81)
Browse files Browse the repository at this point in the history
  • Loading branch information
Shinigami92 authored and damienwebdev committed Jan 14, 2022
1 parent 07f8b44 commit e0005ad
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 3 deletions.
84 changes: 84 additions & 0 deletions src/hacker.ts
@@ -0,0 +1,84 @@
import type { Faker } from '.';

export class Hacker {
constructor(private readonly faker: Faker) {
// Bind `this` so namespaced is working correctly
for (const name of Object.getOwnPropertyNames(Hacker.prototype)) {
if (name === 'constructor' || typeof this[name] !== 'function') {
continue;
}
this[name] = this[name].bind(this);
}
}

/**
* abbreviation
*
* @method faker.hacker.abbreviation
*/
abbreviation() {
return this.faker.random.arrayElement(
this.faker.definitions.hacker.abbreviation
);
}

/**
* adjective
*
* @method faker.hacker.adjective
*/
adjective() {
return this.faker.random.arrayElement(
this.faker.definitions.hacker.adjective
);
}

/**
* noun
*
* @method faker.hacker.noun
*/
noun() {
return this.faker.random.arrayElement(this.faker.definitions.hacker.noun);
}

/**
* verb
*
* @method faker.hacker.verb
*/
verb() {
return this.faker.random.arrayElement(this.faker.definitions.hacker.verb);
}

/**
* ingverb
*
* @method faker.hacker.ingverb
*/
ingverb() {
return this.faker.random.arrayElement(
this.faker.definitions.hacker.ingverb
);
}

/**
* phrase
*
* @method faker.hacker.phrase
*/
phrase() {
const data = {
abbreviation: this.abbreviation,
adjective: this.adjective,
ingverb: this.ingverb,
noun: this.noun,
verb: this.verb,
};

const phrase = this.faker.random.arrayElement(
this.faker.definitions.hacker.phrase
);
return this.faker.helpers.mustache(phrase, data);
}
}
15 changes: 13 additions & 2 deletions src/helpers.ts
Expand Up @@ -289,13 +289,24 @@ export class Helpers {
* @param str
* @param data
*/
mustache(str: string | undefined, data: Record<string, string>): string {
mustache(
str: string | undefined,
data: Record<
string,
string | ((substring: string, ...args: any[]) => string)
>
): string {
if (typeof str === 'undefined') {
return '';
}
for (const p in data) {
const re = new RegExp('{{' + p + '}}', 'g');
str = str.replace(re, data[p]);
str = str.replace(
re,
// TODO christopher 2022-01-14: Try to improve the type or maybe use `if`
// @ts-expect-error
data[p]
);
}
return str;
}
Expand Down
3 changes: 2 additions & 1 deletion src/index.ts
@@ -1,5 +1,6 @@
import { Datatype } from './datatype';
import { _Date } from './date';
import { Hacker } from './hacker';
import { Helpers } from './helpers';
import { Mersenne } from './mersenne';
import { Random } from './random';
Expand Down Expand Up @@ -171,7 +172,7 @@ export class Faker {
readonly date: _Date = new _Date(this);
readonly finance = new (require('./finance'))(this);
readonly git = new (require('./git'))(this);
readonly hacker = new (require('./hacker'))(this);
readonly hacker: Hacker = new Hacker(this);
// TODO @Shinigami92 2022-01-12: iban was not used
// readonly iban = new (require('./iban'))(this);
readonly image = new (require('./image'))(this);
Expand Down

0 comments on commit e0005ad

Please sign in to comment.