File Java .properties equivalente per Ruby?
Domanda
Devo memorizzare alcune semplici proprietà in un file e accedervi da Ruby.
Adoro il formato file .properties che è lo standard per queste cose in Java (usando la classe java.util.Properties)...è semplice, facile da usare e facile da leggere.
Quindi, esiste una classe Ruby da qualche parte che mi permetta di caricare alcune coppie chiave-valore da un file del genere senza troppi sforzi?
Non voglio usare XML, quindi per favore non suggerire REXML (il mio scopo non garantisce la "tassa sulle parentesi angolari").
Ho preso in considerazione l'idea di lanciare la mia soluzione...probabilmente sarebbero circa 5-10 righe di codice al massimo, ma preferirei comunque utilizzare una libreria esistente (se si tratta essenzialmente di un hash creato da un file)...poiché ciò lo ridurrebbe a 1 riga....
AGGIORNAMENTO:In realtà è una semplice app Ruby, non Rails, ma penso che YAML andrà bene (era nella mia mente, ma me ne ero dimenticato...visto ma ancora mai usato), grazie a tutti!
Soluzione
È per un'applicazione Rails o Ruby?
In realtà con entrambi potresti essere in grado di inserire le tue proprietà in un file yaml e poi YAML::Load(File.open("file"))
Esso.
NOTA di Mike Stone: In realtà sarebbe meglio fare:
File.open("file") { |yf| YAML::load(yf) }
O
YAML.load_file("file")
come suggeriscono i documenti di Ruby, altrimenti il file non verrà chiuso fino alla garbage collection, ma buon suggerimento a prescindere :-)
Altri suggerimenti
Un'altra opzione è semplicemente utilizzare un altro file Ruby come file di configurazione.
Ad esempio, crea un file chiamato "opzioni"
{
:blah => 'blee',
:foo => 'bar',
:items => ['item1', 'item2'],
:stuff => true
}
E poi nel tuo codice Ruby fai qualcosa del tipo:
ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
YAML lo farà perfettamente come descritto sopra.Ad esempio, in uno dei miei script Ruby ho un file YAML come:
migration:
customer: Example Customer
test: false
sources:
- name: Use the Source
engine: Foo
- name: Sourcey
engine: Bar
che poi utilizzo in Ruby come:
config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
puts config['migration']['customer']
config['sources'].each do |source|
puts source['name']
end
inifile - http://rubydoc.info/gems/inifile/2.0.2/frames supporterà i file .properties di base e anche i file .ini con [SEZIONI] ad es.
[SECTION]
key=value
YAML è utile quando i tuoi dati hanno una struttura complessa ma possono essere complicati con spazi, tabulazioni, fine riga ecc., il che potrebbe causare problemi se i file non vengono gestiti dai programmatori.Al contrario .properties
E .ini
i file sono più indulgenti e potrebbero essere adatti se non hai bisogno della struttura profonda disponibile tramite YAML.
Devender Gollapally ha scritto a classe per fare esattamente questo:
...anche se consiglierei di utilizzare un file YAML.
Invece dello stile .properties del file di configurazione, potresti prendere in considerazione l'utilizzo di YAML.YAML utilizzato in Ruby on Rails per la configurazione del database e ha guadagnato popolarità in altri linguaggi (Python, Java, Perl e altri).
Una panoramica del modulo Ruby YAML è qui: http://www.ruby-doc.org/core/classes/YAML.html
E la home page di YAML è qui: http://yaml.org