Skip to content

Commit

Permalink
feat: add more cases to transformName for RESTDomainService
Browse files Browse the repository at this point in the history
  • Loading branch information
loopingz committed Oct 3, 2023
1 parent 666165c commit b1071f2
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
27 changes: 24 additions & 3 deletions packages/core/src/services/domainservice.spec.ts
Expand Up @@ -255,17 +255,38 @@ class DomainServiceTest extends WebdaTest {
assert.strictEqual(res.results.length, 2);

// Cov part
rest.handleModel = () => false;
rest.walkModel(<any>{ Expose: {} }, "coremodel");
}

@test
transformName() {
const rest = new RESTDomainService(null, "DomainService", {});
assert.strictEqual(rest.transformName("Users"), "users");
assert.strictEqual(rest.transformName("Users_Test"), "usersTest");
assert.strictEqual(rest.transformName("UsersTest"), "usersTest");
rest.getParameters().nameTransfomer = "lowercase";
assert.strictEqual(rest.transformName("Users"), "users");
assert.strictEqual(rest.transformName("Users_Test"), "users_test");
assert.strictEqual(rest.transformName("UsersTest"), "userstest");
rest.getParameters().nameTransfomer = "none";
assert.strictEqual(rest.transformName("Users"), "Users");
assert.strictEqual(rest.transformName("Users_Test"), "Users_Test");

rest.handleModel = () => false;
rest.walkModel(<any>{ Expose: {} }, "coremodel");
assert.strictEqual(rest.transformName("UsersTest"), "UsersTest");
rest.getParameters().nameTransfomer = "snake_case";
assert.strictEqual(rest.transformName("Users"), "users");
assert.strictEqual(rest.transformName("Users_Test"), "users_test");
assert.strictEqual(rest.transformName("Users-Test"), "users_test");
assert.strictEqual(rest.transformName("UsersTest"), "users_test");
assert.strictEqual(rest.transformName("U_Test"), "u_test");
rest.getParameters().nameTransfomer = "PascalCase";
assert.strictEqual(rest.transformName("users"), "Users");
assert.strictEqual(rest.transformName("users_test"), "UsersTest");
assert.strictEqual(rest.transformName("UsersTest"), "UsersTest");
rest.getParameters().nameTransfomer = "kebab-case";
assert.strictEqual(rest.transformName("Users"), "users");
assert.strictEqual(rest.transformName("Users_Test"), "users-test");
assert.strictEqual(rest.transformName("UsersTest"), "users-test");
}

@test
Expand Down
16 changes: 15 additions & 1 deletion packages/core/src/services/domainservice.ts
Expand Up @@ -152,8 +152,10 @@ export class DomainServiceParameters extends ServiceParameters {
operations: boolean;
/**
* Transform the name of the model to be used in the URL
*
* @see https://blog.boot.dev/clean-code/casings-in-coding/#:~:text=%F0%9F%94%97%20Camel%20Case,Go
*/
nameTransfomer: "camelCase" | "lowercase" | "none";
nameTransfomer: "camelCase" | "lowercase" | "none" | "snake_case" | "PascalCase" | "kebab-case";
/**
* Method used for query objects
*
Expand Down Expand Up @@ -273,12 +275,24 @@ export abstract class DomainService<T extends DomainServiceParameters = DomainSe
* Return the model name for this service
* @param name
* @returns
*
* @see https://blog.boot.dev/clean-code/casings-in-coding/#:~:text=%F0%9F%94%97%20Camel%20Case,Go
*/
transformName(name: string): string {
if (this.parameters.nameTransfomer === "camelCase") {
return name.substring(0, 1).toLowerCase() + name.substring(1).replace(/_(.)/g, (match, p1) => p1.toUpperCase());
} else if (this.parameters.nameTransfomer === "lowercase") {
return name.toLowerCase();
} else if (this.parameters.nameTransfomer === "snake_case") {
return name[0].toLowerCase() + name.slice(1).replace(/-/g, "_").replace(/[^_]([A-Z])/g, l => {
return `${l[0]}_${l[1].toLowerCase()}`
}).toLowerCase();
} else if (this.parameters.nameTransfomer === "PascalCase") {
return name[0].toUpperCase() + name.slice(1).replace(/[-_][a-zA-Z0-9]/g, l => l[1].toUpperCase());
} else if (this.parameters.nameTransfomer === "kebab-case") {
return name[0].toLowerCase() + name.slice(1).replace(/_/g, "-").replace(/[^-]([A-Z])/g, l => {
return `${l[0]}-${l[1].toLowerCase()}`
}).toLowerCase();
}
return name;
}
Expand Down

0 comments on commit b1071f2

Please sign in to comment.