From 45b97e2d5d36d03f6eeed5319a98b8c871930591 Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Thu, 16 Sep 2010 23:09:27 +0100 Subject: [PATCH] Adds datatype support to the Config class The config class now supports a type column in the database which specifies how the value should be interpreted. The class defines a number of scalar types, which are returned without transformation. A string list type is also defined, which splits the value into an array based on newlines. Also added phpdoc comments to all class constants, members and methods. --- lib/RippingCluster/Config.class.php | 95 ++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 3 deletions(-) diff --git a/lib/RippingCluster/Config.class.php b/lib/RippingCluster/Config.class.php index 054b86b..88d6064 100644 --- a/lib/RippingCluster/Config.class.php +++ b/lib/RippingCluster/Config.class.php @@ -1,23 +1,86 @@ string) + */ private $databaseConfig = array(); + + /** + * Associative array of settings loaded from the database + * @var array(string=>array(string=>string)) + */ private $settings = array(); + /** + * Constructs a new instance of the Config class + * + * @param string $dbconfig Database configuration file contents + * @return RippingCluster_Config + */ public function __construct($dbconfig) { $this->dbconfig = $dbconfig; $this->parseDatabaseConfig(); } + /** + * Parses the contents of the database configuration file so that individual settings can be retrieved. + * + */ public function parseDatabaseConfig() { $this->databaseConfig = parse_ini_file($this->dbconfig); } + /** + * Returns the value of the named item from the database configuration file + * + * @param string $key Name of the setting to retrieve + */ public function getDatabase($key) { if (!isset($this->databaseConfig[$key])) { throw new RippingCluster_Exception_DatabaseConfigMissing($key); @@ -26,29 +89,55 @@ class RippingCluster_Config { return $this->databaseConfig[$key]; } + /** + * Sets the database instance used by this object + * + * @param RippingCluster_Database $database Database instance + */ public function setDatabase(RippingCluster_Database $database) { $this->database = $database; $this->preload(); } - public function preload() { + /** + * Loads the entire list of settings from the database + * + */ + private function preload() { if (!$this->database) { throw new RippingCluster_Exception_NoDatabaseConnection(); } - $this->settings = $this->database->selectAssoc('SELECT name,value FROM settings', 'name', 'value'); + $this->settings = $this->database->selectAssoc('SELECT name,type,value FROM settings', 'name', array('name', 'value', 'type')); } + /** + * Identifies whether the named setting exists + * + * @param string $key Name of the setting + * @return bool + */ public function exists($key) { return isset($this->settings[$key]); } + /** + * Fetches the value of the named setting + * + * @param string $key Name of the setting + */ public function get($key) { if (!isset($this->settings[$key])) { throw new RippingCluster_Exception_UnknownSetting($key); } - return $this->settings[$key]; + switch ($this->settings[$key]['type']) { + case TYPE_STRING_LIST: + return explode("\n", $this->settings[$key]['value']); + + default: + return $this->settings[$key]['value']; + } } };