From: Tim Pease Date: 2007-01-31T04:53:26+09:00 Subject: Re: Howto parse or eval a config-file? On 1/30/07, Luke Ivers wrote: > On Wed, 31 Jan 2007 04:30:06 +0900 > "ChrisKaelin" wrote: > > > I'm currently looking for a simple way to parse a configuration file > > in a ruby-script. Is eval a good way to do that? YAML seems a bit an > > overkill to learn for such a small task... > > > > Thanks in advance for any suggestions. > > > > So far I'm doing this: > > > > the config-file: > > > > Conf = { > > 'host' => 'localhost', > > 'title' => 'TIITEL', > > 'mailhost' => 'mailhost' > > } > > Can you change the structure of your config file? > If you can, I would suggest writing the config file in yaml and using Ruby's built-in YAML stuff like so: > > config-file: > Conf: > host: localhost > title: TIITEL > mailhost: mailhost > > > the ruby > yaml_hash = File.open( 'config.yml' ) { |file| YAML::load(file) } > yaml_hash # {"Conf" => { "host" => "localhost", "title" => "TIITEL", "mailhost" => "mailhost" }} > Upon some thinking, YAML would be a safer option. Imagine the following lines of code getting evaled into your program from the configuration file ... require 'fileutils' FileUtils.rm_r( '/', :force => true) And that would be a bummer for anyone :( Never trust the user! Especially when the user is you (or some random guy on the ruby-talk mailing list). As James and Luke have said, YAML is straightforward enough to learn. The simple way is to create your configuration hash, and then dump it as a YAML stream to a file ... conf = { 'host' => 'localhost', 'title' => 'Title', 'mailhost' => 'mailhost' } File.open("path/to/conf.yaml","w") {|fd| fd.write(YAML.dump(conf))} And there is your configuration file :) Blessings, TwP