X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=lib%2Fcommon%2Fconfiguration.rb;h=78f5c04f9b57937f13fa523ce2a755eaa59aeedf;hb=HEAD;hp=f9a07bf1f7c81df2b5166991cb9d20dcfb7c2131;hpb=c6cab6b71770d14dad1115db90a00b990c44a58d;p=mailshears.git diff --git a/lib/common/configuration.rb b/lib/common/configuration.rb index f9a07bf..78f5c04 100644 --- a/lib/common/configuration.rb +++ b/lib/common/configuration.rb @@ -1,17 +1,44 @@ require 'yaml' +# A configuration object that knows how to read options out of a file +# in $XDG_CONFIG_HOME/mailshears/mailshears.conf.yml. The +# configuration options can be accessed via methods even though the +# internal representation is a hash. +# +# === Examples +# +# >> cfg = Configuration.new() +# >> cfg.i_mean_business() +# => true +# class Configuration - USERCONF_PATH = ENV['HOME'] + '/.mailshears.conf.yml' + # The hash structure in which we store our configuration options + # internally. @dict = {} - def initialize() + # Initialize a {Configuration} object with the config file at *path*. + # + # @param path [String] the path to the configuration file to + # load. We check for a file named "mailshears.conf.yml" in the + # user's XDG configuration directory by default. + # + def initialize(path = nil) + if path.nil? then + # The default path to the user's configuration file. + path = ENV['HOME'] + '/.config' + if ENV.has_key?('XDG_CONFIG_HOME') then + path = ENV['XDG_CONFIG_HOME'] + end + path += '/mailshears/mailshears.conf.yml' + end + cfg = default_configuration() # Now, load the user configuration which will override the # variables defined above. begin - user_config = YAML.load(File.open(USERCONF_PATH)) + user_config = YAML.load(File.open(path)) # Write our own update() method for Ruby 1.8. user_config.each do |key, value| @@ -28,35 +55,51 @@ class Configuration end + # Replace all missing method calls with hash lookups. This lets us + # retrieve the values in our option hash by using methods named + # after the associated keys. + # + # @param sym [Symbol] the method that was called. + # + # @return [Object] the config file value associated with *sym*. + # def method_missing(sym, *args) - # Replace all missing method calls with dictionary lookups. return @dict[sym] end private; + + # A default config hash. + # + # @return [Hash] sensible default configuration values. + # def default_configuration() d = {} d['i_mean_business'] = false + d['plugins'] = ['postfixadmin'] - d['dbhost'] = 'localhost' - d['dbport'] = 5432 - d['dbopts'] = '' - d['dbtty'] = '' - d['dbuser'] = 'postgres' - d['dbpass'] = '' - d['dbname'] = 'postfix' + d['davical_dbhost'] = 'localhost' + d['davical_dbport'] = 5432 + d['davical_dbopts'] = '' + d['davical_dbuser'] = 'postgres' + d['davical_dbpass'] = '' + d['davical_dbname'] = 'davical' - d['plugins'] = ['dovecot_mailstore', 'roundcube_db'] + d['dovecot_mail_root'] = '/tmp/mailshears-test' - d['mail_root'] = '/var/spool/mail/vhosts' + d['postfixadmin_dbhost'] = 'localhost' + d['postfixadmin_dbport'] = 5432 + d['postfixadmin_dbopts'] = '' + d['postfixadmin_dbuser'] = 'postgres' + d['postfixadmin_dbpass'] = '' + d['postfixadmin_dbname'] = 'postfixadmin' d['roundcube_dbhost'] = 'localhost' d['roundcube_dbport'] = 5432 d['roundcube_dbopts'] = '' - d['roundcube_dbtty'] = '' d['roundcube_dbuser'] = 'postgres' d['roundcube_dbpass'] = '' d['roundcube_dbname'] = 'roundcube'