# dynamische Address Klasse
# bekommt einen Hash als Argument mit den Spalten Namen als keys
# und den Spalten Einträgen als values
class Address
def initialize(hash)
hash.keys.each do |key|
type.send(:attr_accessor, key)
end
hash.each do |key, value|
send("#{key}=", value)
end
end
end
# Bekommt die Daten für die Datenbank
# Jede von DBI unterstützte Datenbank ist verwendbar
class AddressDB
def initialize(dbd_driver, database, table, user="", password="")
@dbd_driver = dbd_driver
@database = database
@table = table
@user = user
@password = password
@column_names = []
@dbh = DBI.connect("dbi:#{dbd_driver}:#{database}", user, password)
@dbh.columns("#{table}").each do |col|
#puts col['name']
@column_names << col['name']
end
end
# liefert für jeden Eintrag ein Address Objekt zurück
def each_entry
sql = "SELECT * FROM #{@table}"
@dbh.execute(sql) do |sth|
sth.fetch do |row|
r = row.to_h
yield Address.new(r)
end
end
end
end
# Testcode
ab = AddressDB.new("Mysql", "abook1", "addresses1", "markus", "eagle")