]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - lib/common/configuration.rb
mailshears.gemspec: bump version to 0.1.0
[mailshears.git] / lib / common / configuration.rb
index 43ef03b3e726f5fd694b44c6bac1a4416a0e5d52..78f5c04f9b57937f13fa523ce2a755eaa59aeedf 100644 (file)
@@ -1,17 +1,44 @@
 require 'yaml'
 
+# A configuration object that knows how to read options out of a file
+# in <tt>$XDG_CONFIG_HOME/mailshears/mailshears.conf.yml</tt>. 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,55 +55,55 @@ 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['davical_dbhost'] = 'localhost'
+    d['davical_dbport'] = 5432
+    d['davical_dbopts'] = ''
+    d['davical_dbuser'] = 'postgres'
+    d['davical_dbpass'] = ''
+    d['davical_dbname'] = 'davical'
+
+    d['dovecot_mail_root'] = '/tmp/mailshears-test'
 
     d['postfixadmin_dbhost'] = 'localhost'
     d['postfixadmin_dbport'] = 5432
     d['postfixadmin_dbopts'] = ''
-    d['postfixadmin_dbtty'] = ''
     d['postfixadmin_dbuser'] = 'postgres'
     d['postfixadmin_dbpass'] = ''
     d['postfixadmin_dbname'] = 'postfixadmin'
 
-    d['plugins'] = ['postfixadmin', 'dovecot', 'roundcube']
-
-    d['mail_root'] = '/var/spool/mail/vhosts'
-
     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'
 
-    d['agendav_dbhost'] = 'localhost'
-    d['agendav_dbport'] = 5432
-    d['agendav_dbopts'] = ''
-    d['agendav_dbtty'] = ''
-    d['agendav_dbuser'] = 'postgres'
-    d['agendav_dbpass'] = ''
-    d['agendav_dbname'] = 'agendav'
-
-    d['davical_dbhost'] = 'localhost'
-    d['davical_dbport'] = 5432
-    d['davical_dbopts'] = ''
-    d['davical_dbtty'] = ''
-    d['davical_dbuser'] = 'postgres'
-    d['davical_dbpass'] = ''
-    d['davical_dbname'] = 'davical'
-
     return d
   end