@@ -167,60 +167,70 @@ module Clear::Model::HasColumns
167167 end
168168 end % }
169169
170- {% COLUMNS [name.var] = {
170+ {%
171+ db_column_name = column_name == nil ? name.var : column_name.id
172+
173+ COLUMNS [" #{ db_column_name.id } " ] = {
171174 type: _type,
172175 primary: primary,
173176 converter: converter,
174- column_name: " #{ (column_name || name.var) } " ,
177+ db_column_name: " #{ db_column_name.id } " ,
178+ crystal_variable_name: name.var,
175179 presence: presence,
176- } % }
180+ }
181+ % }
177182 end
178183
179184 # :nodoc:
180185 # Used internally to gather the columns
181186 macro __generate_columns__
182- {% for name , settings in COLUMNS % }
187+ {% for db_column_name , settings in COLUMNS % }
183188 {% type = settings[:type ] % }
189+
190+ {% var_name = settings[:crystal_variable_name ] % }
191+ {% db_name = settings[:db_column_name ] % }
192+
184193 {% has_db_default = ! settings[:presence ] % }
185194 {% converter = Clear ::Model ::Converter ::CONVERTERS [settings[:converter ]] % }
186195 {% if converter == nil % }
187196 {% raise " No converter found for `#{ settings[:converter ].id } `.\n " +
188197 " The type is probably not supported natively by Clear.\n " +
189198 " Please refer to the manual to create a custom converter." % }
190199 {% end % }
191- @{{name}}_column : Clear ::Model ::Column ({{type }}, {{converter}}) =
192- Clear ::Model ::Column ({{type }}, {{converter}}).new(" {{name}}" ,
200+
201+ @{{var_name}}_column : Clear ::Model ::Column ({{type }}, {{converter}}) =
202+ Clear ::Model ::Column ({{type }}, {{converter}}).new({{db_name}},
193203 has_db_default: {{has_db_default}} )
194204
195- # Returns the column object used to manage `{{name }}` field
205+ # Returns the column object used to manage `{{var_name }}` field
196206 #
197207 # See `Clear::Model::Column`
198- def {{name }}_column : Clear ::Model ::Column ({{type }}, {{converter}})
199- @{{name }}_column
208+ def {{var_name }}_column : Clear ::Model ::Column ({{type }}, {{converter}})
209+ @{{var_name }}_column
200210 end
201211
202- # Returns the value of `{{name }}` column or throw an exception if the column is not defined.
203- def {{name }} : {{type }}
204- @{{name }}_column.value
212+ # Returns the value of `{{var_name }}` column or throw an exception if the column is not defined.
213+ def {{var_name }} : {{type }}
214+ @{{var_name }}_column.value
205215 end
206216
207- # Setter for `{{name }}` column.
208- def {{name }}= (x : {{type }})
209- @{{name }}_column.value = x
217+ # Setter for `{{var_name }}` column.
218+ def {{var_name }}= (x : {{type }})
219+ @{{var_name }}_column.value = x
210220 end
211221
212222 {% if settings[:primary ] % }
213223 # :nodoc:
214- class_property pkey : String = " {{name }}"
224+ class_property pkey : String = " {{var_name }}"
215225
216226 # :nodoc:
217227 def pkey
218- @{{name }}_column.value
228+ @{{var_name }}_column.value
219229 end
220230
221231 # :nodoc:
222232 def pkey_column
223- @{{name }}_column
233+ @{{var_name }}_column
224234 end
225235 {% end % }
226236 {% end % }
@@ -230,13 +240,13 @@ module Clear::Model::HasColumns
230240 super
231241
232242 \{% for name, typ in T % }
233- \{% if ! @type .has_method?(" #{ name } =" ) % }
234- \{% raise " No method #{ @type } ##{ name } = while trying to set value of #{ name } " % }
235- \{% end % }
236243
237- \{% if settings = COLUMNS [" #{ name } " .id ] % }
238- @\{{name }}_column.reset_convert(t[:\{{name}}])
244+ \{% if settings = COLUMNS [" #{ name } " ] % }
245+ @\{{settings[ :crystal_variable_name ] }}_column.reset_convert(t[:\{{name}}])
239246 \{% else % }
247+ \{% if ! @type .has_method?(" #{ name } =" ) % }
248+ \{% raise " No method #{ @type } ##{ name } = while trying to set value of #{ name } " % }
249+ \{% end % }
240250 self .\{{name}} = t[:\{{name}}]
241251 \{% end % }
242252 \{% end % }
@@ -253,8 +263,8 @@ module Clear::Model::HasColumns
253263 super
254264
255265 \{% for name, settings in COLUMNS % }
256- v = h.fetch(:\{{settings[:column_name ]}}){ Column ::UNKNOWN }
257- @\{{name }}_column.reset_convert(v) unless v.is_a?(Column ::UnknownClass )
266+ v = h.fetch(:\{{settings[:db_column_name ]}}){ Column ::UNKNOWN }
267+ @\{{settings[ :crystal_variable_name ] }}_column.reset_convert(v) unless v.is_a?(Column ::UnknownClass )
258268 \{% end % }
259269
260270 self
@@ -265,8 +275,8 @@ module Clear::Model::HasColumns
265275 super
266276
267277 \{% for name, settings in COLUMNS % }
268- v = h.fetch(\{{settings[:column_name ]}}){ Column ::UNKNOWN }
269- @\{{name }}_column.reset_convert(v) unless v.is_a?(Column ::UnknownClass )
278+ v = h.fetch(\{{settings[:db_column_name ]}}){ Column ::UNKNOWN }
279+ @\{{settings[ :crystal_variable_name ] }}_column.reset_convert(v) unless v.is_a?(Column ::UnknownClass )
270280 \{% end % }
271281
272282 self
@@ -280,13 +290,12 @@ module Clear::Model::HasColumns
280290 super
281291
282292 \{% for name, typ in T % }
283- \{% if ! @type .has_method?(" #{ name } =" ) % }
284- \{% raise " No method #{ @type } ##{ name } = while trying to set value of #{ name } " % }
285- \{% end % }
286-
287293 \{% if settings = COLUMNS [" #{ name } " .id] % }
288- @\{{name }}_column.set_convert(t[:\{{name}}])
294+ @\{{settings[ :crystal_variable_name ] }}_column.set_convert(t[:\{{name}}])
289295 \{% else % }
296+ \{% if ! @type .has_method?(" #{ name } =" ) % }
297+ \{% raise " No method #{ @type } ##{ name } = while trying to set value of #{ name } " % }
298+ \{% end % }
290299 self .\{{name}} = t[:\{{name}}]
291300 \{% end % }
292301 \{% end % }
@@ -303,8 +312,8 @@ module Clear::Model::HasColumns
303312 super
304313
305314 \{% for name, settings in COLUMNS % }
306- v = h.fetch(:\{{settings[:column_name ]}}){ Column ::UNKNOWN }
307- @\{{name }}_column.set_convert(v) unless v.is_a?(Column ::UnknownClass )
315+ v = h.fetch(:\{{settings[:db_column_name ]}}){ Column ::UNKNOWN }
316+ @\{{settings[ :crystal_variable_name ] }}_column.set_convert(v) unless v.is_a?(Column ::UnknownClass )
308317 \{% end % }
309318
310319 self
@@ -315,8 +324,8 @@ module Clear::Model::HasColumns
315324 super
316325
317326 \{% for name, settings in COLUMNS % }
318- v = h.fetch(\{{settings[:column_name ]}}){ Column ::UNKNOWN }
319- @\{{name }}_column.set_convert(v) unless v.is_a?(Column ::UnknownClass )
327+ v = h.fetch(\{{settings[:db_column_name ]}}){ Column ::UNKNOWN }
328+ @\{{settings[ :crystal_variable_name ] }}_column.set_convert(v) unless v.is_a?(Column ::UnknownClass )
320329 \{% end % }
321330
322331 self
@@ -332,9 +341,9 @@ module Clear::Model::HasColumns
332341 o = super
333342
334343 {% for name, settings in COLUMNS % }
335- if @{{name }}_column.defined? &&
336- @{{name }}_column.changed?
337- o[{{settings[:column_name ]}}] = @{{name }}_column.to_sql_value
344+ if @{{settings[ :crystal_variable_name ] }}_column.defined? &&
345+ @{{settings[ :crystal_variable_name ] }}_column.changed?
346+ o[{{settings[:db_column_name ]}}] = @{{settings[ :crystal_variable_name ] }}_column.to_sql_value
338347 end
339348 {% end % }
340349
@@ -357,8 +366,8 @@ module Clear::Model::HasColumns
357366
358367 {% for name, settings in COLUMNS % }
359368 unless persisted?
360- if @{{name }}_column.failed_to_be_present?
361- add_error({{name .stringify}}, " must be present" )
369+ if @{{settings[ :crystal_variable_name ] }}_column.failed_to_be_present?
370+ add_error({{settings[ :crystal_variable_name ] .stringify}}, " must be present" )
362371 end
363372 end
364373 {% end % }
@@ -372,7 +381,7 @@ module Clear::Model::HasColumns
372381 # Returns `self`
373382 def clear_change_flags
374383 {% for name, settings in COLUMNS % }
375- @{{name }}_column.clear_change_flag
384+ @{{settings[ :crystal_variable_name ] }}_column.clear_change_flag
376385 {% end % }
377386
378387 self
@@ -383,8 +392,8 @@ module Clear::Model::HasColumns
383392 out = super
384393
385394 {% for name, settings in COLUMNS % }
386- if full || @{{name }}_column.defined?
387- out [{{settings[:column_name ]}}] = @{{name }}_column.to_sql_value(nil )
395+ if full || @{{settings[ :crystal_variable_name ] }}_column.defined?
396+ out [{{settings[:db_column_name ]}}] = @{{settings[ :crystal_variable_name ] }}_column.to_sql_value(nil )
388397 end
389398 {% end % }
390399
@@ -395,7 +404,7 @@ module Clear::Model::HasColumns
395404 # have been changed.). Return `false` otherwise.
396405 def changed ?
397406 {% for name, settings in COLUMNS % }
398- return true if @{{name }}_column.changed?
407+ return true if @{{settings[ :crystal_variable_name ] }}_column.changed?
399408 {% end % }
400409
401410 return false
0 commit comments