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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top