Browse Source

Introduced the new ConnectionParameters class

Daniele Alessandri 15 years ago
parent
commit
7509f98894
1 changed files with 62 additions and 52 deletions
  1. 62 52
      lib/Predis.php

+ 62 - 52
lib/Predis.php

@@ -17,7 +17,8 @@ class Client {
 
     public function __construct($host = Connection::DEFAULT_HOST, $port = Connection::DEFAULT_PORT) {
         $this->_pipelining = false;
-        $this->_connection = new Connection($host, $port);
+        $connectionParams  = new ConnectionParameters(array('host' => $host, 'port' => $port));
+        $this->_connection = new Connection($connectionParams);
         $this->_registeredCommands = self::initializeDefaultCommands();
     }
 
@@ -45,59 +46,18 @@ class Client {
         return $client;
     }
 
-    private static function parseURI($uri) {
-        $parsed = @parse_url($uri);
-
-        if ($parsed == false || $parsed['scheme'] != 'redis' || $parsed['host'] == null) {
-            throw new ClientException("Invalid URI: $uri");
-        }
-
-        $details = array();
-        foreach (explode('&', $parsed['query']) as $kv) {
-            list($k, $v) = explode('=', $kv);
-            switch ($k) {
-                case 'database':
-                    $details['database'] = $v;
-                    break;
-                case 'password':
-                    $details['password'] = $v;
-                    break;
-            }
-        }
-
-        return self::filterConnectionParams(array_merge($parsed, $details));
-    }
-
-    private static function filterConnectionParams($parameters) {
-        return array(
-            'host' => $parameters['host'] != null 
-                ? $parameters['host'] 
-                : Connection::DEFAULT_HOST, 
-            'port' => $parameters['port'] != null 
-                ? (int) $parameters['port'] 
-                : Connection::DEFAULT_PORT, 
-            'database' => $parameters['database'], 
-            'password' => $parameters['password'], 
-        );
-    }
+    private function createConnection($parameters) {
+        $params     = new ConnectionParameters($parameters);
+        $connection = new Connection($params);
 
-    private function createConnection($connectionDetails) {
-        $parameters = is_array($connectionDetails) 
-            ? self::filterConnectionParams($connectionDetails) 
-            : self::parseURI($connectionDetails);
-
-        $connection = new Connection($parameters['host'], $parameters['port']);
-
-        if ($parameters['password'] !== null) {
+        if ($params->password !== null) {
             $connection->pushInitCommand($this->createCommandInstance(
-                'auth', 
-                array($parameters['password'])
+                'auth', array($params->password)
             ));
         }
-        if ($parameters['database'] !== null) {
+        if ($params->database !== null) {
             $connection->pushInitCommand($this->createCommandInstance(
-                'select', 
-                array($parameters['database'])
+                'select', array($params->database)
             ));
         }
 
@@ -584,6 +544,56 @@ class CommandPipeline {
 
 /* ------------------------------------------------------------------------- */
 
+class ConnectionParameters {
+    private $_parameters;
+
+    public function __construct($parameters) {
+        $this->_parameters = is_array($parameters) 
+            ? self::filterConnectionParams($parameters) 
+            : self::parseURI($parameters);
+    }
+
+    private static function parseURI($uri) {
+        $parsed = @parse_url($uri);
+
+        if ($parsed == false || $parsed['scheme'] != 'redis' || $parsed['host'] == null) {
+            throw new ClientException("Invalid URI: $uri");
+        }
+
+        $details = array();
+        foreach (explode('&', $parsed['query']) as $kv) {
+            list($k, $v) = explode('=', $kv);
+            switch ($k) {
+                case 'database':
+                    $details['database'] = $v;
+                    break;
+                case 'password':
+                    $details['password'] = $v;
+                    break;
+            }
+        }
+
+        return self::filterConnectionParams(array_merge($parsed, $details));
+    }
+
+    private static function filterConnectionParams($parameters) {
+        return array(
+            'host' => $parameters['host'] != null 
+                ? $parameters['host'] 
+                : Connection::DEFAULT_HOST, 
+            'port' => $parameters['port'] != null 
+                ? (int) $parameters['port'] 
+                : Connection::DEFAULT_PORT, 
+            'database' => $parameters['database'], 
+            'password' => $parameters['password'], 
+        );
+    }
+
+    public function __get($parameter) {
+        return $this->_parameters[$parameter];
+    }
+}
+
 interface IConnection {
     public function connect();
     public function disconnect();
@@ -600,9 +610,9 @@ class Connection implements IConnection {
 
     private $_host, $_port, $_socket;
 
-    public function __construct($host = self::DEFAULT_HOST, $port = self::DEFAULT_PORT) {
-        $this->_host = $host;
-        $this->_port = $port;
+    public function __construct(ConnectionParameters $parameters) {
+        $this->_host = $parameters->host;
+        $this->_port = $parameters->port;
         $this->_initCmds = array();
     }