| Class | Amazon::Config |
| In: |
lib/amazon.rb
|
| Parent: | Hash |
A Class for dealing with configuration files, such as /etc/amazonrc and ~/.amazonrc.
A configuration may be passed in as a string. Otherwise, the files /etc/amazonrc and ~/.amazonrc are read if they exist and are readable.
# File lib/amazon.rb, line 65 def initialize(config_str=nil) if config_str # We have been passed a config file as a string. # config_files = [ config_str ] config_class = StringIO else # Perform the usual search for the system and user config files. # config_files = [ File.join( '', 'etc', 'amazonrc' ) ] # Figure out where home is. The locations after HOME are for Windows. # [ruby-core:12347] # home = ENV['AMAZONRCDIR'] || ENV['HOME'] || ENV['HOMEDRIVE'] + ENV['HOMEPATH'] || ENV['USERPROFILE'] user_rcfile = ENV['AMAZONRCFILE'] || '.amazonrc' if home config_files << File.expand_path( File.join( home, user_rcfile ) ) end config_class = File end config_files.each do |cf| if config_class == StringIO readable = true else # We must determine whether the file is readable. # readable = File.exists?( cf ) && File.readable?( cf ) end if readable Amazon.dprintf( 'Opening %s ...', cf ) if config_class == File config_class.open( cf ) { |f| lines = f.readlines }.each do |line| line.chomp! # Skip comments and blank lines. # next if line =~ /^(#|$)/ Amazon.dprintf( 'Read: %s', line ) # Store these, because we'll probably find a use for these later. # begin match = line.match( /^\s*(\S+)\s*=\s*(['"]?)([^'"]+)(['"]?)/ ) key, begin_quote, val, end_quote = match[1, 4] raise ConfigError if begin_quote != end_quote rescue NoMethodError, ConfigError raise ConfigError, "bad config line: #{line}" end self[key] = val end end end end