* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Predis\Command; /** * Base class for Redis commands. * * @author Daniele Alessandri */ abstract class AbstractCommand implements CommandInterface { private $hash; private $arguments = array(); /** * Returns a filtered array of the arguments. * * @param array $arguments List of arguments. * @return array */ protected function filterArguments(Array $arguments) { return $arguments; } /** * {@inheritdoc} */ public function setArguments(Array $arguments) { $this->arguments = $this->filterArguments($arguments); unset($this->hash); } /** * {@inheritdoc} */ public function setRawArguments(Array $arguments) { $this->arguments = $arguments; unset($this->hash); } /** * {@inheritdoc} */ public function getArguments() { return $this->arguments; } /** * {@inheritdoc} */ public function getArgument($index) { if (isset($this->arguments[$index])) { return $this->arguments[$index]; } } /** * {@inheritdoc} */ public function setHash($hash) { $this->hash = $hash; } /** * {@inheritdoc} */ public function getHash() { if (isset($this->hash)) { return $this->hash; } } /** * {@inheritdoc} */ public function parseResponse($data) { return $data; } /** * Helper function used to reduce a list of arguments to a string. * * @param string $accumulator Temporary string. * @param string $argument Current argument. * @return string */ protected function toStringArgumentReducer($accumulator, $argument) { if (strlen($argument) > 32) { $argument = substr($argument, 0, 32) . '[...]'; } $accumulator .= " $argument"; return $accumulator; } /** * Returns a partial string representation of the command with its arguments. * * @return string */ public function __toString() { return array_reduce( $this->getArguments(), array($this, 'toStringArgumentReducer'), $this->getId() ); } /** * Normalizes the arguments array passed to a Redis command. * * @param array $arguments Arguments for a command. * @return array */ public static function normalizeArguments(Array $arguments) { if (count($arguments) === 1 && is_array($arguments[0])) { return $arguments[0]; } return $arguments; } /** * Normalizes the arguments array passed to a variadic Redis command. * * @param array $arguments Arguments for a command. * @return array */ public static function normalizeVariadic(Array $arguments) { if (count($arguments) === 2 && is_array($arguments[1])) { return array_merge(array($arguments[0]), $arguments[1]); } return $arguments; } }