2008-09-19 6 views
24

Ich muss einige einfache Eigenschaften in einer Datei speichern und auf sie von Ruby zugreifen.Java-.properties-Datei entspricht Ruby?

Ich liebe absolut das .properties-Dateiformat, das der Standard für solche Dinge in Java ist (mit der java.util.Properties-Klasse) ... es ist einfach, einfach zu bedienen und leicht zu lesen.

Also, gibt es irgendwo eine Ruby-Klasse, mit der ich einige wichtige Wertepaare aus einer Datei ohne großen Aufwand laden kann?

Ich möchte nicht XML verwenden, also bitte REXML nicht vorschlagen (mein Zweck garantiert nicht die "Winkelklammersteuer").

Ich habe überlegt, meine eigene Lösung zu rollen ... es wäre wahrscheinlich etwa 5-10 Zeilen Code-Oberseiten, aber ich würde immer noch lieber eine vorhandene Bibliothek (wenn es im Wesentlichen ein Hash aus einer Datei aufgebaut ist) .. . wie wäre es auf 1 Linie bringen ....


UPDATE: es ist eigentlich eine gerade Ruby-App, nicht Schienen, aber ich denke, YAML gut tun wird (es ist in der Rückseite meines Geistes war, aber ich hatte es vergessen ... habe es gesehen, aber noch nie benutzt, danke allen!

Antwort

26

Ist dies für eine Rails-Anwendung oder eine Ruby-Anwendung?

Wirklich mit entweder können Sie möglicherweise Ihre Eigenschaften in einer Yaml-Datei und dann YAML::Load(File.open("file")) es stecken.


Hinweis von Mike Stone: Es wäre eigentlich besser zu tun:

File.open("file") { |yf| YAML::load(yf) } 

oder

YAML.load_file("file") 

wie das Ruby-docs vorschlagen, sonst wird die Datei nicht Geschlossen bis zur Müllabfuhr, aber guter Vorschlag egal :-)

+0

Ich bearbeitet inline als Kommentare wahrscheinlich nicht bemerkt werden würde ... –

+0

Ja, das ist ein Problem mit SO die Kommentare scheinen so ... unsichtbar. Ich dachte nicht daran, es in einem Block zu machen, brilliant! –

2

Statt Wenn Sie den .properties-Stil der Konfigurationsdatei verwenden, sollten Sie YAML verwenden. YAML wird in Ruby on Rails für die Datenbankkonfiguration verwendet und hat in anderen Sprachen (Python, Java, Perl und anderen) an Popularität gewonnen.

Eine Übersicht über das Modul Rubin YAML ist hier: http://www.ruby-doc.org/core/classes/YAML.html

Und die Homepage von YAML ist hier: http://yaml.org

3

Devender Gollapally ein class schrieb das zu tun genau:

... obwohl ich empfehlen würde, eine YAML-Datei zu verwenden.

6

YAML wird es perfekt tun, wie oben beschrieben. Ein Beispiel in einem meiner Ruby-Skripte habe ich eine YAML-Datei wie:

migration: 
    customer: Example Customer 
    test:  false 
sources: 
- name:  Use the Source 
    engine: Foo 
- name:  Sourcey 
    engine: Bar 

, die ich dann in Ruby-Verwendung:

config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0])) 
puts config['migration']['customer'] 

config['sources'].each do |source| 
    puts source['name'] 
end 
9

Eine andere Möglichkeit ist, einfach eine andere Ruby-Datei zu verwenden, wie Ihre Konfigurationsdatei.

Beispiel, eine Datei

{ 
    :blah => 'blee', 
    :foo => 'bar', 
    :items => ['item1', 'item2'], 
    :stuff => true 
} 

'Optionen' genannt erstellen und dann in Ihrem Ruby-Code, wie etwas zu tun:

ops = eval(File.open('options') {|f| f.read }) 
puts ops[:foo] 
+2

bietet diese Option nicht das Potenzial für Missbrauch? eval wird jeden beliebigen Ruby-Code ausführen, so dass zum Beispiel böse Dinge mit dem Dateisystem gemacht werden könnten. – Straff

+2

Missbrauch Wenn Sie Code von einer nicht vertrauenswürdigen Quelle wie einem Webformular auswerten, ist diese Antwort eine Frage zum Lesen einer Optionsdatei. Wenn jemand damit basteln wollte, wäre er auch in der Lage, mit dem Ruby-Code zu basteln, der ihn liest ... –

+0

+1: Ich mag dein Out-of-the-Box-Denken. –

3

inifile-http://rubydoc.info/gems/inifile/2.0.2/frames Grund .properties Dateien auch unterstützen und .ini-Dateien mit [SEKTIONEN] z.

[SECTION] 
key=value 

YAML ist gut, wenn Sie Ihre Daten komplexe Struktur aufweist, jedoch mit Leerzeichen, Tabulatoren, Zeilenende usw. knifflig sein -, die Probleme verursachen können, wenn die Dateien nicht von Programmierern gepflegt. Im Gegensatz dazu sind .properties und .ini Dateien fehlerverzeihender und können geeignet sein, wenn Sie die durch YAML verfügbare Tiefenstruktur nicht benötigen.