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

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