Module: SchildErweitert::SchildTypeSaver
- Defined in:
- lib/schild.rb
Overview
Schild hat teilweise nil in DB-Feldern. SchildTypeSaver gibt entweder einen Leer-String zurück (“”) oder bei strftime das 1899 Datum zurück.
Class Method Summary collapse
-
.included(klass) ⇒ Object
bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode erstellt, die bei nil ein Null-Objekt erstellt.
Instance Method Summary collapse
Class Method Details
.included(klass) ⇒ Object
bei include wird für jede Spalte in der Schild-Tabelle eine Ersatzmethode erstellt, die bei nil ein Null-Objekt erstellt.
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# 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 |
Instance Method Details
#create_null_object(klass, column) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# 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 |