diff options
| author | Shinigami <[email protected]> | 2022-01-14 16:56:57 +0100 |
|---|---|---|
| committer | Damien Retzinger <[email protected]> | 2022-01-14 18:37:49 -0500 |
| commit | 6122d3c9b0e6c352514bf35707187da56e379359 (patch) | |
| tree | f8eeff0e0c557e8931168c48113f28c47ae573fc /src/git.ts | |
| parent | e0005addb5c21773e0f61b2ba8be821b94822a10 (diff) | |
| download | faker-6122d3c9b0e6c352514bf35707187da56e379359.tar.xz faker-6122d3c9b0e6c352514bf35707187da56e379359.zip | |
feat: migrate git (#78)
Diffstat (limited to 'src/git.ts')
| -rw-r--r-- | src/git.ts | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/git.ts b/src/git.ts new file mode 100644 index 00000000..366e819e --- /dev/null +++ b/src/git.ts @@ -0,0 +1,105 @@ +import type { Faker } from '.'; + +export class Git { + private hexChars = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + ]; + + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Git.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + } + + /** + * branch + * + * @method faker.git.branch + */ + branch(): string { + const noun = this.faker.hacker.noun().replace(' ', '-'); + const verb = this.faker.hacker.verb().replace(' ', '-'); + return noun + '-' + verb; + } + + /** + * commitEntry + * + * @method faker.git.commitEntry + * @param options + */ + commitEntry(options: { merge?: boolean } = {}): string { + // TODO @Shinigami92 2022-01-11: We may want to make it configurable to use just `\n` instead of `\r\n` + let entry = 'commit {{git.commitSha}}\r\n'; + + if (options.merge || this.faker.datatype.number({ min: 0, max: 4 }) === 0) { + entry += 'Merge: {{git.shortSha}} {{git.shortSha}}\r\n'; + } + + entry += + 'Author: {{name.firstName}} {{name.lastName}} <{{internet.email}}>\r\n'; + entry += 'Date: ' + this.faker.date.recent().toString() + '\r\n'; + entry += '\r\n\xa0\xa0\xa0\xa0{{git.commitMessage}}\r\n'; + + return this.faker.fake(entry); + } + + /** + * commitMessage + * + * @method faker.git.commitMessage + */ + commitMessage(): string { + const format = '{{hacker.verb}} {{hacker.adjective}} {{hacker.noun}}'; + return this.faker.fake(format); + } + + /** + * commitSha + * + * @method faker.git.commitSha + */ + commitSha(): string { + let commit = ''; + + for (let i = 0; i < 40; i++) { + commit += this.faker.random.arrayElement(this.hexChars); + } + + return commit; + } + + /** + * shortSha + * + * @method faker.git.shortSha + */ + shortSha(): string { + let shortSha = ''; + + for (let i = 0; i < 7; i++) { + shortSha += this.faker.random.arrayElement(this.hexChars); + } + + return shortSha; + } +} |
