entc/gen: Split strings in pascal/camcelCase on - in addition to _ (#631)

This commit is contained in:
Joe Harvey
2020-08-02 00:36:57 +12:00
committed by GitHub
parent c7bf64fa71
commit e9b406ca65
5 changed files with 34 additions and 22 deletions

View File

@@ -108,14 +108,11 @@ func plural(name string) string {
return p
}
// pascal converts the given column name into a PascalCase.
//
// user_info => UserInfo
// full_name => FullName
// user_id => UserID
//
func pascal(s string) string {
words := strings.Split(s, "_")
func isSeparator(r rune) bool {
return r == '_' || r == '-'
}
func pascalWords(words []string) string {
for i, w := range words {
upper := strings.ToUpper(w)
if _, ok := acronyms[upper]; ok {
@@ -127,18 +124,31 @@ func pascal(s string) string {
return strings.Join(words, "")
}
// camel converts the given column name into a camelCase.
// pascal converts the given name into a PascalCase.
//
// user_info => userInfo
// full_name => fullName
// user_id => userID
// user_info => UserInfo
// full_name => FullName
// user_id => UserID
// full-admin => FullAdmin
//
func pascal(s string) string {
words := strings.FieldsFunc(s, isSeparator)
return pascalWords(words)
}
// camel converts the given name into a camelCase.
//
// user_info => userInfo
// full_name => fullName
// user_id => userID
// full-admin => fullAdmin
//
func camel(s string) string {
words := strings.SplitN(s, "_", 2)
words := strings.FieldsFunc(s, isSeparator)
if len(words) == 1 {
return strings.ToLower(words[0])
}
return strings.ToLower(words[0]) + pascal(words[1])
return strings.ToLower(words[0]) + pascalWords(words[1:])
}
// snake converts the given struct or field name into a snake_case.

View File

@@ -323,7 +323,7 @@ var (
{Name: "nickname", Type: field.TypeString, Unique: true, Nullable: true},
{Name: "phone", Type: field.TypeString, Unique: true, Nullable: true},
{Name: "password", Type: field.TypeString, Nullable: true},
{Name: "role", Type: field.TypeEnum, Enums: []string{"admin", "user"}, Default: "user"},
{Name: "role", Type: field.TypeEnum, Enums: []string{"admin", "free-user", "user"}, Default: "user"},
{Name: "sso_cert", Type: field.TypeString, Nullable: true},
{Name: "group_blocked", Type: field.TypeInt, Nullable: true},
{Name: "user_spouse", Type: field.TypeInt, Unique: true, Nullable: true},

View File

@@ -41,7 +41,7 @@ func (User) Fields() []ent.Field {
Optional().
Sensitive(),
field.Enum("role").
Values("user", "admin").
Values("user", "admin", "free-user").
Default("user"),
field.String("SSOCert").
Optional(),

View File

@@ -163,8 +163,9 @@ const DefaultRole = RoleUser
// Role values.
const (
RoleAdmin Role = "admin"
RoleUser Role = "user"
RoleAdmin Role = "admin"
RoleFreeUser Role = "free-user"
RoleUser Role = "user"
)
func (r Role) String() string {
@@ -174,7 +175,7 @@ func (r Role) String() string {
// RoleValidator is a validator for the "role" field enum values. It is called by the builders before save.
func RoleValidator(r Role) error {
switch r {
case RoleAdmin, RoleUser:
case RoleAdmin, RoleFreeUser, RoleUser:
return nil
default:
return fmt.Errorf("user: invalid enum value for role field: %q", r)

View File

@@ -96,8 +96,9 @@ const DefaultRole = RoleUser
// Role values.
const (
RoleAdmin Role = "admin"
RoleUser Role = "user"
RoleAdmin Role = "admin"
RoleFreeUser Role = "free-user"
RoleUser Role = "user"
)
func (r Role) String() string {
@@ -107,7 +108,7 @@ func (r Role) String() string {
// RoleValidator is a validator for the "role" field enum values. It is called by the builders before save.
func RoleValidator(r Role) error {
switch r {
case RoleAdmin, RoleUser:
case RoleAdmin, RoleFreeUser, RoleUser:
return nil
default:
return fmt.Errorf("user: invalid enum value for role field: %q", r)