Heute Nacht saß irgendwann wie betäubt vor meinem Quelltext und machte ein apathisches Auditing, bis ich auf die Stelle stieß, wo ich im TracEnviironment-Model die Trac.ini verarbeite. Wie bereits anderswo beschrieben, werden die Werte aus der ini-Datei als Attribute der jeweiligen TracEnvironmant-Instanz abgelegt, damit ich darauf zugreifan kann wie auf ein ActiveRecord-Objekt. Das übernimmt diese Methode:
def parse_config_file!(file=nil)
config = {}
section = ''
begin
file = File.new(file||self.config_file)
file.each_line do |line|
if /^[([a-z0-9_]*)]$/.match line
section = $1
elsif /^\s*([a-zA-Z0-9_]*)\s*=\s*(.*)$/.match line
self.send "#{section}__#{$1}=", $2
end
end
rescue Errno::ENOENT
end
config
end
Zurückschreiben geht ähnlich, halt einfach den gleichen Weg rückwärts. Das funktioniert alles Prima so weit udn ich denke auch nicht, dass ich das so bald ändern werde. Dennoch packte mich die Neugier, ob es nicht vielleicht ein Rails-Plugin oder ein Gem zurm INI-Dateihandling gibt. Und siehe da: das inifile-Gem tut genau das: https://rubyforge.org/projects/inifile. Intern werden die "Sections" als Hash gespeichert und auf die Sections wird ebenfalls wie ein Hash zugegriffen.
Alles sehr nett. Viel Spaß damit, sollte jemand das mal brauchen...