8 "github.com/gobuffalo/envy"
11 // Name is a string that represents the "name" of a thing, like an app, model, etc...
14 // Title version of a name. ie. "foo_bar" => "Foo Bar"
15 func (n Name) Title() string {
16 x := strings.Split(string(n), "/")
21 return strings.Join(x, " ")
24 // Underscore version of a name. ie. "FooBar" => "foo_bar"
25 func (n Name) Underscore() string {
27 if strings.ToUpper(w) == w {
28 return strings.ToLower(w)
33 // Plural version of a name
34 func (n Name) Plural() string {
35 return Pluralize(string(n))
38 // Singular version of a name
39 func (n Name) Singular() string {
40 return Singularize(string(n))
43 // Camel version of a name
44 func (n Name) Camel() string {
45 c := Camelize(string(n))
46 if strings.HasSuffix(c, "Id") {
47 c = strings.TrimSuffix(c, "Id")
53 // Model version of a name. ie. "user" => "User"
54 func (n Name) Model() string {
55 x := strings.Split(string(n), "/")
57 x[i] = Camelize(Singularize(s))
60 return strings.Join(x, "")
63 // Resource version of a name
64 func (n Name) Resource() string {
65 name := n.Underscore()
66 x := strings.FieldsFunc(name, func(r rune) bool {
67 return r == '_' || r == '/'
72 x[i] = Camelize(Pluralize(strings.ToLower(w)))
79 return strings.Join(x, "")
82 // ModelPlural version of a name. ie. "user" => "Users"
83 func (n Name) ModelPlural() string {
84 return Camelize(Pluralize(n.Model()))
87 // File version of a name
88 func (n Name) File() string {
89 return Underscore(Camelize(string(n)))
92 // Table version of a name
93 func (n Name) Table() string {
94 return Underscore(Pluralize(string(n)))
97 // UnderSingular version of a name
98 func (n Name) UnderSingular() string {
99 return Underscore(Singularize(string(n)))
102 // PluralCamel version of a name
103 func (n Name) PluralCamel() string {
104 return Pluralize(Camelize(string(n)))
107 // PluralUnder version of a name
108 func (n Name) PluralUnder() string {
109 return Pluralize(Underscore(string(n)))
112 // URL version of a name
113 func (n Name) URL() string {
114 return n.PluralUnder()
117 // CamelSingular version of a name
118 func (n Name) CamelSingular() string {
119 return Camelize(Singularize(string(n)))
122 // VarCaseSingular version of a name. ie. "FooBar" => "fooBar"
123 func (n Name) VarCaseSingular() string {
124 return CamelizeDownFirst(Singularize(Underscore(n.Resource())))
127 // VarCasePlural version of a name. ie. "FooBar" => "fooBar"
128 func (n Name) VarCasePlural() string {
129 return CamelizeDownFirst(n.Resource())
132 // Lower case version of a string
133 func (n Name) Lower() string {
134 return strings.ToLower(string(n))
137 // ParamID returns foo_bar_id
138 func (n Name) ParamID() string {
139 return fmt.Sprintf("%s_id", strings.Replace(n.UnderSingular(), "/", "_", -1))
142 // Package returns go package
143 func (n Name) Package() string {
146 for _, gp := range envy.GoPaths() {
147 key = strings.TrimPrefix(key, filepath.Join(gp, "src"))
148 key = strings.TrimPrefix(key, gp)
150 key = strings.TrimPrefix(key, string(filepath.Separator))
152 key = strings.Replace(key, "\\", "/", -1)
156 // Char returns first character in lower case, this is useful for methods inside a struct.
157 func (n Name) Char() string {
158 return strings.ToLower(string(n[0]))
161 func (n Name) String() string {