Suche
Jeder der selbst eine Ruby Anwendung schreiben will kommt früher oder später dazu, dass diese Anwendung verschiedene Konfigurationen speichern muss. Eine kurze Suche in den ruby gems bringt eine Vielzahl von Möglichkeiten:

Also was soll jetzt genutzt werden?
mir persönlich sind nach etwas Suchen folgende beiden gems aufgefallen:
- parseconfig und
-
configatron
Parseconfig
Sehr einfach zu handhaben und man hat sehr schnell das was man braucht
1 config File mit folgendem Aufbau:
[sqlserver] <-- Gruppe
/* mysql or odbc */
db_type = odbc <-- Wert
db_user = root
db_pw = pwd
Also so wie die meisten es aus den linux config Files kennen
Gelesen werden die Werte dann über folgenden Quellcode:
c = ParseConfig.new('Config/myconf.conf')
c.groups.each do |g|
begin
c.params[g].each do |s|
puts "Gruppe: "<<g<<" Name: "<<s[0]<<" Wert:"<<s[1]
end
end
Also relativ einfach. Das Problem ist jetzt aber, wenn man mehr als eine Schachtelungstiefe hat geht das mit parseconfig nicht.
Configatron
Hier können mehrstufige Konfigurationen genutzt werden. Wie das prinzipiell funktioniert findet man hier. Bei genauerer Betrachtung sieht man aber noch die configure_from_yaml Funktion. Damit kann man ein File das "mehrstufig" designed ist sehr schön einlesen und nutzen.
Hier die Quelltexte:
yml-file
players:
Vladimir Kramnik: &kramnik
rating: 2700
status: GM
Deep Fritz: &fritz
rating: 2700
status: Computer
David Mertz: &mertz
rating: 1400
status: Amateur
queries:
User: &user
select: |select * from user
update: |UPDATE user SET name = 'fritz' where name = 'egon'
insert: |Inset into...
Test: &test
bla: bla
blub: blub
und auslesen kann man das dann über:
def read_config
@deep =1;
configatron.email = 'blub@gmx.de'
configatron.configure_from_yaml('Config/database.yml')
configatron.to_hash.each do |k,v|
if v.class != Hash
puts "Key: #{k.to_s} Value: #{v.to_s} \n"
else
puts k.to_s+ " \n"
next_node v.to_hash
end
end
end
def next_node (item)
item.each do |k,v|
if v.class != Hash
puts "Key: #{k.to_s} Value: #{v.to_s}\n"
else
puts k.to_s+ " \n"
next_node v.to_hash
end
end
end