Skip to content

Commit

Permalink
feat(name): extract sex generator from gender to sex (#1168)
Browse files Browse the repository at this point in the history
  • Loading branch information
hankucz committed Aug 19, 2022
1 parent ca7cb41 commit ad3c9bf
Show file tree
Hide file tree
Showing 21 changed files with 77 additions and 26 deletions.
2 changes: 1 addition & 1 deletion src/definitions/name.ts
Expand Up @@ -5,7 +5,7 @@ import type { LocaleEntry } from './definitions';
*/
export type NameDefinitions = LocaleEntry<{
gender: string[];
binary_gender: string[];
sex: string[];

prefix?: string[];
female_prefix?: string[];
Expand Down
2 changes: 2 additions & 0 deletions src/locales/de/name/index.ts
Expand Up @@ -10,6 +10,7 @@ import male_first_name from './male_first_name';
import name_ from './name';
import nobility_title_prefix from './nobility_title_prefix';
import prefix from './prefix';
import sex from './sex';

const name: NameDefinitions = {
female_first_name,
Expand All @@ -19,6 +20,7 @@ const name: NameDefinitions = {
name: name_,
nobility_title_prefix,
prefix,
sex,
};

export default name;
1 change: 1 addition & 0 deletions src/locales/de/name/sex.ts
@@ -0,0 +1 @@
export default ['männlich', 'weiblich'];
1 change: 0 additions & 1 deletion src/locales/en/name/binary_gender.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/locales/en/name/index.ts
Expand Up @@ -3,7 +3,6 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import female_middle_name from './female_middle_name';
import first_name from './first_name';
Expand All @@ -14,11 +13,11 @@ import male_middle_name from './male_middle_name';
import middle_name from './middle_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import suffix from './suffix';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
female_middle_name,
first_name,
Expand All @@ -29,6 +28,7 @@ const name: NameDefinitions = {
middle_name,
name: name_,
prefix,
sex,
suffix,
title,
};
Expand Down
1 change: 1 addition & 0 deletions src/locales/en/name/sex.ts
@@ -0,0 +1 @@
export default ['female', 'male'];
4 changes: 2 additions & 2 deletions src/locales/fr/name/index.ts
Expand Up @@ -3,23 +3,23 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import first_name from './first_name';
import last_name from './last_name';
import male_first_name from './male_first_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
first_name,
last_name,
male_first_name,
name: name_,
prefix,
sex,
title,
};

Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions src/locales/fr_CH/name/index.ts
Expand Up @@ -3,23 +3,23 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import first_name from './first_name';
import last_name from './last_name';
import male_first_name from './male_first_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
first_name,
last_name,
male_first_name,
name: name_,
prefix,
sex,
title,
};

Expand Down
File renamed without changes.
1 change: 0 additions & 1 deletion src/locales/pl/name/binary_gender.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/locales/pl/name/index.ts
Expand Up @@ -3,25 +3,25 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import first_name from './first_name';
import gender from './gender';
import last_name from './last_name';
import male_first_name from './male_first_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
first_name,
gender,
last_name,
male_first_name,
name: name_,
prefix,
sex,
title,
};

Expand Down
1 change: 1 addition & 0 deletions src/locales/pl/name/sex.ts
@@ -0,0 +1 @@
export default ['kobieta', 'mężczyzna'];
4 changes: 2 additions & 2 deletions src/locales/pt_BR/name/index.ts
Expand Up @@ -3,24 +3,24 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import first_name from './first_name';
import last_name from './last_name';
import male_first_name from './male_first_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import suffix from './suffix';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
first_name,
last_name,
male_first_name,
name: name_,
prefix,
sex,
suffix,
title,
};
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions src/locales/ur/name/index.ts
Expand Up @@ -3,24 +3,24 @@
* Run 'pnpm run generate:locales' to update.
*/
import type { NameDefinitions } from '../../..';
import binary_gender from './binary_gender';
import female_first_name from './female_first_name';
import first_name from './first_name';
import last_name from './last_name';
import male_first_name from './male_first_name';
import name_ from './name';
import prefix from './prefix';
import sex from './sex';
import suffix from './suffix';
import title from './title';

const name: NameDefinitions = {
binary_gender,
female_first_name,
first_name,
last_name,
male_first_name,
name: name_,
prefix,
sex,
suffix,
title,
};
Expand Down
File renamed without changes.
33 changes: 27 additions & 6 deletions src/modules/name/index.ts
Expand Up @@ -245,24 +245,45 @@ export class Name {
}

/**
* Return a random gender.
* Returns a random gender.
*
* @param binary Whether to return only binary gender names. Defaults to `false`.
* @param binary (deprecated) Whether to return only binary gender names. Defaults to `false`.
*
* @see faker.name.sex() if you would like to generate binary-gender value
*
* @example
* faker.name.gender() // 'Trans*Man'
* faker.name.gender(true) // 'Female'
*/
gender(binary?: boolean): string {
if (binary) {
return this.faker.helpers.arrayElement(
this.faker.definitions.name.binary_gender
);
deprecated({
deprecated: 'faker.name.gender(true)',
proposed: 'faker.name.sex()',
since: '7.5',
until: '8.0',
});

return this.faker.name.sex();
}

return this.faker.helpers.arrayElement(this.faker.definitions.name.gender);
}

