go-on-rails 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -6
- data/lib/generators/gor/templates/gor_model.go.erb +138 -120
- data/lib/generators/gor/templates/main.go +1 -1
- data/lib/tasks/gor.rake +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70e8dc6ab9f83a091e415e3024b7b23aebe413eb
|
4
|
+
data.tar.gz: a489ffa6df65afdbff314b2c61429007fcb2c886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3112295d0c589078b792d7938786a5c2b25a02965d525821e53072ef42849222c88f49cff51b3afa9fa1928c6907ed369d10d94367fee72253b11b64bcba51c
|
7
|
+
data.tar.gz: 2b5b01368af6cb2aa0f37191865e9325e3a36407fbc2e7ffe1645cdff0c1bd9e58e5affc7a4af1503280e8614cc89274a81dd648f71686ee792dd13cb370a45e
|
data/README.md
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
go-on-rails
|
6
6
|
====
|
7
7
|
|
8
|
+
[中文文档](./README_zh.md)
|
9
|
+
|
8
10
|
go-on-rails is a Rails generator created for three scenarios:
|
9
11
|
|
10
12
|
1. Integrate some APIs written in Golang to existed Rails app for high performance
|
@@ -107,12 +109,12 @@ And the gem is still under development, so there're a lot of known issues.
|
|
107
109
|
|
108
110
|
## Golang dependencies by default
|
109
111
|
|
110
|
-
*
|
111
|
-
*
|
112
|
-
*
|
113
|
-
*
|
114
|
-
*
|
115
|
-
*
|
112
|
+
* [github.com/jmoiron/sqlx](https://github.com/jmoiron/sqlx): an extension on the standard `database/sql` database API library
|
113
|
+
* [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3): a SQLite driver
|
114
|
+
* [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql): a MySQL driver
|
115
|
+
* [github.com/lib/pq](https://github.com/lib/pq): a PostgreSQL driver
|
116
|
+
* [github.com/asaskevich/govalidator](https://github.com/asaskevich/govalidator): for the struct validation
|
117
|
+
* [github.com/gin-gonic/gin](https://github.com/gin-gonic/gin): a HTTP web framework
|
116
118
|
|
117
119
|
## Acknowledgement
|
118
120
|
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
<%-
|
1
|
+
<%#- var_pmn stands for pluralized model name, its format is same as the table name -#%>
|
2
|
+
<%- var_pmn = table_name = @model_name.underscore.pluralize -%>
|
3
|
+
<%#- var_umn stands for underscored model name -#%>
|
4
|
+
<%- var_umn = @model_name.underscore -%>
|
3
5
|
<%- col_names = @struct_info[:col_names] -%>
|
4
6
|
<%- has_assoc = !@struct_info[:assoc_info][:has_many].empty? || !@struct_info[:assoc_info][:has_one].empty? -%>
|
5
7
|
// Package models includes the functions on the model <%= @model_name %>.
|
@@ -41,7 +43,7 @@ type <%= @model_name %>Page struct {
|
|
41
43
|
orderStr string
|
42
44
|
}
|
43
45
|
|
44
|
-
// Current get the current page of <%= @model_name %>Page object for pagination
|
46
|
+
// Current() get the current page of <%= @model_name %>Page object for pagination
|
45
47
|
func (_p *<%= @model_name %>Page) Current() ([]<%= @model_name %>, error) {
|
46
48
|
if _, exist := _p.Order["id"]; !exist {
|
47
49
|
return nil, errors.New("No id order specified in Order map")
|
@@ -61,17 +63,17 @@ func (_p *<%= @model_name %>Page) Current() ([]<%= @model_name %>, error) {
|
|
61
63
|
<% end %>
|
62
64
|
whereParams := []interface{}{}
|
63
65
|
whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
|
64
|
-
<%=
|
66
|
+
<%= var_pmn %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
|
65
67
|
if err != nil {
|
66
68
|
return nil, err
|
67
69
|
}
|
68
|
-
if len(<%=
|
69
|
-
_p.FirstId, _p.LastId = <%=
|
70
|
+
if len(<%= var_pmn %>) != 0 {
|
71
|
+
_p.FirstId, _p.LastId = <%= var_pmn %>[0].Id, <%= var_pmn %>[len(<%= var_pmn %>)-1].Id
|
70
72
|
}
|
71
|
-
return <%=
|
73
|
+
return <%= var_pmn %>, nil
|
72
74
|
}
|
73
75
|
|
74
|
-
//
|
76
|
+
// Previous() get the previous page of <%= @model_name %>Page object for pagination
|
75
77
|
func (_p *<%= @model_name %>Page) Previous() ([]<%= @model_name %>, error) {
|
76
78
|
if _p.PageNum == 0 {
|
77
79
|
return nil, errors.New("This's the first page, no previous page yet")
|
@@ -94,18 +96,18 @@ func (_p *<%= @model_name %>Page) Previous() ([]<%= @model_name %>, error) {
|
|
94
96
|
<% end %>
|
95
97
|
whereParams := []interface{}{}
|
96
98
|
whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
|
97
|
-
<%=
|
99
|
+
<%= var_pmn %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
|
98
100
|
if err != nil {
|
99
101
|
return nil, err
|
100
102
|
}
|
101
|
-
if len(<%=
|
102
|
-
_p.FirstId, _p.LastId = <%=
|
103
|
+
if len(<%= var_pmn %>) != 0 {
|
104
|
+
_p.FirstId, _p.LastId = <%= var_pmn %>[0].Id, <%= var_pmn %>[len(<%= var_pmn %>)-1].Id
|
103
105
|
}
|
104
106
|
_p.PageNum -= 1
|
105
|
-
return <%=
|
107
|
+
return <%= var_pmn %>, nil
|
106
108
|
}
|
107
109
|
|
108
|
-
//
|
110
|
+
// Next() get the next page of <%= @model_name %>Page object for pagination
|
109
111
|
func (_p *<%= @model_name %>Page) Next() ([]<%= @model_name %>, error) {
|
110
112
|
if _p.PageNum == _p.TotalPages-1 {
|
111
113
|
return nil, errors.New("This's the last page, no next page yet")
|
@@ -128,15 +130,31 @@ func (_p *<%= @model_name %>Page) Next() ([]<%= @model_name %>, error) {
|
|
128
130
|
<% end %>
|
129
131
|
whereParams := []interface{}{}
|
130
132
|
whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
|
131
|
-
<%=
|
133
|
+
<%= var_pmn %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
|
132
134
|
if err != nil {
|
133
135
|
return nil, err
|
134
136
|
}
|
135
|
-
if len(<%=
|
136
|
-
_p.FirstId, _p.LastId = <%=
|
137
|
+
if len(<%= var_pmn %>) != 0 {
|
138
|
+
_p.FirstId, _p.LastId = <%= var_pmn %>[0].Id, <%= var_pmn %>[len(<%= var_pmn %>)-1].Id
|
137
139
|
}
|
138
140
|
_p.PageNum += 1
|
139
|
-
return <%=
|
141
|
+
return <%= var_pmn %>, nil
|
142
|
+
}
|
143
|
+
|
144
|
+
// GetPage() is a helper function for the <%= @model_name %>Page object to return a corresponding page due to
|
145
|
+
// the parameter passed in, one of "previous, current or next"
|
146
|
+
func (_p *<%= @model_name %>Page) GetPage(direction string) (ps []<%= @model_name %>, err error) {
|
147
|
+
switch direction {
|
148
|
+
case "previous":
|
149
|
+
ps, _ = _p.Previous()
|
150
|
+
case "next":
|
151
|
+
ps, _ = _p.Next()
|
152
|
+
case "current":
|
153
|
+
ps, _ = _p.Current()
|
154
|
+
default:
|
155
|
+
return nil, errors.New("Error: wrong dircetion! None of previous, current or next!")
|
156
|
+
}
|
157
|
+
return
|
140
158
|
}
|
141
159
|
|
142
160
|
// buildOrder is for <%= @model_name %>Page object to build SQL ORDER clause
|
@@ -204,121 +222,121 @@ func (_p *<%= @model_name %>Page) buildPageCount() error {
|
|
204
222
|
}
|
205
223
|
|
206
224
|
|
207
|
-
// Find<%= @model_name %> find a single <%=
|
225
|
+
// Find<%= @model_name %> find a single <%= var_umn %> by an ID
|
208
226
|
func Find<%= @model_name %>(id int64) (*<%= @model_name %>, error) {
|
209
227
|
if id == 0 {
|
210
228
|
return nil, errors.New("Invalid ID: it can't be zero")
|
211
229
|
}
|
212
|
-
_<%=
|
213
|
-
err := DB.Get(&_<%=
|
230
|
+
_<%= var_umn %> := <%= @model_name %>{}
|
231
|
+
err := DB.Get(&_<%= var_umn %>, DB.Rebind(`SELECT * FROM <%= table_name %> WHERE id = ? LIMIT 1`), id)
|
214
232
|
if err != nil {
|
215
233
|
log.Printf("Error: %v\n", err)
|
216
234
|
return nil, err
|
217
235
|
}
|
218
|
-
return &_<%=
|
236
|
+
return &_<%= var_umn %>, nil
|
219
237
|
}
|
220
238
|
|
221
|
-
// First<%= @model_name %> find the first one <%=
|
239
|
+
// First<%= @model_name %> find the first one <%= var_umn %> by ID ASC order
|
222
240
|
func First<%= @model_name %>() (*<%= @model_name %>, error) {
|
223
|
-
_<%=
|
224
|
-
err := DB.Get(&_<%=
|
241
|
+
_<%= var_umn %> := <%= @model_name %>{}
|
242
|
+
err := DB.Get(&_<%= var_umn %>, DB.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id ASC LIMIT 1`))
|
225
243
|
if err != nil {
|
226
244
|
log.Printf("Error: %v\n", err)
|
227
245
|
return nil, err
|
228
246
|
}
|
229
|
-
return &_<%=
|
247
|
+
return &_<%= var_umn %>, nil
|
230
248
|
}
|
231
249
|
|
232
|
-
// First<%= @model_name.pluralize %> find the first N <%=
|
250
|
+
// First<%= @model_name.pluralize %> find the first N <%= var_umn.pluralize %> by ID ASC order
|
233
251
|
func First<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
|
234
|
-
_<%=
|
252
|
+
_<%= var_pmn %> := []<%= @model_name %>{}
|
235
253
|
sql := fmt.Sprintf("SELECT * FROM <%= table_name %> ORDER BY id ASC LIMIT %v", n)
|
236
|
-
err := DB.Select(&_<%=
|
254
|
+
err := DB.Select(&_<%= var_pmn %>, DB.Rebind(sql))
|
237
255
|
if err != nil {
|
238
256
|
log.Printf("Error: %v\n", err)
|
239
257
|
return nil, err
|
240
258
|
}
|
241
|
-
return _<%=
|
259
|
+
return _<%= var_pmn %>, nil
|
242
260
|
}
|
243
261
|
|
244
|
-
// Last<%= @model_name %> find the last one <%=
|
262
|
+
// Last<%= @model_name %> find the last one <%= var_umn %> by ID DESC order
|
245
263
|
func Last<%= @model_name %>() (*<%= @model_name %>, error) {
|
246
|
-
_<%=
|
247
|
-
err := DB.Get(&_<%=
|
264
|
+
_<%= var_umn %> := <%= @model_name %>{}
|
265
|
+
err := DB.Get(&_<%= var_umn %>, DB.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id DESC LIMIT 1`))
|
248
266
|
if err != nil {
|
249
267
|
log.Printf("Error: %v\n", err)
|
250
268
|
return nil, err
|
251
269
|
}
|
252
|
-
return &_<%=
|
270
|
+
return &_<%= var_umn %>, nil
|
253
271
|
}
|
254
272
|
|
255
|
-
// Last<%= @model_name.pluralize %> find the last N <%=
|
273
|
+
// Last<%= @model_name.pluralize %> find the last N <%= var_umn.pluralize %> by ID DESC order
|
256
274
|
func Last<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
|
257
|
-
_<%=
|
275
|
+
_<%= var_pmn %> := []<%= @model_name %>{}
|
258
276
|
sql := fmt.Sprintf("SELECT * FROM <%= table_name %> ORDER BY id DESC LIMIT %v", n)
|
259
|
-
err := DB.Select(&_<%=
|
277
|
+
err := DB.Select(&_<%= var_pmn %>, DB.Rebind(sql))
|
260
278
|
if err != nil {
|
261
279
|
log.Printf("Error: %v\n", err)
|
262
280
|
return nil, err
|
263
281
|
}
|
264
|
-
return _<%=
|
282
|
+
return _<%= var_pmn %>, nil
|
265
283
|
}
|
266
284
|
|
267
|
-
// Find<%= @model_name.pluralize %> find one or more <%=
|
285
|
+
// Find<%= @model_name.pluralize %> find one or more <%= var_umn.pluralize %> by the given ID(s)
|
268
286
|
func Find<%= @model_name.pluralize %>(ids ...int64) ([]<%= @model_name %>, error) {
|
269
287
|
if len(ids) == 0 {
|
270
288
|
msg := "At least one or more ids needed"
|
271
289
|
log.Println(msg)
|
272
290
|
return nil, errors.New(msg)
|
273
291
|
}
|
274
|
-
_<%=
|
292
|
+
_<%= var_pmn %> := []<%= @model_name %>{}
|
275
293
|
idsHolder := strings.Repeat(",?", len(ids)-1)
|
276
294
|
sql := DB.Rebind(fmt.Sprintf(`SELECT * FROM <%= table_name %> WHERE id IN (?%s)`, idsHolder))
|
277
295
|
idsT := []interface{}{}
|
278
296
|
for _,id := range ids {
|
279
297
|
idsT = append(idsT, interface{}(id))
|
280
298
|
}
|
281
|
-
err := DB.Select(&_<%=
|
299
|
+
err := DB.Select(&_<%= var_pmn %>, sql, idsT...)
|
282
300
|
if err != nil {
|
283
301
|
log.Printf("Error: %v\n", err)
|
284
302
|
return nil, err
|
285
303
|
}
|
286
|
-
return _<%=
|
304
|
+
return _<%= var_pmn %>, nil
|
287
305
|
}
|
288
306
|
|
289
|
-
// Find<%= @model_name %>By find a single <%=
|
307
|
+
// Find<%= @model_name %>By find a single <%= var_umn %> by a field name and a value
|
290
308
|
func Find<%= @model_name %>By(field string, val interface{}) (*<%= @model_name %>, error) {
|
291
|
-
_<%=
|
309
|
+
_<%= var_umn %> := <%= @model_name %>{}
|
292
310
|
sqlFmt := `SELECT * FROM <%= table_name %> WHERE %s = ? LIMIT 1`
|
293
311
|
sqlStr := fmt.Sprintf(sqlFmt, field)
|
294
|
-
err := DB.Get(&_<%=
|
312
|
+
err := DB.Get(&_<%= var_umn %>, DB.Rebind(sqlStr), val)
|
295
313
|
if err != nil {
|
296
314
|
log.Printf("Error: %v\n", err)
|
297
315
|
return nil, err
|
298
316
|
}
|
299
|
-
return &_<%=
|
317
|
+
return &_<%= var_umn %>, nil
|
300
318
|
}
|
301
319
|
|
302
|
-
// Find<%= @model_name.pluralize %>By find all <%=
|
303
|
-
func Find<%= @model_name.pluralize %>By(field string, val interface{}) (_<%=
|
320
|
+
// Find<%= @model_name.pluralize %>By find all <%= var_pmn %> by a field name and a value
|
321
|
+
func Find<%= @model_name.pluralize %>By(field string, val interface{}) (_<%= var_pmn %> []<%= @model_name %>, err error) {
|
304
322
|
sqlFmt := `SELECT * FROM <%= table_name %> WHERE %s = ?`
|
305
323
|
sqlStr := fmt.Sprintf(sqlFmt, field)
|
306
|
-
err = DB.Select(&_<%=
|
324
|
+
err = DB.Select(&_<%= var_pmn %>, DB.Rebind(sqlStr), val)
|
307
325
|
if err != nil {
|
308
326
|
log.Printf("Error: %v\n", err)
|
309
327
|
return nil, err
|
310
328
|
}
|
311
|
-
return _<%=
|
329
|
+
return _<%= var_pmn %>, nil
|
312
330
|
}
|
313
331
|
|
314
332
|
// All<%= @model_name.pluralize %> get all the <%= @model_name %> records
|
315
|
-
func All<%= @model_name.pluralize %>() (<%=
|
316
|
-
err = DB.Select(&<%=
|
333
|
+
func All<%= @model_name.pluralize %>() (<%= var_pmn %> []<%= @model_name %>, err error) {
|
334
|
+
err = DB.Select(&<%= var_pmn %>, "SELECT * FROM <%= table_name %>")
|
317
335
|
if err != nil {
|
318
336
|
log.Println(err)
|
319
337
|
return nil, err
|
320
338
|
}
|
321
|
-
return <%=
|
339
|
+
return <%= var_pmn %>, nil
|
322
340
|
}
|
323
341
|
|
324
342
|
// <%= @model_name %>Count get the count of all the <%= @model_name %> records
|
@@ -351,21 +369,21 @@ func <%= @model_name %>CountWhere(where string, args ...interface{}) (c int64, e
|
|
351
369
|
}
|
352
370
|
|
353
371
|
// <%= @model_name %>IncludesWhere get the <%= @model_name %> associated models records, it's just the eager_load function
|
354
|
-
func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interface{}) (_<%=
|
355
|
-
_<%=
|
372
|
+
func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interface{}) (_<%= var_pmn %> []<%= @model_name %>, err error) {
|
373
|
+
_<%= var_pmn %>, err = Find<%= @model_name.pluralize %>Where(sql, args...)
|
356
374
|
if err != nil {
|
357
375
|
log.Println(err)
|
358
376
|
return nil, err
|
359
377
|
}
|
360
378
|
if len(assocs) == 0 {
|
361
379
|
log.Println("No associated fields ard specified")
|
362
|
-
return _<%=
|
380
|
+
return _<%= var_pmn %>, err
|
363
381
|
}
|
364
|
-
if len(_<%=
|
382
|
+
if len(_<%= var_pmn %>) <= 0 {
|
365
383
|
return nil, errors.New("No results available")
|
366
384
|
}
|
367
|
-
ids := make([]interface{}, len(_<%=
|
368
|
-
for _, v := range _<%=
|
385
|
+
ids := make([]interface{}, len(_<%= var_pmn %>))
|
386
|
+
for _, v := range _<%= var_pmn %> {
|
369
387
|
ids = append(ids, interface{}(v.Id))
|
370
388
|
}
|
371
389
|
<%- if has_assoc -%>
|
@@ -378,19 +396,19 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
378
396
|
case "<%= k.underscore.pluralize %>":
|
379
397
|
<%- if v[:through] || v[:as] -%>
|
380
398
|
// FIXME: optimize the query
|
381
|
-
for i, vvv := range _<%=
|
399
|
+
for i, vvv := range _<%= var_pmn %> {
|
382
400
|
_<%= k.underscore.pluralize %>, err := <%= @model_name %>Get<%= k.pluralize %>(vvv.Id)
|
383
401
|
if err != nil {
|
384
402
|
continue
|
385
403
|
}
|
386
404
|
vvv.<%= k %> = _<%= k.underscore.pluralize %>
|
387
|
-
_<%=
|
405
|
+
_<%= var_pmn %>[i] = vvv
|
388
406
|
}
|
389
407
|
<%- else -%>
|
390
408
|
<%- if v[:foreign_key] -%>
|
391
409
|
where := fmt.Sprintf("<%= v[:foreign_key] %> IN (?%s)", idsHolder)
|
392
410
|
<%- else -%>
|
393
|
-
where := fmt.Sprintf("<%=
|
411
|
+
where := fmt.Sprintf("<%= var_umn %>_id IN (?%s)", idsHolder)
|
394
412
|
<%- end -%>
|
395
413
|
_<%= v[:class_name].underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>Where(where, ids...)
|
396
414
|
if err != nil {
|
@@ -398,7 +416,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
398
416
|
continue
|
399
417
|
}
|
400
418
|
for _, vv := range _<%= v[:class_name].underscore.pluralize %> {
|
401
|
-
for i, vvv := range _<%=
|
419
|
+
for i, vvv := range _<%= var_pmn %> {
|
402
420
|
<%- if v[:foreign_key] -%>
|
403
421
|
if vv.<%= v[:foreign_key].to_s.camelize %> == vvv.Id {
|
404
422
|
vvv.<%= k %> = append(vvv.<%= k %>, vv)
|
@@ -408,7 +426,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
408
426
|
vvv.<%= k %> = append(vvv.<%= k %>, vv)
|
409
427
|
}
|
410
428
|
<%- end -%>
|
411
|
-
_<%=
|
429
|
+
_<%= var_pmn %>[i].<%= k %> = vvv.<%= k %>
|
412
430
|
}
|
413
431
|
}
|
414
432
|
<%- end -%>
|
@@ -421,7 +439,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
421
439
|
<%- if v[:foreign_key] -%>
|
422
440
|
where := fmt.Sprintf("<%= v[:foreign_key] %> IN (?%s)", idsHolder)
|
423
441
|
<%- else -%>
|
424
|
-
where := fmt.Sprintf("<%=
|
442
|
+
where := fmt.Sprintf("<%= var_umn %>_id IN (?%s)", idsHolder)
|
425
443
|
<%- end -%>
|
426
444
|
_<%= v[:class_name].underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>Where(where, ids...)
|
427
445
|
if err != nil {
|
@@ -429,7 +447,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
429
447
|
continue
|
430
448
|
}
|
431
449
|
for _, vv := range _<%= v[:class_name].underscore.pluralize %> {
|
432
|
-
for i, vvv := range _<%=
|
450
|
+
for i, vvv := range _<%= var_pmn %> {
|
433
451
|
<%- if v[:foreign_key] -%>
|
434
452
|
if vv.<%= v[:foreign_key].to_s.camelize %> == vvv.Id {
|
435
453
|
vvv.<%= k %> = vv
|
@@ -439,7 +457,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
439
457
|
vvv.<%= k %> = vv
|
440
458
|
}
|
441
459
|
<%- end -%>
|
442
|
-
_<%=
|
460
|
+
_<%= var_pmn %>[i].<%= k %> = vvv.<%= k %>
|
443
461
|
}
|
444
462
|
}
|
445
463
|
<%- end -%>
|
@@ -447,7 +465,7 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
|
|
447
465
|
}
|
448
466
|
}
|
449
467
|
<%- end -%>
|
450
|
-
return _<%=
|
468
|
+
return _<%= var_pmn %>, nil
|
451
469
|
}
|
452
470
|
|
453
471
|
// <%= @model_name %>Ids get all the IDs of <%= @model_name %> records
|
@@ -507,7 +525,7 @@ func <%= @model_name %>StrCol(col, where string, args ...interface{}) (strColRec
|
|
507
525
|
// Find<%= @model_name.pluralize %>Where query use a partial SQL clause that usually following after WHERE
|
508
526
|
// with placeholders, eg: FindUsersWhere("first_name = ? AND age > ?", "John", 18)
|
509
527
|
// will return those records in the table "users" whose first_name is "John" and age elder than 18
|
510
|
-
func Find<%= @model_name.pluralize %>Where(where string, args ...interface{}) (<%=
|
528
|
+
func Find<%= @model_name.pluralize %>Where(where string, args ...interface{}) (<%= var_pmn %> []<%= @model_name %>, err error) {
|
511
529
|
sql := "SELECT * FROM <%= table_name %>"
|
512
530
|
if len(where) > 0 {
|
513
531
|
sql = sql + " WHERE " + where
|
@@ -517,12 +535,12 @@ func Find<%= @model_name.pluralize %>Where(where string, args ...interface{}) (<
|
|
517
535
|
log.Println(err)
|
518
536
|
return nil, err
|
519
537
|
}
|
520
|
-
err = stmt.Select(&<%=
|
538
|
+
err = stmt.Select(&<%= var_pmn %>, args...)
|
521
539
|
if err != nil {
|
522
540
|
log.Println(err)
|
523
541
|
return nil, err
|
524
542
|
}
|
525
|
-
return <%=
|
543
|
+
return <%= var_pmn %>, nil
|
526
544
|
}
|
527
545
|
|
528
546
|
// Find<%= @model_name %>BySql query use a complete SQL clause
|
@@ -534,30 +552,30 @@ func Find<%= @model_name %>BySql(sql string, args ...interface{}) (*<%= @model_n
|
|
534
552
|
log.Println(err)
|
535
553
|
return nil, err
|
536
554
|
}
|
537
|
-
_<%=
|
538
|
-
err = stmt.Get(_<%=
|
555
|
+
_<%= var_umn %> := &<%= @model_name %>{}
|
556
|
+
err = stmt.Get(_<%= var_umn %>, args...)
|
539
557
|
if err != nil {
|
540
558
|
log.Println(err)
|
541
559
|
return nil, err
|
542
560
|
}
|
543
|
-
return _<%=
|
561
|
+
return _<%= var_umn %>, nil
|
544
562
|
}
|
545
563
|
|
546
564
|
// Find<%= @model_name.pluralize %>BySql query use a complete SQL clause
|
547
565
|
// with placeholders, eg: FindUsersBySql("SELECT * FROM users WHERE first_name = ? AND age > ?", "John", 18)
|
548
566
|
// will return those records in the table "users" whose first_name is "John" and age elder than 18
|
549
|
-
func Find<%= @model_name.pluralize %>BySql(sql string, args ...interface{}) (<%=
|
567
|
+
func Find<%= @model_name.pluralize %>BySql(sql string, args ...interface{}) (<%= var_pmn %> []<%= @model_name %>, err error) {
|
550
568
|
stmt, err := DB.Preparex(DB.Rebind(sql))
|
551
569
|
if err != nil {
|
552
570
|
log.Println(err)
|
553
571
|
return nil, err
|
554
572
|
}
|
555
|
-
err = stmt.Select(&<%=
|
573
|
+
err = stmt.Select(&<%= var_pmn %>, args...)
|
556
574
|
if err != nil {
|
557
575
|
log.Println(err)
|
558
576
|
return nil, err
|
559
577
|
}
|
560
|
-
return <%=
|
578
|
+
return <%= var_pmn %>, nil
|
561
579
|
}
|
562
580
|
|
563
581
|
// Create<%= @model_name %> use a named params to create a single <%= @model_name %> record.
|
@@ -596,8 +614,8 @@ func Create<%= @model_name %>(am map[string]interface{}) (int64, error) {
|
|
596
614
|
}
|
597
615
|
|
598
616
|
// Create is a method for <%= @model_name %> to create a record
|
599
|
-
func (_<%=
|
600
|
-
ok, err := govalidator.ValidateStruct(_<%=
|
617
|
+
func (_<%= var_umn %> *<%= @model_name %>) Create() (int64, error) {
|
618
|
+
ok, err := govalidator.ValidateStruct(_<%= var_umn %>)
|
601
619
|
if !ok {
|
602
620
|
errMsg := "Validate <%= @model_name %> struct error: Unknown error"
|
603
621
|
if err != nil {
|
@@ -609,11 +627,11 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Create() (int64, error)
|
|
609
627
|
<%- unless @struct_info[:timestamp_cols].empty? -%>
|
610
628
|
t := time.Now()
|
611
629
|
<%- @struct_info[:timestamp_cols].each do |c| -%>
|
612
|
-
_<%=
|
630
|
+
_<%= var_umn %>.<%= c.camelize %> = t
|
613
631
|
<%- end -%>
|
614
632
|
<%- end -%>
|
615
633
|
sql := `INSERT INTO <%= table_name %> (<%= col_names.join(",") %>) VALUES (:<%= col_names.join(",:") %>)`
|
616
|
-
result, err := DB.NamedExec(sql, _<%=
|
634
|
+
result, err := DB.NamedExec(sql, _<%= var_umn %>)
|
617
635
|
if err != nil {
|
618
636
|
log.Println(err)
|
619
637
|
return 0, err
|
@@ -630,23 +648,23 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Create() (int64, error)
|
|
630
648
|
<%- has_many = @struct_info[:assoc_info][:has_many] -%>
|
631
649
|
<%- has_many.each do |k, v| -%>
|
632
650
|
// <%= k.pluralize %>Create is used for <%= @model_name %> to create the associated objects <%= k.pluralize %>
|
633
|
-
func (_<%=
|
651
|
+
func (_<%= var_umn %> *<%= @model_name %>) <%= k.pluralize %>Create(am map[string]interface{}) error {
|
634
652
|
<%- if v[:through] -%>
|
635
653
|
// FIXME: use transaction to create these associated objects
|
636
654
|
<%= v[:class_name].underscore %>Id, err := Create<%= v[:class_name] %>(am)
|
637
655
|
if err != nil {
|
638
656
|
return err
|
639
657
|
}
|
640
|
-
_, err = Create<%= v[:through].to_s.singularize.camelize %>(map[string]interface{}{"<%=
|
658
|
+
_, err = Create<%= v[:through].to_s.singularize.camelize %>(map[string]interface{}{"<%= var_umn %>_id": _<%= var_umn %>.Id, "<%= v[:class_name].underscore %>_id": <%= v[:class_name].underscore %>Id})
|
641
659
|
<%- elsif v[:as] -%>
|
642
|
-
am["<%= v[:as] %>_id"] = _<%=
|
660
|
+
am["<%= v[:as] %>_id"] = _<%= var_umn %>.Id
|
643
661
|
am["<%= v[:as] %>_type"] = "<%= @model_name %>"
|
644
662
|
_, err := Create<%= v[:class_name] %>(am)
|
645
663
|
<%- else -%>
|
646
664
|
<%- if v[:foreign_key] -%>
|
647
|
-
am["<%= v[:foreign_key] %>"] = _<%=
|
665
|
+
am["<%= v[:foreign_key] %>"] = _<%= var_umn %>.Id
|
648
666
|
<%- else -%>
|
649
|
-
am["<%=
|
667
|
+
am["<%= var_umn %>_id"] = _<%= var_umn %>.Id
|
650
668
|
<%- end -%>
|
651
669
|
_, err := Create<%= v[:class_name] %>(am)
|
652
670
|
<%- end -%>
|
@@ -654,12 +672,12 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) <%= k.pluralize %>Creat
|
|
654
672
|
}
|
655
673
|
|
656
674
|
// Get<%= k.pluralize %> is used for <%= @model_name %> to get associated objects <%= k.pluralize %>
|
657
|
-
// Say you have a <%= @model_name %> object named <%=
|
675
|
+
// Say you have a <%= @model_name %> object named <%= var_umn %>, when you call <%= var_umn %>.Get<%= k.pluralize %>(),
|
658
676
|
// the object will get the associated <%= k.pluralize %> attributes evaluated in the struct
|
659
|
-
func (_<%=
|
660
|
-
_<%= k.underscore.pluralize %>, err := <%= @model_name %>Get<%= k.pluralize %>(_<%=
|
677
|
+
func (_<%= var_umn %> *<%= @model_name %>) Get<%= k.pluralize %>() error {
|
678
|
+
_<%= k.underscore.pluralize %>, err := <%= @model_name %>Get<%= k.pluralize %>(_<%= var_umn %>.Id)
|
661
679
|
if err == nil {
|
662
|
-
_<%=
|
680
|
+
_<%= var_umn %>.<%= k %> = _<%= k.underscore.pluralize %>
|
663
681
|
}
|
664
682
|
return err
|
665
683
|
}
|
@@ -674,7 +692,7 @@ func <%= @model_name %>Get<%= k.pluralize %>(id int64) ([]<%= v[:class_name] %>,
|
|
674
692
|
FROM <%= target_table %>
|
675
693
|
INNER JOIN <%= through_table %>
|
676
694
|
ON <%= target_table %>.id = <%= through_table %>.<%= v[:class_name].underscore %>_id
|
677
|
-
WHERE <%= through_table %>.<%=
|
695
|
+
WHERE <%= through_table %>.<%= var_umn %>_id = ?`
|
678
696
|
_<%= k.underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>BySql(sql, id)
|
679
697
|
<%- elsif v[:as] -%>
|
680
698
|
where := `<%= v[:as] %>_type = "<%= @model_name %>" AND <%= v[:as] %>_id = ?`
|
@@ -683,7 +701,7 @@ func <%= @model_name %>Get<%= k.pluralize %>(id int64) ([]<%= v[:class_name] %>,
|
|
683
701
|
<%- if v[:foreign_key] -%>
|
684
702
|
_<%= k.underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>By("<%= v[:foreign_key] %>", id)
|
685
703
|
<%- else -%>
|
686
|
-
_<%= k.underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>By("<%=
|
704
|
+
_<%= k.underscore.pluralize %>, err := Find<%= v[:class_name].pluralize %>By("<%= var_umn %>_id", id)
|
687
705
|
<%- end -%>
|
688
706
|
<%- end -%>
|
689
707
|
return _<%= k.underscore.pluralize %>, err
|
@@ -696,11 +714,11 @@ func <%= @model_name %>Get<%= k.pluralize %>(id int64) ([]<%= v[:class_name] %>,
|
|
696
714
|
<%- has_one = @struct_info[:assoc_info][:has_one] -%>
|
697
715
|
<%- has_one.each do |k, v| -%>
|
698
716
|
// Create<%= k %> is a method for the <%= @model_name %> model object to create an associated <%= k %> record
|
699
|
-
func (_<%=
|
717
|
+
func (_<%= var_umn %> *<%= @model_name %>) Create<%= k %>(am map[string]interface{}) error {
|
700
718
|
<%- if v[:foreign_key] -%>
|
701
|
-
am["<%= v[:foreign_key] %>"] = _<%=
|
719
|
+
am["<%= v[:foreign_key] %>"] = _<%= var_umn %>.Id
|
702
720
|
<%- else -%>
|
703
|
-
am["<%=
|
721
|
+
am["<%= var_umn %>_id"] = _<%= var_umn %>.Id
|
704
722
|
<%- end -%>
|
705
723
|
_, err := Create<%= v[:class_name] %>(am)
|
706
724
|
return err
|
@@ -714,11 +732,11 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Create<%= k %>(am map[s
|
|
714
732
|
<%-# don't create virtual table for polymorphic model -%>
|
715
733
|
<%- next if v[:polymorphic] -%>
|
716
734
|
// Create<%= k %> is a method for a <%= @model_name %> object to create an associated <%= k %> record
|
717
|
-
func (_<%=
|
735
|
+
func (_<%= var_umn %> *<%= @model_name %>) Create<%= k %>(am map[string]interface{}) error {
|
718
736
|
<%- if v[:foreign_key] -%>
|
719
|
-
am["<%= v[:foreign_key] %>"] = _<%=
|
737
|
+
am["<%= v[:foreign_key] %>"] = _<%= var_umn %>.Id
|
720
738
|
<%- else -%>
|
721
|
-
am["<%=
|
739
|
+
am["<%= var_umn %>_id"] = _<%= var_umn %>.Id
|
722
740
|
<%- end -%>
|
723
741
|
_, err := Create<%= v[:class_name] %>(am)
|
724
742
|
return err
|
@@ -727,11 +745,11 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Create<%= k %>(am map[s
|
|
727
745
|
<%- end -%>
|
728
746
|
|
729
747
|
// Destroy is method used for a <%= @model_name %> object to be destroyed.
|
730
|
-
func (_<%=
|
731
|
-
if _<%=
|
748
|
+
func (_<%= var_umn %> *<%= @model_name %>) Destroy() error {
|
749
|
+
if _<%= var_umn %>.Id == 0 {
|
732
750
|
return errors.New("Invalid Id field: it can't be a zero value")
|
733
751
|
}
|
734
|
-
err := Destroy<%= @model_name %>(_<%=
|
752
|
+
err := Destroy<%= @model_name %>(_<%= var_umn %>.Id)
|
735
753
|
return err
|
736
754
|
}
|
737
755
|
|
@@ -833,12 +851,12 @@ func destroy<%= @model_name %>Associations(ids ...int64) {
|
|
833
851
|
<%- case opts[:dependent] -%>
|
834
852
|
<%- when :destroy, :delete_all -%>
|
835
853
|
<%- if opts[:through] -%>
|
836
|
-
where := fmt.Sprintf("id IN (SELECT id FROM <%= opts[:through].to_s %> WHERE <%=
|
854
|
+
where := fmt.Sprintf("id IN (SELECT id FROM <%= opts[:through].to_s %> WHERE <%= var_umn %>_id IN (?%s))", idsHolder)
|
837
855
|
_, err = Destroy<%= opts[:class_name].pluralize %>Where(where, idsT...)
|
838
856
|
if err != nil {
|
839
857
|
log.Printf("Destroy associated object %s error: %v\n", "<%= opts[:class_name].pluralize %>", err)
|
840
858
|
}
|
841
|
-
where = fmt.Sprintf("<%=
|
859
|
+
where = fmt.Sprintf("<%= var_umn %>_id IN (?%s)", idsHolder)
|
842
860
|
_, err = Destroy<%= opts[:through].to_s.pluralize.camelize %>Where(where, idsT...)
|
843
861
|
if err != nil {
|
844
862
|
log.Printf("Destroy associated object %s error: %v\n", "<%= opts[:through].to_s.singularize.camelize %>", err)
|
@@ -853,7 +871,7 @@ func destroy<%= @model_name %>Associations(ids ...int64) {
|
|
853
871
|
<%- if opts.key? :foreign_key -%>
|
854
872
|
where := fmt.Sprintf("<%= opts[:foreign_key] %> IN (?%s)", idsHolder)
|
855
873
|
<%- else -%>
|
856
|
-
where := fmt.Sprintf("<%=
|
874
|
+
where := fmt.Sprintf("<%= var_umn %>_id IN (?%s)", idsHolder)
|
857
875
|
<%- end -%>
|
858
876
|
_, err = Destroy<%= opts[:class_name].pluralize %>Where(where, idsT...)
|
859
877
|
if err != nil {
|
@@ -872,7 +890,7 @@ func destroy<%= @model_name %>Associations(ids ...int64) {
|
|
872
890
|
<%- if opts.key? :foreign_key -%>
|
873
891
|
sql := fmt.Sprintf("UPDATE <%= opts[:class_name].underscore.pluralize %> SET <%= opts[:foreign_key] %> = 0 WHERE <%= opts[:foreign_key] %> IN (?%s)", idsHolder)
|
874
892
|
<%- else -%>
|
875
|
-
sql := fmt.Sprintf("UPDATE <%= opts[:class_name].underscore.pluralize %> SET <%=
|
893
|
+
sql := fmt.Sprintf("UPDATE <%= opts[:class_name].underscore.pluralize %> SET <%= var_umn %>_id = 0 WHERE <%= var_umn %>_id IN (?%s)", idsHolder)
|
876
894
|
<%- end -%>
|
877
895
|
_, err = Update<%= opts[:class_name].pluralize %>BySql(sql, idsT...)
|
878
896
|
if err != nil {
|
@@ -889,8 +907,8 @@ func destroy<%= @model_name %>Associations(ids ...int64) {
|
|
889
907
|
|
890
908
|
// Save method is used for a <%= @model_name %> object to update an existed record mainly.
|
891
909
|
// If no id provided a new record will be created. A UPSERT action will be implemented further.
|
892
|
-
func (_<%=
|
893
|
-
ok, err := govalidator.ValidateStruct(_<%=
|
910
|
+
func (_<%= var_umn %> *<%= @model_name %>) Save() error {
|
911
|
+
ok, err := govalidator.ValidateStruct(_<%= var_umn %>)
|
894
912
|
if !ok {
|
895
913
|
errMsg := "Validate <%= @model_name %> struct error: Unknown error"
|
896
914
|
if err != nil {
|
@@ -899,17 +917,17 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Save() error {
|
|
899
917
|
log.Println(errMsg)
|
900
918
|
return errors.New(errMsg)
|
901
919
|
}
|
902
|
-
if _<%=
|
903
|
-
_, err = _<%=
|
920
|
+
if _<%= var_umn %>.Id == 0 {
|
921
|
+
_, err = _<%= var_umn %>.Create()
|
904
922
|
return err
|
905
923
|
}
|
906
924
|
<%- if @struct_info[:timestamp_cols].include? "updated_at" -%>
|
907
|
-
_<%=
|
925
|
+
_<%= var_umn %>.UpdatedAt = time.Now()
|
908
926
|
<%- end -%>
|
909
927
|
sqlFmt := `UPDATE <%= table_name %> SET %s WHERE id = %v`
|
910
928
|
<%- save_col_names = col_names - ["created_at"] -%>
|
911
|
-
sqlStr := fmt.Sprintf(sqlFmt, "<%= save_col_names.zip(save_col_names).map{|c| c.join(" = :")}.join(", ") %>", _<%=
|
912
|
-
_, err = DB.NamedExec(sqlStr, _<%=
|
929
|
+
sqlStr := fmt.Sprintf(sqlFmt, "<%= save_col_names.zip(save_col_names).map{|c| c.join(" = :")}.join(", ") %>", _<%= var_umn %>.Id)
|
930
|
+
_, err = DB.NamedExec(sqlStr, _<%= var_umn %>)
|
913
931
|
return err
|
914
932
|
}
|
915
933
|
|
@@ -943,29 +961,29 @@ func Update<%= @model_name %>(id int64, am map[string]interface{}) error {
|
|
943
961
|
}
|
944
962
|
|
945
963
|
// Update is a method used to update a <%= @model_name %> record with the map[string]interface{} typed key-value parameters.
|
946
|
-
func (_<%=
|
947
|
-
if _<%=
|
964
|
+
func (_<%= var_umn %> *<%= @model_name %>) Update(am map[string]interface{}) error {
|
965
|
+
if _<%= var_umn %>.Id == 0 {
|
948
966
|
return errors.New("Invalid Id field: it can't be a zero value")
|
949
967
|
}
|
950
|
-
err := Update<%= @model_name %>(_<%=
|
968
|
+
err := Update<%= @model_name %>(_<%= var_umn %>.Id, am)
|
951
969
|
return err
|
952
970
|
}
|
953
971
|
|
954
972
|
// UpdateAttributes method is supposed to be used to update <%= @model_name %> records as corresponding update_attributes in Ruby on Rails.
|
955
|
-
func (_<%=
|
956
|
-
if _<%=
|
973
|
+
func (_<%= var_umn %> *<%= @model_name %>) UpdateAttributes(am map[string]interface{}) error {
|
974
|
+
if _<%= var_umn %>.Id == 0 {
|
957
975
|
return errors.New("Invalid Id field: it can't be a zero value")
|
958
976
|
}
|
959
|
-
err := Update<%= @model_name %>(_<%=
|
977
|
+
err := Update<%= @model_name %>(_<%= var_umn %>.Id, am)
|
960
978
|
return err
|
961
979
|
}
|
962
980
|
|
963
981
|
// UpdateColumns method is supposed to be used to update <%= @model_name %> records as corresponding update_columns in Ruby on Rails.
|
964
|
-
func (_<%=
|
965
|
-
if _<%=
|
982
|
+
func (_<%= var_umn %> *<%= @model_name %>) UpdateColumns(am map[string]interface{}) error {
|
983
|
+
if _<%= var_umn %>.Id == 0 {
|
966
984
|
return errors.New("Invalid Id field: it can't be a zero value")
|
967
985
|
}
|
968
|
-
err := Update<%= @model_name %>(_<%=
|
986
|
+
err := Update<%= @model_name %>(_<%= var_umn %>.Id, am)
|
969
987
|
return err
|
970
988
|
}
|
971
989
|
|
data/lib/tasks/gor.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go-on-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- B1nj0y
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Modeling, developing and testing your Golang app with your familiar Rails
|
14
14
|
tools like rails generate, db migration, console etc. It is more meant to help integrating
|
@@ -57,5 +57,5 @@ rubyforge_project:
|
|
57
57
|
rubygems_version: 2.5.2
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
|
-
summary: Use Rails
|
60
|
+
summary: Use Rails to Develop or Generate a Golang application
|
61
61
|
test_files: []
|