2008-09-19 15 views
24

Necesito almacenar algunas propiedades simples en un archivo y acceder a ellas desde Ruby.¿Archivo Java .properties equivalente para Ruby?

Me encanta el formato de archivo .properties que es el estándar para tales cosas en Java (usando la clase java.util.Properties) ... es simple, fácil de usar y fácil de leer.

Entonces, ¿hay alguna clase de Ruby en alguna parte que me permita cargar algunos pares de valores clave de un archivo así sin mucho esfuerzo?

No quiero usar XML, así que no sugiera REXML (mi propósito no garantiza el "impuesto de escuadras").

He considerado rodar mi propia solución ... probablemente serían alrededor de 5-10 líneas de código máximo, pero preferiría usar una biblioteca existente (si es esencialmente un hash creado a partir de un archivo) ... . ya que así se lo reduce a 1 línea ....


ACTUALIZACIÓN: en realidad es una aplicación de Rubí recta, no raíles, pero creo que va a hacer muy bien YAML (que estaba en el fondo de mi mente, pero lo había olvidado ... lo había visto pero nunca lo había usado hasta ahora), ¡gracias a todos!

Respuesta

26

¿Es esto para una aplicación Rails o una Ruby one?

Realmente, con cualquiera de los dos, usted puede colocar sus propiedades en un archivo yaml y luego YAML::Load(File.open("file")).


NOTA de Mike Stone: En realidad, sería mejor que hacer:

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

o

YAML.load_file("file") 

como los documentos sugieren rubí, de lo contrario el archivo no será cerrado hasta la recolección de basura, pero buena sugerencia independientemente :-)

+0

He editado en línea como probablemente no se notarán los comentarios ... –

+0

Sí, eso es un problema con SO los comentarios parecen tan ... invisibles. No pensé en hacerlo en bloque, ¡genial! –

2

En cambio del estilo .properties del archivo de configuración, puede considerar usar YAML. YAML se usó en Ruby on Rails para la configuración de la base de datos, y ha ganado popularidad en otros idiomas (Python, Java, Perl y otros).

Una visión general del módulo de Rubí YAML está aquí: http://www.ruby-doc.org/core/classes/YAML.html

Y la página de inicio de YAML está aquí: http://yaml.org

3

Devender Gollapally escribió un class de hacer precisamente eso:

... aunque recomendaría mejor usar un archivo YAML.

6

YAML lo hará perfectamente como se describe arriba. Por ejemplo, en una de mis scripts de Ruby Tengo un archivo YAML como:

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

que luego utilizo dentro de Rubí como:

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

Otra opción es utilizar simplemente otro archivo de Ruby como su archivo de configuración.

ejemplo, cree un archivo llamado 'opciones'

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

Y luego en su código Ruby hacer algo como:

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

¿esta opción no brinda potencial para el abuso? eval ejecutará cualquier código de Ruby arbitrario de modo que, por ejemplo, se puedan hacer cosas desagradables al sistema de archivos. – Straff

+2

Abuso Si está evaluando código de una fuente que no es de confianza, como un formulario web, esta respuesta es para una pregunta relacionada con la lectura de un archivo de opciones. Si alguien quisiera jugar con eso, también estaría en condiciones de jugar con el código de rubí leyéndolo ... –

+0

+1: Me gusta tu forma de pensar fuera de la caja. –

3

archivoini-http://rubydoc.info/gems/inifile/2.0.2/frames apoyará archivos .properties básicos y también Archivos .ini con [SECCIONES] ej.

[SECTION] 
key=value 

YAML es bueno cuando los datos tienen estructura compleja, pero puede ser más incómoda con espacios, tabulaciones final de las líneas, etc - lo que podría causar problemas si los archivos no son mantenidos por los programadores. Por el contrario, los archivos .properties y .ini son más indulgentes y pueden ser adecuados si no necesita la estructura profunda disponible a través de YAML.

Cuestiones relacionadas