/**
* Returns a random sex.
*
* Output of this method is localised, so it should not be used to fill the parameter `sex`
* available in some other modules for example `faker.name.firstName()`.
*
* @see faker.name.gender() if you would like to generate gender related values.
*
* @example
* faker.name.sex() // 'female'
*/
sex(): string {
return this.faker.helpers.arrayElement(this.faker.definitions.name.sex);
}

/**
* Returns a random name prefix.
*
Expand Down
18 changes: 15 additions & 3 deletions test/__snapshots__/name.spec.ts.snap
Expand Up @@ -28,7 +28,7 @@ exports[`name > 42 > fullName > with sex 1`] = `"Melanie Schinner"`;

exports[`name > 42 > gender > noArgs 1`] = `"Gender nonconforming"`;

exports[`name > 42 > gender > with gender 1`] = `"Female"`;
exports[`name > 42 > gender > with gender 1`] = `"female"`;

exports[`name > 42 > jobArea 1`] = `"Identity"`;

Expand All @@ -50,6 +50,10 @@ exports[`name > 42 > prefix > noArgs 1`] = `"Mrs."`;

exports[`name > 42 > prefix > with gender 1`] = `"Mrs."`;

exports[`name > 42 > sex > noArgs 1`] = `"female"`;

exports[`name > 42 > sex > with gender 1`] = `"female"`;

exports[`name > 42 > suffix > noArgs 1`] = `"III"`;

exports[`name > 42 > suffix > with gender 1`] = `"III"`;
Expand Down Expand Up @@ -82,7 +86,7 @@ exports[`name > 1211 > fullName > with sex 1`] = `"Patti Koch"`;

exports[`name > 1211 > gender > noArgs 1`] = `"Trigender"`;

exports[`name > 1211 > gender > with gender 1`] = `"Male"`;
exports[`name > 1211 > gender > with gender 1`] = `"male"`;

exports[`name > 1211 > jobArea 1`] = `"Factors"`;

Expand All @@ -104,6 +108,10 @@ exports[`name > 1211 > prefix > noArgs 1`] = `"Dr."`;

exports[`name > 1211 > prefix > with gender 1`] = `"Dr."`;

exports[`name > 1211 > sex > noArgs 1`] = `"male"`;

exports[`name > 1211 > sex > with gender 1`] = `"male"`;

exports[`name > 1211 > suffix > noArgs 1`] = `"DVM"`;

exports[`name > 1211 > suffix > with gender 1`] = `"DVM"`;
Expand Down Expand Up @@ -136,7 +144,7 @@ exports[`name > 1337 > fullName > with sex 1`] = `"Esther Macejkovic"`;

exports[`name > 1337 > gender > noArgs 1`] = `"Demigender"`;

exports[`name > 1337 > gender > with gender 1`] = `"Female"`;
exports[`name > 1337 > gender > with gender 1`] = `"female"`;

exports[`name > 1337 > jobArea 1`] = `"Functionality"`;

Expand All @@ -158,6 +166,10 @@ exports[`name > 1337 > prefix > noArgs 1`] = `"Mrs."`;

exports[`name > 1337 > prefix > with gender 1`] = `"Mrs."`;

exports[`name > 1337 > sex > noArgs 1`] = `"female"`;

exports[`name > 1337 > sex > with gender 1`] = `"female"`;

exports[`name > 1337 > suffix > noArgs 1`] = `"I"`;

exports[`name > 1337 > suffix > with gender 1`] = `"I"`;
17 changes: 16 additions & 1 deletion test/name.spec.ts
Expand Up @@ -19,6 +19,7 @@ describe('name', () => {
'middleName',
'gender',
'prefix',
'sex',
'suffix'
)((t) => t.it('noArgs').it('with gender', 'male'));

Expand Down Expand Up @@ -346,7 +347,21 @@ describe('name', () => {
const gender = faker.name.gender(true);

expect(gender).toBeTypeOf('string');
expect(faker.definitions.name.binary_gender).toContain(gender);
expect(faker.definitions.name.sex).toContain(gender);
});
});

describe('sex()', () => {
beforeEach(() => {
faker.locale = 'en';
faker.localeFallback = 'en';
});

it('should return a sex', () => {
const sex = faker.name.sex();

expect(sex).toBeTypeOf('string');
expect(faker.definitions.name.sex).toContain(sex);
});
});

Expand Down
2 changes: 1 addition & 1 deletion test/scripts/apidoc/examplesAndDeprecations.spec.ts
Expand Up @@ -17,7 +17,7 @@ import { loadProject } from './utils';
/*
* This test ensures, that every method
* - has working examples
* - and running these does not log anything, unless the method is deprecated
* - and running these do not log anything, unless the method is deprecated
*/

const locales: Record<string, string> = {
Expand Down

0 comments on commit ad3c9bf

Please sign in to comment.