2010-10-11 8 views

Respuesta

62

La forma más común para almacenar los datos de configuración en Ruby es usar YAML:

settings.yml

user1: 
    path:/
    days: 5 

user2: 
    path: /tmp/ 
    days: 3 

luego cargarla en su código como este:

require 'yaml' 
settings = YAML::load_file "settings.yml" 
puts settings.inspect 

Usted puede crear el archivo YAML usando to_yaml:

File.open("settings.yml", "w") do |file| 
    file.write settings.to_yaml 
end 

Dicho esto, se puede incluir código Ruby recta también, usando load:

load "settings.rb" 

Sin embargo, no se puede acceder a las variables locales fuera del archivo, por lo que tendría que cambiar su código de utilizar una variable de instancia o una variable global:

settings.rb

SETTINGS = { 
'user1' => { 'path' => '/','days' => '5' }, 
'user2' => { 'path' => '/tmp/','days' => '3' } 
} 
@settings = { 'foo' => 1, 'bar' => 2 } 

A continuación, cargue así:

load "settings.rb" 
puts SETTINGS.inspect 
puts @settings.inspect 
+0

Buena respuesta, pero se está olvidando 'eval' – glebm

+1

@glebm: Sí, y a propósito. Yo uso 'eval' cuando es la única opción disponible, de lo contrario. –

+2

cierto, pero para que el lector conozca a su enemigo, lo mencionaría :) – glebm

6

también se puede utilizar Marshal

settings = { 
    'user1' => { 'path' => '/','days' => '5' }, 
    'user2' => { 'path' => '/tmp/','days' => '3' } 
} 
data=Marshal.dump(settings) 
open('output', 'wb') { |f| f.puts data } 
data=File.read("output") 
p Marshal.load(data) 
2

Una muy simple es utilizar eval.

config.txt

{ 
    'user1' => { 'path' => '/','days' => '5' }, 
    'user2' => { 'path' => '/tmp/','days' => '3' } 
} 

program.rb

configuration = eval(File.read("./config.txt")) 
puts configuration['user1'] 
Cuestiones relacionadas