module SchildErweitert::SchildTypeSaver
Schild
hat teilweise nil in DB-Feldern. SchildTypeSaver
gibt entweder einen Leer-String zurück (“”) oder bei strftime das 1899 Datum zurück.
Public Class Methods
included(klass)
click to toggle source
bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode erstellt, die bei nil ein Null-Objekt erstellt.
# File lib/schild.rb, line 180 def self.included(klass) klass.columns.each do |column| name = column.snake_case MethodLogger::Methods.add(klass, name) # allow_nil ist als Argument optional und lässt bei +true+ alle Ergebnisse durch define_method(("_"+name.to_s).to_sym) {public_send(column)} define_method(name) do |allow_nil=false| ret = public_send(column) if allow_nil || ret ret = ret.strip if ret.class == String ret else create_null_object(klass, column) end end end end
Public Instance Methods
create_null_object(klass, column)
click to toggle source
# File lib/schild.rb, line 198 def create_null_object(klass, column) k = Schild.db.schema_type_class(klass.db_schema[column][:type]) if k.class == Array # Sequel stellt :datetime als [Time, DateTime] dar, deswegen die Abfrage nach Array # Schild verwendet Time Objekte, wir machen das auch Time.new(1899) elsif k == Integer 0 elsif k == Float 0.0 else # alle anderen types werden als Klasse zurückgegeben k.new end end