Explorar o código

Accept the 'scheme' argument for Predis\ConnectionParameters. The 'redis' scheme is now an alias of 'tcp' for compatibility with older versions of Predis.

Daniele Alessandri %!s(int64=15) %!d(string=hai) anos
pai
achega
a2c9cb38a5
Modificáronse 1 ficheiros con 16 adicións e 2 borrados
  1. 16 2
      lib/Predis.php

+ 16 - 2
lib/Predis.php

@@ -986,6 +986,7 @@ class PubSubContext implements \Iterator {
 /* ------------------------------------------------------------------------- */
 
 class ConnectionParameters {
+    const DEFAULT_SCHEME = 'tcp';
     const DEFAULT_HOST = '127.0.0.1';
     const DEFAULT_PORT = 6379;
     const DEFAULT_TIMEOUT = 5;
@@ -1001,7 +1002,7 @@ class ConnectionParameters {
     private static function parseURI($uri) {
         $parsed = @parse_url($uri);
 
-        if ($parsed == false || $parsed['scheme'] != 'redis' || $parsed['host'] == null) {
+        if ($parsed == false || $parsed['host'] == null) {
             throw new ClientException("Invalid URI: $uri");
         }
 
@@ -1047,7 +1048,13 @@ class ConnectionParameters {
     }
 
     private static function filterConnectionParams($parameters) {
+        // for compatibility with older versions of Predis
+        if (isset($parameters['scheme']) && $parameters['scheme'] === 'redis') {
+            $parameters['scheme'] = 'tcp';
+        }
+
         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'), 
@@ -1087,7 +1094,7 @@ class TcpConnection implements IConnectionSingle {
     private $_params, $_socket, $_initCmds, $_reader;
 
     public function __construct(ConnectionParameters $parameters, ResponseReader $reader = null) {
-        $this->_params   = $parameters;
+        $this->_params   = $this->checkParameters($parameters);
         $this->_initCmds = array();
         $this->_reader   = $reader ?: new ResponseReader();
     }
@@ -1098,6 +1105,13 @@ class TcpConnection implements IConnectionSingle {
         }
     }
 
+    private function checkParameters(ConnectionParameters $parameters) {
+        if ($parameters->scheme != 'tcp') {
+            throw new \InvalidArgumentException("Invalid scheme: {$parameters->scheme}");
+        }
+        return $parameters;
+    }
+
     public function isConnected() {
         return is_resource($this->_socket);
     }