og 0.24.0 → 0.25.0
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.
- data/ProjectInfo +2 -5
- data/README +2 -0
- data/doc/AUTHORS +4 -1
- data/doc/RELEASES +53 -0
- data/examples/run.rb +2 -2
- data/lib/{og/mixin → glue}/hierarchical.rb +19 -19
- data/lib/{og/mixin → glue}/optimistic_locking.rb +1 -1
- data/lib/glue/orderable.rb +235 -0
- data/lib/glue/revisable.rb +2 -0
- data/lib/glue/taggable.rb +176 -0
- data/lib/{og/mixin/taggable.rb → glue/taggable_old.rb} +6 -0
- data/lib/glue/timestamped.rb +37 -0
- data/lib/{og/mixin → glue}/tree.rb +3 -8
- data/lib/og.rb +21 -20
- data/lib/og/collection.rb +15 -1
- data/lib/og/entity.rb +256 -114
- data/lib/og/manager.rb +60 -27
- data/lib/og/{mixin/schema_inheritance_base.rb → markers.rb} +5 -2
- data/lib/og/relation.rb +70 -74
- data/lib/og/relation/belongs_to.rb +5 -3
- data/lib/og/relation/has_many.rb +1 -0
- data/lib/og/relation/joins_many.rb +5 -4
- data/lib/og/store.rb +25 -46
- data/lib/og/store/alpha/filesys.rb +1 -1
- data/lib/og/store/alpha/kirby.rb +30 -30
- data/lib/og/store/alpha/memory.rb +49 -49
- data/lib/og/store/alpha/sqlserver.rb +7 -7
- data/lib/og/store/kirby.rb +38 -38
- data/lib/og/store/mysql.rb +43 -43
- data/lib/og/store/psql.rb +222 -53
- data/lib/og/store/sql.rb +165 -105
- data/lib/og/store/sqlite.rb +29 -25
- data/lib/og/validation.rb +24 -14
- data/lib/{vendor → og/vendor}/README +0 -0
- data/lib/{vendor → og/vendor}/kbserver.rb +1 -1
- data/lib/{vendor → og/vendor}/kirbybase.rb +230 -79
- data/lib/{vendor → og/vendor}/mysql.rb +0 -0
- data/lib/{vendor → og/vendor}/mysql411.rb +0 -0
- data/test/og/mixin/tc_hierarchical.rb +1 -1
- data/test/og/mixin/tc_optimistic_locking.rb +1 -1
- data/test/og/mixin/tc_orderable.rb +1 -1
- data/test/og/mixin/tc_taggable.rb +2 -2
- data/test/og/mixin/tc_timestamped.rb +2 -2
- data/test/og/tc_finder.rb +33 -0
- data/test/og/tc_inheritance.rb +2 -2
- data/test/og/tc_scoped.rb +45 -0
- data/test/og/tc_store.rb +1 -7
- metadata +21 -18
- data/lib/og/mixin/orderable.rb +0 -174
- data/lib/og/mixin/revisable.rb +0 -0
- data/lib/og/mixin/timestamped.rb +0 -24
@@ -214,8 +214,8 @@ private
|
|
214
214
|
# gmosx: keep the '' for nil symbols.
|
215
215
|
return %|#\{@#{p.symbol} ? "'#\{#{self.class}.escape(@#{p.symbol}.to_yaml)\}'" : "''"\}|
|
216
216
|
end
|
217
|
-
end
|
218
|
-
|
217
|
+
end
|
218
|
+
|
219
219
|
def read_prop(p, col)
|
220
220
|
if p.klass.ancestors.include?(Integer)
|
221
221
|
return "res[#{col} + offset].to_i"
|
@@ -229,24 +229,24 @@ private
|
|
229
229
|
return "#{self.class}.parse_date(res[#{col} + offset])"
|
230
230
|
elsif p.klass.ancestors.include?(TrueClass)
|
231
231
|
return "('0' != res[#{col} + offset])"
|
232
|
-
else
|
232
|
+
else
|
233
233
|
return "YAML.load(res[#{col} + offset])"
|
234
|
-
end
|
234
|
+
end
|
235
235
|
end
|
236
236
|
|
237
237
|
def eval_og_insert(klass)
|
238
238
|
props = klass.properties
|
239
239
|
values = props.collect { |p| write_prop(p) }.join(',')
|
240
|
-
|
240
|
+
|
241
241
|
sql = "INSERT INTO #{klass::OGTABLE} (#{props.collect {|p| p.symbol.to_s}.join(',')}) VALUES (#{values})"
|
242
242
|
|
243
243
|
klass.class_eval %{
|
244
244
|
def og_insert(store)
|
245
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
245
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
246
246
|
store.conn.query_with_result = false
|
247
247
|
store.conn.query "#{sql}"
|
248
248
|
@#{klass.pk_symbol} = store.conn.insert_id
|
249
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
249
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
250
250
|
end
|
251
251
|
}
|
252
252
|
end
|
data/lib/og/store/kirby.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
begin
|
2
|
-
require 'vendor/kirbybase'
|
2
|
+
require 'og/vendor/kirbybase'
|
3
3
|
rescue Object => ex
|
4
4
|
Logger.error 'KirbyBase is not installed!'
|
5
5
|
Logger.error ex
|
@@ -18,11 +18,11 @@ module Og
|
|
18
18
|
class KirbyStore < SqlStore
|
19
19
|
|
20
20
|
# Override if needed.
|
21
|
-
|
21
|
+
|
22
22
|
def self.base_dir(options)
|
23
23
|
options[:base_dir] || './kirbydb'
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def self.destroy(options)
|
27
27
|
begin
|
28
28
|
FileUtils.rm_rf(base_dir(options))
|
@@ -35,7 +35,7 @@ class KirbyStore < SqlStore
|
|
35
35
|
def initialize(options)
|
36
36
|
super
|
37
37
|
mode = options[:mode] || :local
|
38
|
-
|
38
|
+
|
39
39
|
if mode == :client
|
40
40
|
# Use a client/server configuration.
|
41
41
|
@conn = KirbyBase.new(:client, options[:address], options[:port])
|
@@ -56,14 +56,14 @@ class KirbyStore < SqlStore
|
|
56
56
|
# Nothing to do.
|
57
57
|
super
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def enchant(klass, manager)
|
61
61
|
klass.send :attr_accessor, :recno
|
62
62
|
klass.send :alias_method, :oid, :recno
|
63
63
|
klass.send :alias_method, :oid=, :recno=
|
64
64
|
|
65
65
|
symbols = klass.properties.keys
|
66
|
-
|
66
|
+
|
67
67
|
klass.module_eval %{
|
68
68
|
def self.kb_create(recno, #{symbols.join(', ')})
|
69
69
|
obj = self.allocate
|
@@ -72,14 +72,14 @@ class KirbyStore < SqlStore
|
|
72
72
|
return obj
|
73
73
|
end
|
74
74
|
}
|
75
|
-
|
75
|
+
|
76
76
|
super
|
77
77
|
end
|
78
78
|
|
79
79
|
def get_table(klass)
|
80
80
|
@conn.get_table(klass.table.to_sym)
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
# :section: Lifecycle methods.
|
84
84
|
|
85
85
|
def load(pk, klass)
|
@@ -104,19 +104,19 @@ class KirbyStore < SqlStore
|
|
104
104
|
#--
|
105
105
|
# FIXME: optimize me!
|
106
106
|
#++
|
107
|
-
|
107
|
+
|
108
108
|
def count(options)
|
109
109
|
find(options).size
|
110
110
|
end
|
111
111
|
|
112
112
|
def query(options)
|
113
113
|
Logger.debug "Querying with #{options.inspect}." if $DBG
|
114
|
-
|
114
|
+
|
115
115
|
klass = options[:class]
|
116
116
|
table = get_table(klass)
|
117
|
-
|
117
|
+
|
118
118
|
objects = []
|
119
|
-
|
119
|
+
|
120
120
|
if condition = options[:condition] || options[:where]
|
121
121
|
condition.gsub!(/=/, '==')
|
122
122
|
condition.gsub!(/LIKE '(.*?)'/, '=~ /\1/')
|
@@ -126,29 +126,29 @@ class KirbyStore < SqlStore
|
|
126
126
|
else
|
127
127
|
objects = table.select
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
if order = options[:order]
|
131
131
|
desc = (order =~ /DESC/)
|
132
132
|
order = order.gsub(/DESC/, '').gsub(/ASC/, '')
|
133
133
|
eval "objects.sort { |x, y| x.#{order} <=> y.#{order} }"
|
134
134
|
objects.reverse! if desc
|
135
135
|
end
|
136
|
-
|
137
|
-
return objects
|
136
|
+
|
137
|
+
return objects
|
138
138
|
end
|
139
139
|
|
140
|
-
def start
|
140
|
+
def start
|
141
141
|
# nop
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
# Commit a transaction.
|
145
|
-
|
145
|
+
|
146
146
|
def commit
|
147
147
|
# nop, not supported?
|
148
148
|
end
|
149
|
-
|
149
|
+
|
150
150
|
# Rollback a transaction.
|
151
|
-
|
151
|
+
|
152
152
|
def rollback
|
153
153
|
# nop, not supported?
|
154
154
|
end
|
@@ -182,15 +182,15 @@ private
|
|
182
182
|
|
183
183
|
def fields_for_class(klass)
|
184
184
|
fields = []
|
185
|
-
|
185
|
+
|
186
186
|
klass.properties.values.each do |p|
|
187
187
|
klass.index(p.symbol) if p.index
|
188
|
-
|
188
|
+
|
189
189
|
fields << p.symbol
|
190
|
-
|
190
|
+
|
191
191
|
type = p.klass.name.to_sym
|
192
192
|
type = :Integer if type == :Fixnum
|
193
|
-
|
193
|
+
|
194
194
|
fields << type
|
195
195
|
end
|
196
196
|
|
@@ -207,14 +207,14 @@ private
|
|
207
207
|
|
208
208
|
klass.class_eval %{
|
209
209
|
def og_insert(store)
|
210
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
210
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
211
211
|
Logger.debug "Inserting \#{self}." if $DBG
|
212
212
|
@#{pk} = store.get_table(#{klass}).insert(self)
|
213
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
213
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
214
214
|
end
|
215
215
|
}
|
216
216
|
end
|
217
|
-
|
217
|
+
|
218
218
|
# Compile the og_update method for the class.
|
219
219
|
|
220
220
|
def eval_og_update(klass)
|
@@ -223,41 +223,41 @@ private
|
|
223
223
|
|
224
224
|
klass.module_eval %{
|
225
225
|
def og_update(store, options = nil)
|
226
|
-
#{Aspects.gen_advice_code(:og_update, klass.advices, :pre) if klass.respond_to?(:advices)}
|
226
|
+
#{Glue::Aspects.gen_advice_code(:og_update, klass.advices, :pre) if klass.respond_to?(:advices)}
|
227
227
|
store.get_table(#{klass}).update { |r| r.recno == #{pk} }.set(#{updates.join(', ')})
|
228
|
-
#{Aspects.gen_advice_code(:og_update, klass.advices, :post) if klass.respond_to?(:advices)}
|
228
|
+
#{Glue::Aspects.gen_advice_code(:og_update, klass.advices, :post) if klass.respond_to?(:advices)}
|
229
229
|
end
|
230
230
|
}
|
231
231
|
end
|
232
|
-
|
232
|
+
|
233
233
|
def eval_og_read(klass)
|
234
234
|
klass.module_eval %{
|
235
235
|
def og_read(res, row = 0, offset = 0)
|
236
|
-
#{Aspects.gen_advice_code(:og_read, klass.advices, :pre) if klass.respond_to?(:advices)}
|
237
|
-
#{Aspects.gen_advice_code(:og_read, klass.advices, :post) if klass.respond_to?(:advices)}
|
236
|
+
#{Glue::Aspects.gen_advice_code(:og_read, klass.advices, :pre) if klass.respond_to?(:advices)}
|
237
|
+
#{Glue::Aspects.gen_advice_code(:og_read, klass.advices, :post) if klass.respond_to?(:advices)}
|
238
238
|
end
|
239
239
|
}
|
240
|
-
end
|
240
|
+
end
|
241
241
|
|
242
242
|
def eval_og_delete(klass)
|
243
243
|
klass.module_eval %{
|
244
244
|
def og_delete(store, pk, cascade = true)
|
245
245
|
pk ||= self.pk
|
246
246
|
pk = pk.to_i
|
247
|
-
#{Aspects.gen_advice_code(:og_delete, klass.advices, :pre) if klass.respond_to?(:advices)}
|
247
|
+
#{Glue::Aspects.gen_advice_code(:og_delete, klass.advices, :pre) if klass.respond_to?(:advices)}
|
248
248
|
table = store.get_table(self.class)
|
249
249
|
transaction do |tx|
|
250
250
|
table.delete { |r| r.recno == pk }
|
251
|
-
if cascade and #{klass}.ann.
|
252
|
-
#{klass}.ann.
|
251
|
+
if cascade and #{klass}.ann.self[:descendants]
|
252
|
+
#{klass}.ann.self.descendants.each do |dclass, foreign_key|
|
253
253
|
dtable = store.get_table(dclass)
|
254
254
|
dtable.delete { |r| foreign_key == pk }
|
255
255
|
end
|
256
256
|
end
|
257
257
|
end
|
258
|
-
#{Aspects.gen_advice_code(:og_delete, klass.advices, :post) if klass.respond_to?(:advices)}
|
258
|
+
#{Glue::Aspects.gen_advice_code(:og_delete, klass.advices, :post) if klass.respond_to?(:advices)}
|
259
259
|
end
|
260
|
-
}
|
260
|
+
}
|
261
261
|
end
|
262
262
|
|
263
263
|
end
|
data/lib/og/store/mysql.rb
CHANGED
@@ -5,8 +5,8 @@ rescue Object => ex
|
|
5
5
|
Logger.error 'Trying to use the pure-Ruby binding included in Og'
|
6
6
|
begin
|
7
7
|
# Attempt to use the included pure ruby version.
|
8
|
-
require 'vendor/mysql'
|
9
|
-
require 'vendor/mysql411'
|
8
|
+
require 'og/vendor/mysql'
|
9
|
+
require 'og/vendor/mysql411'
|
10
10
|
rescue Object => ex
|
11
11
|
Logger.error ex
|
12
12
|
end
|
@@ -43,30 +43,30 @@ class Mysql::Result
|
|
43
43
|
yield(row, 0)
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
def first_value
|
48
48
|
val = fetch_row[0]
|
49
49
|
free
|
50
50
|
return val
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
alias_method :close, :free
|
54
54
|
|
55
55
|
def fields
|
56
56
|
fetch_fields.map { |f| f.name }
|
57
|
-
end
|
57
|
+
end
|
58
58
|
end
|
59
59
|
|
60
60
|
module Og
|
61
61
|
|
62
62
|
module MysqlUtils
|
63
63
|
include SqlUtils
|
64
|
-
|
64
|
+
|
65
65
|
def escape(str)
|
66
66
|
return nil unless str
|
67
67
|
return Mysql.quote(str)
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def quote(val)
|
71
71
|
case val
|
72
72
|
when Fixnum, Integer, Float
|
@@ -79,11 +79,11 @@ module MysqlUtils
|
|
79
79
|
val ? "'#{date(val)}'" : 'NULL'
|
80
80
|
when TrueClass
|
81
81
|
val ? "'1'" : 'NULL'
|
82
|
-
else
|
82
|
+
else
|
83
83
|
# gmosx: keep the '' for nil symbols.
|
84
84
|
val ? escape(val.to_yaml) : ''
|
85
|
-
end
|
86
|
-
end
|
85
|
+
end
|
86
|
+
end
|
87
87
|
end
|
88
88
|
|
89
89
|
# A Store that persists objects into a MySQL database.
|
@@ -129,7 +129,7 @@ class MysqlStore < SqlStore
|
|
129
129
|
# this is the location of mysql.sock. For Ubuntu/Debian
|
130
130
|
# this is '/var/run/mysqld/mysqld.sock'. You can find
|
131
131
|
# the location for your system in my.cnf
|
132
|
-
|
132
|
+
|
133
133
|
def initialize(options)
|
134
134
|
super
|
135
135
|
|
@@ -146,12 +146,12 @@ class MysqlStore < SqlStore
|
|
146
146
|
|
147
147
|
# You should set recconect to true to avoid MySQL has
|
148
148
|
# gone away errors.
|
149
|
-
|
149
|
+
|
150
150
|
if @conn.respond_to? :reconnect
|
151
151
|
options[:reconnect] = true unless options.has_key?(:reconnect)
|
152
152
|
@conn.reconnect = options[:reconnect]
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
rescue => ex
|
156
156
|
if ex.errno == 1049 # database does not exist.
|
157
157
|
Logger.info "Database '#{options[:name]}' not found!"
|
@@ -166,15 +166,15 @@ class MysqlStore < SqlStore
|
|
166
166
|
super
|
167
167
|
end
|
168
168
|
|
169
|
-
def enchant(klass, manager)
|
170
|
-
if klass.ann.
|
169
|
+
def enchant(klass, manager)
|
170
|
+
if klass.ann.self.primary_key.symbol == :oid
|
171
171
|
unless klass.properties.include? :oid
|
172
172
|
klass.property :oid, Fixnum, :sql => 'integer AUTO_INCREMENT PRIMARY KEY'
|
173
173
|
end
|
174
174
|
end
|
175
175
|
super
|
176
176
|
end
|
177
|
-
|
177
|
+
|
178
178
|
def query(sql)
|
179
179
|
Logger.debug sql if $DBG
|
180
180
|
@conn.query_with_result = true
|
@@ -191,20 +191,20 @@ class MysqlStore < SqlStore
|
|
191
191
|
handle_sql_exception(ex, sql)
|
192
192
|
end
|
193
193
|
|
194
|
-
def start
|
194
|
+
def start
|
195
195
|
# nop
|
196
196
|
# FIXME: InnoDB supports transactions.
|
197
197
|
end
|
198
|
-
|
198
|
+
|
199
199
|
# Commit a transaction.
|
200
|
-
|
200
|
+
|
201
201
|
def commit
|
202
202
|
# nop, not supported?
|
203
203
|
# FIXME: InnoDB supports transactions.
|
204
204
|
end
|
205
|
-
|
205
|
+
|
206
206
|
# Rollback a transaction.
|
207
|
-
|
207
|
+
|
208
208
|
def rollback
|
209
209
|
# nop, not supported?
|
210
210
|
# FIXME: InnoDB supports transactions.
|
@@ -223,29 +223,29 @@ private
|
|
223
223
|
# THINK, should a method more like this be
|
224
224
|
# used instead of catching database exceptions
|
225
225
|
# for 'table exists'?
|
226
|
-
|
226
|
+
|
227
227
|
return if @conn.list_tables.include?(klass::OGTABLE)
|
228
|
-
|
229
|
-
|
228
|
+
|
229
|
+
|
230
230
|
fields = fields_for_class(klass)
|
231
231
|
|
232
232
|
sql = "CREATE TABLE #{klass::OGTABLE} (#{fields.join(', ')}"
|
233
|
-
|
233
|
+
|
234
234
|
# Create table constraints.
|
235
|
-
|
236
|
-
if constraints = klass.ann.
|
235
|
+
|
236
|
+
if constraints = klass.ann.self[:sql_constraint]
|
237
237
|
sql << ", #{constraints.join(', ')}"
|
238
238
|
end
|
239
|
-
|
239
|
+
|
240
240
|
if table_type = @options[:table_type]
|
241
241
|
sql << ") TYPE = #{table_type};"
|
242
242
|
else
|
243
243
|
sql << ");"
|
244
244
|
end
|
245
|
-
|
245
|
+
|
246
246
|
# Create indices.
|
247
|
-
|
248
|
-
if indices = klass.ann.
|
247
|
+
|
248
|
+
if indices = klass.ann.self[:index]
|
249
249
|
for data in indices
|
250
250
|
idx, options = *data
|
251
251
|
idx = idx.to_s
|
@@ -254,7 +254,7 @@ private
|
|
254
254
|
sql << " CREATE #{pre_sql} INDEX #{klass::OGTABLE}_#{idxname}_idx #{post_sql} ON #{klass::OGTABLE} (#{idx});"
|
255
255
|
end
|
256
256
|
end
|
257
|
-
|
257
|
+
|
258
258
|
@conn.query_with_result = false
|
259
259
|
|
260
260
|
begin
|
@@ -268,11 +268,11 @@ private
|
|
268
268
|
raise
|
269
269
|
end
|
270
270
|
end
|
271
|
-
|
271
|
+
|
272
272
|
# Create join tables if needed. Join tables are used in
|
273
273
|
# 'many_to_many' relations.
|
274
|
-
|
275
|
-
if join_tables = klass.ann.
|
274
|
+
|
275
|
+
if join_tables = klass.ann.self[:join_tables]
|
276
276
|
for info in join_tables
|
277
277
|
begin
|
278
278
|
create_join_table_sql(info).each do |sql|
|
@@ -317,12 +317,12 @@ private
|
|
317
317
|
return %|#\{@#{p} ? "'#\{#{self.class}.date(@#{p})\}'" : 'NULL'\}|
|
318
318
|
elsif p.klass.ancestors.include?(TrueClass)
|
319
319
|
return "#\{@#{p} ? \"'1'\" : 'NULL' \}"
|
320
|
-
else
|
320
|
+
else
|
321
321
|
# gmosx: keep the '' for nil symbols.
|
322
322
|
return %|#\{@#{p} ? "'#\{#{self.class}.escape(@#{p}.to_yaml)\}'" : "''"\}|
|
323
323
|
end
|
324
|
-
end
|
325
|
-
|
324
|
+
end
|
325
|
+
|
326
326
|
def read_prop(p, col)
|
327
327
|
if p.klass.ancestors.include?(Integer)
|
328
328
|
return "#{self.class}.parse_int(res[#{col} + offset])"
|
@@ -336,9 +336,9 @@ private
|
|
336
336
|
return "#{self.class}.parse_date(res[#{col} + offset])"
|
337
337
|
elsif p.klass.ancestors.include?(TrueClass)
|
338
338
|
return "('1' == res[#{col} + offset])"
|
339
|
-
else
|
339
|
+
else
|
340
340
|
return "YAML.load(res[#{col} + offset])"
|
341
|
-
end
|
341
|
+
end
|
342
342
|
end
|
343
343
|
|
344
344
|
def eval_og_insert(klass)
|
@@ -349,16 +349,16 @@ private
|
|
349
349
|
props << Property.new(:symbol => :ogtype, :klass => String)
|
350
350
|
values << ", '#{klass}'"
|
351
351
|
end
|
352
|
-
|
352
|
+
|
353
353
|
sql = "INSERT INTO #{klass::OGTABLE} (#{props.collect {|p| field_for_property(p)}.join(',')}) VALUES (#{values})"
|
354
354
|
|
355
355
|
klass.class_eval %{
|
356
356
|
def og_insert(store)
|
357
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
357
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
358
358
|
store.conn.query_with_result = false
|
359
359
|
store.conn.query "#{sql}"
|
360
360
|
@#{klass.pk_symbol} = store.conn.insert_id
|
361
|
-
#{Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
361
|
+
#{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
362
362
|
end
|
363
363
|
}
|
364
364
|
end
|