Browse Source

Replace awful code with a nicer, compact and faster solution.

Daniele Alessandri 14 years ago
parent
commit
736a102aba
1 changed files with 22 additions and 55 deletions
  1. 22 55
      lib/Predis.php

+ 22 - 55
lib/Predis.php

@@ -1343,6 +1343,22 @@ class ConnectionParameters {
     const DEFAULT_HOST = '127.0.0.1';
     const DEFAULT_PORT = 6379;
     const DEFAULT_TIMEOUT = 5;
+
+    private static $_standardParameters = array(
+        'scheme' => self::DEFAULT_SCHEME,
+        'host' => self::DEFAULT_HOST,
+        'port' => self::DEFAULT_PORT,
+        'database' => null,
+        'password' => null,
+        'connection_async' => false,
+        'connection_persistent' => false,
+        'connection_timeout' => self::DEFAULT_TIMEOUT,
+        'read_write_timeout' => null,
+        'alias' => null,
+        'weight' => null,
+        'path' => null,
+    );
+
     private $_parameters;
 
     public function __construct($parameters = null) {
@@ -1357,70 +1373,21 @@ class ConnectionParameters {
             // Hack to support URIs for UNIX sockets with minimal effort.
             $uri = str_ireplace('unix:///', 'unix://localhost/', $uri);
         }
-        $parsed = @parse_url($uri);
-        if ($parsed == false) {
+        if (($parsed = @parse_url($uri)) === false) {
             throw new ClientException("Invalid URI: $uri");
         }
-
-        if (array_key_exists('query', $parsed)) {
-            $details = array();
+        if (isset($parsed['query'])) {
             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;
-                    case 'connection_async':
-                        $details['connection_async'] = $v;
-                        break;
-                    case 'connection_persistent':
-                        $details['connection_persistent'] = $v;
-                        break;
-                    case 'connection_timeout':
-                        $details['connection_timeout'] = $v;
-                        break;
-                    case 'read_write_timeout':
-                        $details['read_write_timeout'] = $v;
-                        break;
-                    case 'alias':
-                        $details['alias'] = $v;
-                        break;
-                    case 'weight':
-                        $details['weight'] = $v;
-                        break;
-                    case 'path':
-                        $details['path'] = $v;
-                        break;
-                }
+                @list($k, $v) = explode('=', $kv);
+                $parsed[$k] = $v;
             }
-            $parsed = array_merge($parsed, $details);
+            unset($parsed['query']);
         }
-
         return self::filterConnectionParams($parsed);
     }
 
-    private static function getParamOrDefault(Array $parameters, $param, $default = null) {
-        return array_key_exists($param, $parameters) ? $parameters[$param] : $default;
-    }
-
     private static function filterConnectionParams($parameters) {
-        return array(
-            'scheme' => self::getParamOrDefault($parameters, 'scheme', self::DEFAULT_SCHEME),
-            'host' => self::getParamOrDefault($parameters, 'host', self::DEFAULT_HOST),
-            'port' => (int) self::getParamOrDefault($parameters, 'port', self::DEFAULT_PORT),
-            'database' => self::getParamOrDefault($parameters, 'database'),
-            'password' => self::getParamOrDefault($parameters, 'password'),
-            'connection_async'   => self::getParamOrDefault($parameters, 'connection_async', false),
-            'connection_persistent' => self::getParamOrDefault($parameters, 'connection_persistent', false),
-            'connection_timeout' => self::getParamOrDefault($parameters, 'connection_timeout', self::DEFAULT_TIMEOUT),
-            'read_write_timeout' => self::getParamOrDefault($parameters, 'read_write_timeout'),
-            'alias'  => self::getParamOrDefault($parameters, 'alias'),
-            'weight' => self::getParamOrDefault($parameters, 'weight'),
-            'path' => self::getParamOrDefault($parameters, 'path'),
-        );
+        return array_merge(self::$_standardParameters, $parameters);
     }
 
     public function __get($parameter) {