Skip to content

Commit ea721d5

Browse files
Merge pull request #30 from wintondeshong/master
Added CoreUtils#enumToArray and #getRandomEnum; Added Auditable and E…
2 parents 247ab17 + 33d9895 commit ea721d5

5 files changed

Lines changed: 64 additions & 0 deletions

File tree

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ export { HttpVerb } from "./enumerations/http-verb";
3232
// #region Interfaces
3333
// -----------------------------------------------------------------------------------------
3434

35+
export { Auditable } from "./interfaces/auditable";
3536
export { Culture } from "./interfaces/culture";
3637
export { CultureParams } from "./interfaces/culture-params";
38+
export { Entity } from "./interfaces/entity";
3739
export { KeyValuePair } from "./interfaces/key-value-pair";
3840
export { PagedResult } from "./interfaces/paged-result";
3941
export { Result } from "./interfaces/result";

src/interfaces/auditable.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Entity } from "./entity";
2+
3+
export interface Auditable extends Entity {
4+
createdById?: number;
5+
createdOn?: string;
6+
deletedById?: number;
7+
deletedOn?: string;
8+
updatedById?: number;
9+
updatedOn?: string;
10+
}

src/interfaces/entity.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface Entity {
2+
id?: number;
3+
}

src/utilities/core-utils.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import { CoreUtils } from "./core-utils";
22

33
describe("CoreUtils", () => {
4+
describe("enumToArray", () => {
5+
test.skip("TODO: Backfill tests to complete issue https://github.com/AndcultureCode/AndcultureCode.JavaScript.Core/issues/29", () => {});
6+
});
7+
8+
describe("getRandomEnum", () => {
9+
test.skip("TODO: Backfill tests to complete issue https://github.com/AndcultureCode/AndcultureCode.JavaScript.Core/issues/29", () => {});
10+
});
11+
412
describe("timer", () => {
513
test("returns timer object", () => {
614
// Act

src/utilities/core-utils.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,45 @@ import _ from "lodash";
55
// #region Private Methods
66
// -----------------------------------------------------------------------------------------
77

8+
/**
9+
* Transforms an enum into an array of its values
10+
*
11+
* @example
12+
* const roleTypes = TestUtils.enumToArray<RoleType>(RoleType);
13+
* // Returns [0, 1, 2, 3, 4, 5]
14+
* @template TEnum The enum to be transformed
15+
* @param {*} enumObject The enum to be transformed (cannot be typed to TEnum, or TS will return 'typeof TEnum'
16+
* instead of a value of TEnum)
17+
* @returns {TEnum[]}
18+
*/
19+
const _enumToArray = <TEnum = any>(enumObject: any): TEnum[] =>
20+
_objectToArray(_numericEnumToPojo(enumObject)) as TEnum[];
21+
22+
/**
23+
* Returns a random enum value from its type
24+
*
25+
* @example
26+
* const randomRoleType = TestUtils.getRandomEnum<RoleType>(RoleType);
27+
* // Might return the value '1', which is the value of RoleType.Team
28+
* @template TEnum The enum to be transformed
29+
* @param {*} enumObject The enum to be transformed (cannot be typed to TEnum, or TS will return 'typeof TEnum'
30+
* instead of a value of TEnum)
31+
* @param {TEnum} [excludeElement] A specific enum value to be excluded from the random selection.
32+
* @returns {TEnum}
33+
*/
34+
const _getRandomEnum = <TEnum = any>(
35+
enumObject: any,
36+
excludeElement?: TEnum
37+
): TEnum => {
38+
let enumValues = _enumToArray(enumObject);
39+
40+
if (excludeElement != null) {
41+
enumValues = enumValues.filter((e: any) => e !== excludeElement);
42+
}
43+
44+
return enumValues[Math.floor(Math.random() * enumValues.length)];
45+
};
46+
847
const _numericEnumToPojo = (enumObject: any): {} => {
948
let pojo: { [k: string]: any } = {};
1049

@@ -87,6 +126,8 @@ const _timer = (name: string) => {
87126
export const CoreUtils = {
88127
bindAll: _.bindAll,
89128
curry: _.curry,
129+
enumToArray: _enumToArray,
130+
getRandomEnum: _getRandomEnum,
90131
memoize: _.memoize,
91132
numericEnumToPojo: _numericEnumToPojo,
92133
objectToArray: _objectToArray,

0 commit comments

Comments
 (0)