Class: Amazon::Config
- Inherits:
-
Hash
- Object
- Hash
- Amazon::Config
- Defined in:
- lib/amazon.rb
Overview
A Class for dealing with configuration files, such as /etc/amazonrc
and ~/.amazonrc
.
Defined Under Namespace
Classes: ConfigError
Instance Method Summary collapse
-
#initialize(config_str = nil) ⇒ Config
constructor
A configuration may be passed in as a string.
Constructor Details
#initialize(config_str = nil) ⇒ Config
A configuration may be passed in as a string. Otherwise, the files /etc/amazonrc
and ~/.amazonrc
are read if they exist and are readable.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# 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'] if home config_files << File.( File.join( '~', '.amazonrc' ) ) 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 |