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