go-on-rails 0.1.4 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d2c69a6ebce31c2804821e2984af576d8a45212
4
- data.tar.gz: fcd5211c4a7eb06c15f8fb82ee37cb71f36ade55
3
+ metadata.gz: 4885ebf7ebb9df3a3c2941dd88966f28384975a1
4
+ data.tar.gz: 71d6fca3d339378f36105063de928ed2f3620d0a
5
5
  SHA512:
6
- metadata.gz: 7706dd9487899a009c937f4cc114c197e839ffc8a3f89b115de3f59b3301013030b6950207c796b6c236870f9fdfa13a2ae4360663a6db33d27f0c73c533b93a
7
- data.tar.gz: 0b60b8ded7ee6f87c8533c0cae640dcc07cb1724ee24ec98caed7c2f85e8407ed71a35eedbe3db02170598a729b472e2d4a1b8cef12116e830b4b1578fa24662
6
+ metadata.gz: 86055cbc92c586e8c1764f392f2bc1ca895faee9b3b0933a3c88c87ea58199bdabfd2b24853a55a9b6b46b51f7bb316e470c9d3004cac3d29b344b4f46390154
7
+ data.tar.gz: a835298ceea075195217320032977be3530b1dad25aa1233f72ba34d33553e64ed581bdaa248f4c692b3d69b2c325730bd6edd81af92339d9afe930f79b8ae27
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/go-on-rails.svg)](https://badge.fury.io/rb/go-on-rails)
2
+
1
3
  <img align="right" width="260" height="260" src="./go-on-rails.png">
2
4
 
3
5
  go-on-rails
@@ -9,7 +11,7 @@ go-on-rails is a Rails generator created for three scenarios:
9
11
  2. Use your farmiliar Rails tools to develope and manage a Golang app project
10
12
  3. Convert a *not very complicated* Rails app to Golang equivalent
11
13
 
12
- Here's a simple [example(tutorial)](https://github.com/goonr/example_simple) shows the basic usage of go-on-rails generator, and some real-world examples are coming soon.
14
+ Here's a simple [example(tutorial)](https://github.com/goonr/example_simple) shows the basic usage of go-on-rails generator, and [another example](https://github.com/goonr/example_with_admin) shows how to integrate Go APIs in a Rails project. Some real-world examples are coming soon.
13
15
 
14
16
  ## Prerequisites
15
17
 
@@ -21,7 +23,7 @@ Here's a simple [example(tutorial)](https://github.com/goonr/example_simple) sho
21
23
  Add this line to your application's Gemfile:
22
24
 
23
25
  ```ruby
24
- gem 'go-on-rails', '~> 0.1.3'
26
+ gem 'go-on-rails', '~> 0.1.4'
25
27
  ```
26
28
 
27
29
  And then execute:
@@ -29,6 +29,10 @@ class GorGenerator < Rails::Generators::Base
29
29
  puts "Rails env: [#{rails_env}]"
30
30
  puts "The models: #{@models} will be converted to a Golang App!"
31
31
 
32
+ # read the database configuration
33
+ @db_config = {}
34
+ create_database_config(rails_env)
35
+
32
36
  @models.each do |m|
33
37
  begin
34
38
  klass = m.split('::').inject(Object) { |kls, part| kls.const_get(part) }
@@ -48,8 +52,6 @@ class GorGenerator < Rails::Generators::Base
48
52
  copy_file "main.go", "go_app/main.go"
49
53
 
50
54
  # generate program for database connection
51
- @db_config = {}
52
- create_database_config(rails_env)
53
55
  template "db.go.erb", "go_app/models/db.go"
54
56
 
55
57
  # generate the controllers and views dir
@@ -75,6 +77,7 @@ class GorGenerator < Rails::Generators::Base
75
77
 
76
78
  def create_database_config rails_env
77
79
  db_conf = Rails.configuration.database_configuration[rails_env]
80
+ db_conf["host"] = "localhost" unless db_conf["host"]
78
81
  case db_conf["adapter"]
79
82
  when "sqlite3"
80
83
  @db_config[:driver_name] = "sqlite3"
@@ -82,10 +85,11 @@ class GorGenerator < Rails::Generators::Base
82
85
  @db_config[:driver_package] = "_ \"github.com/mattn/go-sqlite3\""
83
86
  when "mysql2"
84
87
  @db_config[:driver_name] = "mysql"
88
+ db_conf["port"] = 3306 unless db_conf["port"]
85
89
  # MySQL DSN format: username:password@protocol(address)/dbname?param=value
86
90
  # See more: https://github.com/go-sql-driver/mysql
87
- format = "%s:%s@%s/%s?charset=%s&parseTime=True&loc=Local"
88
- @db_config[:dsn] = sprintf(format, *db_conf.values_at("username", "password", "host", "database", "encoding"))
91
+ format = "%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local"
92
+ @db_config[:dsn] = sprintf(format, *db_conf.values_at("username", "password", "host", "port", "database", "encoding"))
89
93
  @db_config[:driver_package] = "_ \"github.com/go-sql-driver/mysql\""
90
94
  when "postgresql"
91
95
  @db_config[:driver_name] = "postgres"
@@ -7,7 +7,7 @@ import (
7
7
  "github.com/jmoiron/sqlx"
8
8
  )
9
9
 
10
- var db *sqlx.DB
10
+ var DB *sqlx.DB
11
11
 
12
12
  func init() {
13
13
  var err error
@@ -19,7 +19,7 @@ func init() {
19
19
  if dsn == "" {
20
20
  log.Fatal("Invalid DSN")
21
21
  }
22
- db, err = sqlx.Connect(driver_name, dsn)
22
+ DB, err = sqlx.Connect(driver_name, dsn)
23
23
  if err != nil {
24
24
  log.Fatal(err)
25
25
  }
@@ -9,6 +9,7 @@ import (
9
9
  "errors"
10
10
  "fmt"
11
11
  "log"
12
+ "math"
12
13
  "strings"
13
14
  <%- if @struct_info[:has_datetime_type] -%>
14
15
  "time"
@@ -26,13 +27,187 @@ type <%= @model_name %> struct {
26
27
  <%= @struct_info[:struct_body] -%>
27
28
  }
28
29
 
29
- // Find<%= @model_name %> find a single <%= model_name_underscore %> by an id
30
+ // DataStruct for the pagination
31
+ type <%= @model_name %>Page struct {
32
+ WhereString string
33
+ WhereParams []interface{}
34
+ Order map[string]string
35
+ FirstId int64
36
+ LastId int64
37
+ PageNum int
38
+ PerPage int
39
+ TotalPages int
40
+ TotalItems int64
41
+ orderStr string
42
+ }
43
+
44
+ // Current get the current page of <%= @model_name %>Page object for pagination
45
+ func (_p *<%= @model_name %>Page) Current() ([]<%= @model_name %>, error) {
46
+ if _, exist := _p.Order["id"]; !exist {
47
+ return nil, errors.New("No id order specified in Order map")
48
+ }
49
+ err := _p.buildPageCount()
50
+ if err != nil {
51
+ return nil, fmt.Errorf("Calculate page count error: %v", err)
52
+ }
53
+ if _p.orderStr == "" {
54
+ _p.buildOrder()
55
+ }
56
+ idStr, idParams := _p.buildIdRestrict("current")
57
+ <% if @db_config[:driver_name] == "postgres" %>
58
+ whereStr := fmt.Sprintf("%s %s %s FETCH NEXT %v ROWS ONLY", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
59
+ <% else %>
60
+ whereStr := fmt.Sprintf("%s %s %s LIMIT %v", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
61
+ <% end %>
62
+ whereParams := []interface{}{}
63
+ whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
64
+ <%= param_name_plural %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
65
+ if err != nil {
66
+ return nil, err
67
+ }
68
+ if len(<%= param_name_plural %>) != 0 {
69
+ _p.FirstId, _p.LastId = <%= param_name_plural %>[0].Id, <%= param_name_plural %>[len(<%= param_name_plural %>)-1].Id
70
+ }
71
+ return <%= param_name_plural %>, nil
72
+ }
73
+
74
+ // Current get the previous page of <%= @model_name %>Page object for pagination
75
+ func (_p *<%= @model_name %>Page) Previous() ([]<%= @model_name %>, error) {
76
+ if _p.PageNum == 0 {
77
+ return nil, errors.New("This's the first page, no previous page yet")
78
+ }
79
+ if _, exist := _p.Order["id"]; !exist {
80
+ return nil, errors.New("No id order specified in Order map")
81
+ }
82
+ err := _p.buildPageCount()
83
+ if err != nil {
84
+ return nil, fmt.Errorf("Calculate page count error: %v", err)
85
+ }
86
+ if _p.orderStr == "" {
87
+ _p.buildOrder()
88
+ }
89
+ idStr, idParams := _p.buildIdRestrict("previous")
90
+ <% if @db_config[:driver_name] == "postgres" %>
91
+ whereStr := fmt.Sprintf("%s %s %s FETCH NEXT %v ROWS ONLY", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
92
+ <% else %>
93
+ whereStr := fmt.Sprintf("%s %s %s LIMIT %v", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
94
+ <% end %>
95
+ whereParams := []interface{}{}
96
+ whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
97
+ <%= param_name_plural %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
98
+ if err != nil {
99
+ return nil, err
100
+ }
101
+ if len(<%= param_name_plural %>) != 0 {
102
+ _p.FirstId, _p.LastId = <%= param_name_plural %>[0].Id, <%= param_name_plural %>[len(<%= param_name_plural %>)-1].Id
103
+ }
104
+ _p.PageNum -= 1
105
+ return <%= param_name_plural %>, nil
106
+ }
107
+
108
+ // Current get the next page of <%= @model_name %>Page object for pagination
109
+ func (_p *<%= @model_name %>Page) Next() ([]<%= @model_name %>, error) {
110
+ if _p.PageNum == _p.TotalPages-1 {
111
+ return nil, errors.New("This's the last page, no next page yet")
112
+ }
113
+ if _, exist := _p.Order["id"]; !exist {
114
+ return nil, errors.New("No id order specified in Order map")
115
+ }
116
+ err := _p.buildPageCount()
117
+ if err != nil {
118
+ return nil, fmt.Errorf("Calculate page count error: %v", err)
119
+ }
120
+ if _p.orderStr == "" {
121
+ _p.buildOrder()
122
+ }
123
+ idStr, idParams := _p.buildIdRestrict("next")
124
+ <% if @db_config[:driver_name] == "postgres" %>
125
+ whereStr := fmt.Sprintf("%s %s %s FETCH NEXT %v ROWS ONLY", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
126
+ <% else %>
127
+ whereStr := fmt.Sprintf("%s %s %s LIMIT %v", _p.WhereString, idStr, _p.orderStr, _p.PerPage)
128
+ <% end %>
129
+ whereParams := []interface{}{}
130
+ whereParams = append(append(whereParams, _p.WhereParams...), idParams...)
131
+ <%= param_name_plural %>, err := Find<%= @model_name.pluralize %>Where(whereStr, whereParams...)
132
+ if err != nil {
133
+ return nil, err
134
+ }
135
+ if len(<%= param_name_plural %>) != 0 {
136
+ _p.FirstId, _p.LastId = <%= param_name_plural %>[0].Id, <%= param_name_plural %>[len(<%= param_name_plural %>)-1].Id
137
+ }
138
+ _p.PageNum += 1
139
+ return <%= param_name_plural %>, nil
140
+ }
141
+
142
+ // buildOrder is for <%= @model_name %>Page object to build SQL ORDER clause
143
+ func (_p *<%= @model_name %>Page) buildOrder() {
144
+ tempList := []string{}
145
+ for k, v := range _p.Order {
146
+ tempList = append(tempList, fmt.Sprintf("%v %v", k, v))
147
+ }
148
+ _p.orderStr = " ORDER BY " + strings.Join(tempList, ", ")
149
+ }
150
+
151
+ // buildIdRestrict is for <%= @model_name %>Page object to build a SQL clause for ID restriction,
152
+ // implementing a simple keyset style pagination
153
+ func (_p *<%= @model_name %>Page) buildIdRestrict(direction string) (idStr string, idParams []interface{}) {
154
+ switch direction {
155
+ case "previous":
156
+ if strings.ToLower(_p.Order["id"]) == "desc" {
157
+ idStr += "id > ? "
158
+ idParams = append(_p.WhereParams, _p.FirstId)
159
+ } else {
160
+ idStr += "id < ? "
161
+ idParams = append(_p.WhereParams, _p.FirstId)
162
+ }
163
+ case "current":
164
+ // trick to make Where function work
165
+ if _p.PageNum == 0 && _p.FirstId == 0 && _p.LastId == 0 {
166
+ idStr += "id > ? "
167
+ idParams = append(_p.WhereParams, 0)
168
+ } else {
169
+ if strings.ToLower(_p.Order["id"]) == "desc" {
170
+ idStr += "id <= ? AND id >= ? "
171
+ idParams = append(_p.WhereParams, _p.FirstId, _p.LastId)
172
+ } else {
173
+ idStr += "id >= ? AND id <= ? "
174
+ idParams = append(_p.WhereParams, _p.FirstId, _p.LastId)
175
+ }
176
+ }
177
+ case "next":
178
+ if strings.ToLower(_p.Order["id"]) == "desc" {
179
+ idStr += "id < ? "
180
+ idParams = append(_p.WhereParams, _p.LastId)
181
+ } else {
182
+ idStr += "id > ? "
183
+ idParams = append(_p.WhereParams, _p.LastId)
184
+ }
185
+ }
186
+ return
187
+ }
188
+
189
+ // buildPageCount calculate the TotalItems/TotalPages for the <%= @model_name %>Page object
190
+ func (_p *<%= @model_name %>Page) buildPageCount() error {
191
+ count, err := <%= @model_name %>CountWhere(_p.WhereString, _p.WhereParams...)
192
+ if err != nil {
193
+ return err
194
+ }
195
+ _p.TotalItems = count
196
+ if _p.PerPage == 0 {
197
+ _p.PerPage = 10
198
+ }
199
+ _p.TotalPages = int(math.Ceil(float64(_p.TotalItems) / float64(_p.PerPage)))
200
+ return nil
201
+ }
202
+
203
+
204
+ // Find<%= @model_name %> find a single <%= model_name_underscore %> by an ID
30
205
  func Find<%= @model_name %>(id int64) (*<%= @model_name %>, error) {
31
206
  if id == 0 {
32
- return nil, errors.New("Invalid id: it can't be zero")
207
+ return nil, errors.New("Invalid ID: it can't be zero")
33
208
  }
34
209
  _<%= model_name_underscore %> := <%= @model_name %>{}
35
- err := db.Get(&_<%= model_name_underscore %>, db.Rebind(`SELECT * FROM <%= table_name %> WHERE id = ? LIMIT 1`), id)
210
+ err := DB.Get(&_<%= model_name_underscore %>, DB.Rebind(`SELECT * FROM <%= table_name %> WHERE id = ? LIMIT 1`), id)
36
211
  if err != nil {
37
212
  log.Printf("Error: %v\n", err)
38
213
  return nil, err
@@ -40,10 +215,10 @@ func Find<%= @model_name %>(id int64) (*<%= @model_name %>, error) {
40
215
  return &_<%= model_name_underscore %>, nil
41
216
  }
42
217
 
43
- // First<%= @model_name %> find the first one <%= model_name_underscore %> by id ASC order
218
+ // First<%= @model_name %> find the first one <%= model_name_underscore %> by ID ASC order
44
219
  func First<%= @model_name %>() (*<%= @model_name %>, error) {
45
220
  _<%= model_name_underscore %> := <%= @model_name %>{}
46
- err := db.Get(&_<%= model_name_underscore %>, db.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id ASC LIMIT 1`))
221
+ err := DB.Get(&_<%= model_name_underscore %>, DB.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id ASC LIMIT 1`))
47
222
  if err != nil {
48
223
  log.Printf("Error: %v\n", err)
49
224
  return nil, err
@@ -51,11 +226,11 @@ func First<%= @model_name %>() (*<%= @model_name %>, error) {
51
226
  return &_<%= model_name_underscore %>, nil
52
227
  }
53
228
 
54
- // First<%= @model_name.pluralize %> find the first N <%= model_name_underscore.pluralize %> by id ASC order
229
+ // First<%= @model_name.pluralize %> find the first N <%= model_name_underscore.pluralize %> by ID ASC order
55
230
  func First<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
56
231
  _<%= param_name_plural %> := []<%= @model_name %>{}
57
232
  sql := fmt.Sprintf("SELECT * FROM <%= table_name %> ORDER BY id ASC LIMIT %v", n)
58
- err := db.Select(&_<%= param_name_plural %>, db.Rebind(sql))
233
+ err := DB.Select(&_<%= param_name_plural %>, DB.Rebind(sql))
59
234
  if err != nil {
60
235
  log.Printf("Error: %v\n", err)
61
236
  return nil, err
@@ -63,10 +238,10 @@ func First<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
63
238
  return _<%= param_name_plural %>, nil
64
239
  }
65
240
 
66
- // Last<%= @model_name %> find the last one <%= model_name_underscore %> by id DESC order
241
+ // Last<%= @model_name %> find the last one <%= model_name_underscore %> by ID DESC order
67
242
  func Last<%= @model_name %>() (*<%= @model_name %>, error) {
68
243
  _<%= model_name_underscore %> := <%= @model_name %>{}
69
- err := db.Get(&_<%= model_name_underscore %>, db.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id DESC LIMIT 1`))
244
+ err := DB.Get(&_<%= model_name_underscore %>, DB.Rebind(`SELECT * FROM <%= table_name %> ORDER BY id DESC LIMIT 1`))
70
245
  if err != nil {
71
246
  log.Printf("Error: %v\n", err)
72
247
  return nil, err
@@ -74,11 +249,11 @@ func Last<%= @model_name %>() (*<%= @model_name %>, error) {
74
249
  return &_<%= model_name_underscore %>, nil
75
250
  }
76
251
 
77
- // Last<%= @model_name.pluralize %> find the last N <%= model_name_underscore.pluralize %> by id DESC order
252
+ // Last<%= @model_name.pluralize %> find the last N <%= model_name_underscore.pluralize %> by ID DESC order
78
253
  func Last<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
79
254
  _<%= param_name_plural %> := []<%= @model_name %>{}
80
255
  sql := fmt.Sprintf("SELECT * FROM <%= table_name %> ORDER BY id DESC LIMIT %v", n)
81
- err := db.Select(&_<%= param_name_plural %>, db.Rebind(sql))
256
+ err := DB.Select(&_<%= param_name_plural %>, DB.Rebind(sql))
82
257
  if err != nil {
83
258
  log.Printf("Error: %v\n", err)
84
259
  return nil, err
@@ -86,7 +261,7 @@ func Last<%= @model_name.pluralize %>(n uint32) ([]<%= @model_name %>, error) {
86
261
  return _<%= param_name_plural %>, nil
87
262
  }
88
263
 
89
- // Find<%= @model_name.pluralize %> find one or more <%= model_name_underscore.pluralize %> by one or more ids
264
+ // Find<%= @model_name.pluralize %> find one or more <%= model_name_underscore.pluralize %> by the given ID(s)
90
265
  func Find<%= @model_name.pluralize %>(ids ...int64) ([]<%= @model_name %>, error) {
91
266
  if len(ids) == 0 {
92
267
  msg := "At least one or more ids needed"
@@ -95,12 +270,12 @@ func Find<%= @model_name.pluralize %>(ids ...int64) ([]<%= @model_name %>, error
95
270
  }
96
271
  _<%= param_name_plural %> := []<%= @model_name %>{}
97
272
  idsHolder := strings.Repeat(",?", len(ids)-1)
98
- sql := db.Rebind(fmt.Sprintf(`SELECT * FROM <%= table_name %> WHERE id IN (?%s)`, idsHolder))
273
+ sql := DB.Rebind(fmt.Sprintf(`SELECT * FROM <%= table_name %> WHERE id IN (?%s)`, idsHolder))
99
274
  idsT := []interface{}{}
100
275
  for _,id := range ids {
101
276
  idsT = append(idsT, interface{}(id))
102
277
  }
103
- err := db.Select(&_<%= param_name_plural %>, sql, idsT...)
278
+ err := DB.Select(&_<%= param_name_plural %>, sql, idsT...)
104
279
  if err != nil {
105
280
  log.Printf("Error: %v\n", err)
106
281
  return nil, err
@@ -113,7 +288,7 @@ func Find<%= @model_name %>By(field string, val interface{}) (*<%= @model_name %
113
288
  _<%= model_name_underscore %> := <%= @model_name %>{}
114
289
  sqlFmt := `SELECT * FROM <%= table_name %> WHERE %s = ? LIMIT 1`
115
290
  sqlStr := fmt.Sprintf(sqlFmt, field)
116
- err := db.Get(&_<%= model_name_underscore %>, db.Rebind(sqlStr), val)
291
+ err := DB.Get(&_<%= model_name_underscore %>, DB.Rebind(sqlStr), val)
117
292
  if err != nil {
118
293
  log.Printf("Error: %v\n", err)
119
294
  return nil, err
@@ -125,7 +300,7 @@ func Find<%= @model_name %>By(field string, val interface{}) (*<%= @model_name %
125
300
  func Find<%= @model_name.pluralize %>By(field string, val interface{}) (_<%= param_name_plural %> []<%= @model_name %>, err error) {
126
301
  sqlFmt := `SELECT * FROM <%= table_name %> WHERE %s = ?`
127
302
  sqlStr := fmt.Sprintf(sqlFmt, field)
128
- err = db.Select(&_<%= param_name_plural %>, db.Rebind(sqlStr), val)
303
+ err = DB.Select(&_<%= param_name_plural %>, DB.Rebind(sqlStr), val)
129
304
  if err != nil {
130
305
  log.Printf("Error: %v\n", err)
131
306
  return nil, err
@@ -135,7 +310,7 @@ func Find<%= @model_name.pluralize %>By(field string, val interface{}) (_<%= par
135
310
 
136
311
  // All<%= @model_name.pluralize %> get all the <%= @model_name %> records
137
312
  func All<%= @model_name.pluralize %>() (<%= param_name_plural %> []<%= @model_name %>, err error) {
138
- err = db.Select(&<%= param_name_plural %>, "SELECT * FROM <%= table_name %>")
313
+ err = DB.Select(&<%= param_name_plural %>, "SELECT * FROM <%= table_name %>")
139
314
  if err != nil {
140
315
  log.Println(err)
141
316
  return nil, err
@@ -145,7 +320,7 @@ func All<%= @model_name.pluralize %>() (<%= param_name_plural %> []<%= @model_na
145
320
 
146
321
  // <%= @model_name %>Count get the count of all the <%= @model_name %> records
147
322
  func <%= @model_name %>Count() (c int64, err error) {
148
- err = db.Get(&c, "SELECT count(*) FROM <%= table_name %>")
323
+ err = DB.Get(&c, "SELECT count(*) FROM <%= table_name %>")
149
324
  if err != nil {
150
325
  log.Println(err)
151
326
  return 0, err
@@ -159,7 +334,7 @@ func <%= @model_name %>CountWhere(where string, args ...interface{}) (c int64, e
159
334
  if len(where) > 0 {
160
335
  sql = sql + " WHERE " + where
161
336
  }
162
- stmt, err := db.Preparex(db.Rebind(sql))
337
+ stmt, err := DB.Preparex(DB.Rebind(sql))
163
338
  if err != nil {
164
339
  log.Println(err)
165
340
  return 0, err
@@ -272,9 +447,9 @@ func <%= @model_name %>IncludesWhere(assocs []string, sql string, args ...interf
272
447
  return _<%= param_name_plural %>, nil
273
448
  }
274
449
 
275
- // <%= @model_name %>Ids get all the Ids of <%= @model_name %> records
450
+ // <%= @model_name %>Ids get all the IDs of <%= @model_name %> records
276
451
  func <%= @model_name %>Ids() (ids []int64, err error) {
277
- err = db.Select(&ids, "SELECT id FROM <%= table_name %>")
452
+ err = DB.Select(&ids, "SELECT id FROM <%= table_name %>")
278
453
  if err != nil {
279
454
  log.Println(err)
280
455
  return nil, err
@@ -282,7 +457,7 @@ func <%= @model_name %>Ids() (ids []int64, err error) {
282
457
  return ids, nil
283
458
  }
284
459
 
285
- // <%= @model_name %>IdsWhere get all the Ids of <%= @model_name %> records by where restriction
460
+ // <%= @model_name %>IdsWhere get all the IDs of <%= @model_name %> records by where restriction
286
461
  func <%= @model_name %>IdsWhere(where string, args ...interface{}) ([]int64, error) {
287
462
  ids, err := <%= @model_name %>IntCol("id", where, args...)
288
463
  return ids, err
@@ -294,7 +469,7 @@ func <%= @model_name %>IntCol(col, where string, args ...interface{}) (intColRec
294
469
  if len(where) > 0 {
295
470
  sql = sql + " WHERE " + where
296
471
  }
297
- stmt, err := db.Preparex(db.Rebind(sql))
472
+ stmt, err := DB.Preparex(DB.Rebind(sql))
298
473
  if err != nil {
299
474
  log.Println(err)
300
475
  return nil, err
@@ -313,7 +488,7 @@ func <%= @model_name %>StrCol(col, where string, args ...interface{}) (strColRec
313
488
  if len(where) > 0 {
314
489
  sql = sql + " WHERE " + where
315
490
  }
316
- stmt, err := db.Preparex(db.Rebind(sql))
491
+ stmt, err := DB.Preparex(DB.Rebind(sql))
317
492
  if err != nil {
318
493
  log.Println(err)
319
494
  return nil, err
@@ -334,7 +509,7 @@ func Find<%= @model_name.pluralize %>Where(where string, args ...interface{}) (<
334
509
  if len(where) > 0 {
335
510
  sql = sql + " WHERE " + where
336
511
  }
337
- stmt, err := db.Preparex(db.Rebind(sql))
512
+ stmt, err := DB.Preparex(DB.Rebind(sql))
338
513
  if err != nil {
339
514
  log.Println(err)
340
515
  return nil, err
@@ -351,7 +526,7 @@ func Find<%= @model_name.pluralize %>Where(where string, args ...interface{}) (<
351
526
  // with placeholders, eg: FindUserBySql("SELECT * FROM users WHERE first_name = ? AND age > ? ORDER BY DESC LIMIT 1", "John", 18)
352
527
  // will return only One record in the table "users" whose first_name is "John" and age elder than 18
353
528
  func Find<%= @model_name %>BySql(sql string, args ...interface{}) (*<%= @model_name %>, error) {
354
- stmt, err := db.Preparex(db.Rebind(sql))
529
+ stmt, err := DB.Preparex(DB.Rebind(sql))
355
530
  if err != nil {
356
531
  log.Println(err)
357
532
  return nil, err
@@ -369,7 +544,7 @@ func Find<%= @model_name %>BySql(sql string, args ...interface{}) (*<%= @model_n
369
544
  // with placeholders, eg: FindUsersBySql("SELECT * FROM users WHERE first_name = ? AND age > ?", "John", 18)
370
545
  // will return those records in the table "users" whose first_name is "John" and age elder than 18
371
546
  func Find<%= @model_name.pluralize %>BySql(sql string, args ...interface{}) (<%= param_name_plural %> []<%= @model_name %>, err error) {
372
- stmt, err := db.Preparex(db.Rebind(sql))
547
+ stmt, err := DB.Preparex(DB.Rebind(sql))
373
548
  if err != nil {
374
549
  log.Println(err)
375
550
  return nil, err
@@ -404,7 +579,7 @@ func Create<%= @model_name %>(am map[string]interface{}) (int64, error) {
404
579
  }
405
580
  sqlFmt := `INSERT INTO <%= table_name %> (%s) VALUES (%s)`
406
581
  sqlStr := fmt.Sprintf(sqlFmt, strings.Join(keys, ","), ":"+strings.Join(keys, ",:"))
407
- result, err := db.NamedExec(sqlStr, am)
582
+ result, err := DB.NamedExec(sqlStr, am)
408
583
  if err != nil {
409
584
  log.Println(err)
410
585
  return 0, err
@@ -435,7 +610,7 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Create() (int64, error)
435
610
  <%- end -%>
436
611
  <%- end -%>
437
612
  sql := `INSERT INTO <%= table_name %> (<%= col_names.join(",") %>) VALUES (:<%= col_names.join(",:") %>)`
438
- result, err := db.NamedExec(sql, _<%= model_name_underscore %>)
613
+ result, err := DB.NamedExec(sql, _<%= model_name_underscore %>)
439
614
  if err != nil {
440
615
  log.Println(err)
441
616
  return 0, err
@@ -517,7 +692,7 @@ func <%= @model_name %>Get<%= k.pluralize %>(id int64) ([]<%= v[:class_name] %>,
517
692
  <%- unless @struct_info[:assoc_info][:has_one].empty? -%>
518
693
  <%- has_one = @struct_info[:assoc_info][:has_one] -%>
519
694
  <%- has_one.each do |k, v| -%>
520
- // Create<%= k %> is a method used for <%= @model_name %> model
695
+ // Create<%= k %> is a method for the <%= @model_name %> model object to create an associated <%= k %> record
521
696
  func (_<%= model_name_underscore %> *<%= @model_name %>) Create<%= k %>(am map[string]interface{}) error {
522
697
  <%- if v[:foreign_key] -%>
523
698
  am["<%= v[:foreign_key] %>"] = _<%= model_name_underscore %>.Id
@@ -557,14 +732,14 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Destroy() error {
557
732
  return err
558
733
  }
559
734
 
560
- // Destroy<%= @model_name %> will destroy a <%= @model_name %> record specified by id parameter.
735
+ // Destroy<%= @model_name %> will destroy a <%= @model_name %> record specified by the id parameter.
561
736
  func Destroy<%= @model_name %>(id int64) error {
562
737
  <%- if @struct_info[:has_assoc_dependent] -%>
563
738
  // Destroy association objects at first
564
739
  // Not care if exec properly temporarily
565
740
  destroy<%= @model_name %>Associations(id)
566
741
  <%- end -%>
567
- stmt, err := db.Preparex(db.Rebind(`DELETE FROM <%= table_name %> WHERE id = ?`))
742
+ stmt, err := DB.Preparex(DB.Rebind(`DELETE FROM <%= table_name %> WHERE id = ?`))
568
743
  _, err = stmt.Exec(id)
569
744
  if err != nil {
570
745
  return err
@@ -590,7 +765,7 @@ func Destroy<%= @model_name.pluralize %>(ids ...int64) (int64, error) {
590
765
  for _,id := range ids {
591
766
  idsT = append(idsT, interface{}(id))
592
767
  }
593
- stmt, err := db.Preparex(db.Rebind(sql))
768
+ stmt, err := DB.Preparex(DB.Rebind(sql))
594
769
  result, err := stmt.Exec(idsT...)
595
770
  if err != nil {
596
771
  return 0, err
@@ -602,8 +777,8 @@ func Destroy<%= @model_name.pluralize %>(ids ...int64) (int64, error) {
602
777
  return cnt, nil
603
778
  }
604
779
 
605
- // Destroy<%= @model_name.pluralize %>Where delete records by a where clause
606
- // like: Destroy<%= @model_name.pluralize %>Where("name = ?", "John")
780
+ // Destroy<%= @model_name.pluralize %>Where delete records by a where clause restriction.
781
+ // e.g. Destroy<%= @model_name.pluralize %>Where("name = ?", "John")
607
782
  // And this func will not call the association dependent action
608
783
  func Destroy<%= @model_name.pluralize %>Where(where string, args ...interface{}) (int64, error) {
609
784
  sql := `DELETE FROM <%= table_name %> WHERE `
@@ -620,7 +795,7 @@ func Destroy<%= @model_name.pluralize %>Where(where string, args ...interface{})
620
795
  destroy<%= @model_name %>Associations(ids...)
621
796
  }
622
797
  <%- end -%>
623
- stmt, err := db.Preparex(db.Rebind(sql))
798
+ stmt, err := DB.Preparex(DB.Rebind(sql))
624
799
  result, err := stmt.Exec(args...)
625
800
  if err != nil {
626
801
  return 0, err
@@ -731,7 +906,7 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Save() error {
731
906
  sqlFmt := `UPDATE <%= table_name %> SET %s WHERE id = %v`
732
907
  <%- save_col_names = col_names - ["created_at"] -%>
733
908
  sqlStr := fmt.Sprintf(sqlFmt, "<%= save_col_names.zip(save_col_names).map{|c| c.join(" = :")}.join(", ") %>", _<%= model_name_underscore %>.Id)
734
- _, err = db.NamedExec(sqlStr, _<%= model_name_underscore %>)
909
+ _, err = DB.NamedExec(sqlStr, _<%= model_name_underscore %>)
735
910
  return err
736
911
  }
737
912
 
@@ -756,7 +931,7 @@ func Update<%= @model_name %>(id int64, am map[string]interface{}) error {
756
931
  setKeysArr = append(setKeysArr, s)
757
932
  }
758
933
  sqlStr := fmt.Sprintf(sqlFmt, strings.Join(setKeysArr, ", "), id)
759
- _, err := db.NamedExec(sqlStr, am)
934
+ _, err := DB.NamedExec(sqlStr, am)
760
935
  if err != nil {
761
936
  log.Println(err)
762
937
  return err
@@ -773,6 +948,7 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) Update(am map[string]in
773
948
  return err
774
949
  }
775
950
 
951
+ // UpdateAttributes method is supposed to be used to update <%= @model_name %> records as corresponding update_attributes in Ruby on Rails.
776
952
  func (_<%= model_name_underscore %> *<%= @model_name %>) UpdateAttributes(am map[string]interface{}) error {
777
953
  if _<%= model_name_underscore %>.Id == 0 {
778
954
  return errors.New("Invalid Id field: it can't be a zero value")
@@ -781,7 +957,7 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) UpdateAttributes(am map
781
957
  return err
782
958
  }
783
959
 
784
- // UpdateColumns method is supposed to be used to update <%= @model_name %> records as corresponding update_columns in Rails
960
+ // UpdateColumns method is supposed to be used to update <%= @model_name %> records as corresponding update_columns in Ruby on Rails.
785
961
  func (_<%= model_name_underscore %> *<%= @model_name %>) UpdateColumns(am map[string]interface{}) error {
786
962
  if _<%= model_name_underscore %>.Id == 0 {
787
963
  return errors.New("Invalid Id field: it can't be a zero value")
@@ -791,7 +967,7 @@ func (_<%= model_name_underscore %> *<%= @model_name %>) UpdateColumns(am map[st
791
967
  }
792
968
 
793
969
  // Update<%= @model_name.pluralize %>BySql is used to update <%= @model_name %> records by a SQL clause
794
- // that use '?' binding syntax
970
+ // using the '?' binding syntax.
795
971
  func Update<%= @model_name.pluralize %>BySql(sql string, args ...interface{}) (int64, error) {
796
972
  if sql == "" {
797
973
  return 0, errors.New("A blank SQL clause")
@@ -800,7 +976,7 @@ func Update<%= @model_name.pluralize %>BySql(sql string, args ...interface{}) (i
800
976
  sql = strings.Replace(strings.ToLower(sql), "set", "set updated_at = ?, ", 1)
801
977
  args = append([]interface{}{time.Now()}, args...)
802
978
  <%- end -%>
803
- stmt, err := db.Preparex(db.Rebind(sql))
979
+ stmt, err := DB.Preparex(DB.Rebind(sql))
804
980
  result, err := stmt.Exec(args...)
805
981
  if err != nil {
806
982
  return 0, err
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
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - B1nj0y
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-07 00:00:00.000000000 Z
11
+ date: 2017-09-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