-
Notifications
You must be signed in to change notification settings - Fork 173
/
Copy pathnaming.go
94 lines (75 loc) · 2.06 KB
/
naming.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package config
import (
"fmt"
"strings"
"github.com/gertd/go-pluralize"
)
var (
pluralizeClient = pluralize.NewClient()
)
// Namer is a function type which is given a string and return a string
type Namer func(string) string
// NamingStrategy represents naming strategies
type NamingStrategy struct {
ParentTable Namer
ParentColumn Namer
}
// SelectNamingStrategy sets the naming strategy
func SelectNamingStrategy(name string) (*NamingStrategy, error) {
switch name {
case "", "default":
// default
return &NamingStrategy{
ParentTable: defaultParentTableNamer,
ParentColumn: defaultParentColumnNamer,
}, nil
case "singularTableName":
return &NamingStrategy{
ParentTable: singularTableParentTableNamer,
ParentColumn: singularTableParentColumnNamer,
}, nil
case "identical":
return &NamingStrategy{
ParentTable: defaultParentTableNamer,
ParentColumn: identicalParentColumnNamer,
}, nil
case "identicalSingularTableName":
return &NamingStrategy{
ParentTable: singularTableParentTableNamer,
ParentColumn: identicalParentColumnNamer,
}, nil
default:
return nil, fmt.Errorf("Naming strategy does not exist. strategy: %s\n", name)
}
}
// ParentTableName alters the given name by Table
func (ns *NamingStrategy) ParentTableName(name string) string {
return ns.ParentTable(name)
}
// ParentColumnName alters the given name by Column
func (ns *NamingStrategy) ParentColumnName(name string) string {
return ns.ParentColumn(name)
}
func defaultParentTableNamer(name string) string {
index := strings.LastIndex(name, "_")
if index == -1 || name[index+1:] != "id" {
return ""
}
return pluralizeClient.Plural(name[:index])
}
func defaultParentColumnNamer(name string) string {
return "id"
}
func singularTableParentTableNamer(name string) string {
index := strings.LastIndex(name, "_")
if index == -1 || name[index+1:] != "id" {
return ""
}
return pluralizeClient.Singular(name[:index])
}
func singularTableParentColumnNamer(name string) string {
return "id"
}
func identicalParentColumnNamer(name string) string {
return name
}