added compser vendors for mailgun librarie
This commit is contained in:
		
							
								
								
									
										1
									
								
								sites/all/libraries/mailgun/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								sites/all/libraries/mailgun/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
			
		||||
.DS_Store
 | 
			
		||||
vendor
 | 
			
		||||
composer.phar
 | 
			
		||||
smoketest.php
 | 
			
		||||
rackspace_logo.jpg
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								sites/all/libraries/mailgun/vendor/autoload.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								sites/all/libraries/mailgun/vendor/autoload.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
require_once __DIR__ . '/composer' . '/autoload_real.php';
 | 
			
		||||
 | 
			
		||||
return ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5::getLoader();
 | 
			
		||||
							
								
								
									
										1
									
								
								sites/all/libraries/mailgun/vendor/bin/phpunit
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								sites/all/libraries/mailgun/vendor/bin/phpunit
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
../phpunit/phpunit/composer/bin/phpunit
 | 
			
		||||
							
								
								
									
										413
									
								
								sites/all/libraries/mailgun/vendor/composer/ClassLoader.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										413
									
								
								sites/all/libraries/mailgun/vendor/composer/ClassLoader.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,413 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Composer.
 | 
			
		||||
 *
 | 
			
		||||
 * (c) Nils Adermann <naderman@naderman.de>
 | 
			
		||||
 *     Jordi Boggiano <j.boggiano@seld.be>
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Composer\Autoload;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 | 
			
		||||
 *
 | 
			
		||||
 *     $loader = new \Composer\Autoload\ClassLoader();
 | 
			
		||||
 *
 | 
			
		||||
 *     // register classes with namespaces
 | 
			
		||||
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 | 
			
		||||
 *     $loader->add('Symfony',           __DIR__.'/framework');
 | 
			
		||||
 *
 | 
			
		||||
 *     // activate the autoloader
 | 
			
		||||
 *     $loader->register();
 | 
			
		||||
 *
 | 
			
		||||
 *     // to enable searching the include path (eg. for PEAR packages)
 | 
			
		||||
 *     $loader->setUseIncludePath(true);
 | 
			
		||||
 *
 | 
			
		||||
 * In this example, if you try to use a class in the Symfony\Component
 | 
			
		||||
 * namespace or one of its children (Symfony\Component\Console for instance),
 | 
			
		||||
 * the autoloader will first look for the class under the component/
 | 
			
		||||
 * directory, and it will then fallback to the framework/ directory if not
 | 
			
		||||
 * found before giving up.
 | 
			
		||||
 *
 | 
			
		||||
 * This class is loosely based on the Symfony UniversalClassLoader.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Fabien Potencier <fabien@symfony.com>
 | 
			
		||||
 * @author Jordi Boggiano <j.boggiano@seld.be>
 | 
			
		||||
 * @see    http://www.php-fig.org/psr/psr-0/
 | 
			
		||||
 * @see    http://www.php-fig.org/psr/psr-4/
 | 
			
		||||
 */
 | 
			
		||||
class ClassLoader
 | 
			
		||||
{
 | 
			
		||||
    // PSR-4
 | 
			
		||||
    private $prefixLengthsPsr4 = array();
 | 
			
		||||
    private $prefixDirsPsr4 = array();
 | 
			
		||||
    private $fallbackDirsPsr4 = array();
 | 
			
		||||
 | 
			
		||||
    // PSR-0
 | 
			
		||||
    private $prefixesPsr0 = array();
 | 
			
		||||
    private $fallbackDirsPsr0 = array();
 | 
			
		||||
 | 
			
		||||
    private $useIncludePath = false;
 | 
			
		||||
    private $classMap = array();
 | 
			
		||||
 | 
			
		||||
    private $classMapAuthoritative = false;
 | 
			
		||||
 | 
			
		||||
    public function getPrefixes()
 | 
			
		||||
    {
 | 
			
		||||
        if (!empty($this->prefixesPsr0)) {
 | 
			
		||||
            return call_user_func_array('array_merge', $this->prefixesPsr0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return array();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getPrefixesPsr4()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->prefixDirsPsr4;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFallbackDirs()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->fallbackDirsPsr0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFallbackDirsPsr4()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->fallbackDirsPsr4;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getClassMap()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->classMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $classMap Class to filename map
 | 
			
		||||
     */
 | 
			
		||||
    public function addClassMap(array $classMap)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->classMap) {
 | 
			
		||||
            $this->classMap = array_merge($this->classMap, $classMap);
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->classMap = $classMap;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-0 directories for a given prefix, either
 | 
			
		||||
     * appending or prepending to the ones previously set for this prefix.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string       $prefix  The prefix
 | 
			
		||||
     * @param array|string $paths   The PSR-0 root directories
 | 
			
		||||
     * @param bool         $prepend Whether to prepend the directories
 | 
			
		||||
     */
 | 
			
		||||
    public function add($prefix, $paths, $prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            if ($prepend) {
 | 
			
		||||
                $this->fallbackDirsPsr0 = array_merge(
 | 
			
		||||
                    (array) $paths,
 | 
			
		||||
                    $this->fallbackDirsPsr0
 | 
			
		||||
                );
 | 
			
		||||
            } else {
 | 
			
		||||
                $this->fallbackDirsPsr0 = array_merge(
 | 
			
		||||
                    $this->fallbackDirsPsr0,
 | 
			
		||||
                    (array) $paths
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $first = $prefix[0];
 | 
			
		||||
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
 | 
			
		||||
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if ($prepend) {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = array_merge(
 | 
			
		||||
                (array) $paths,
 | 
			
		||||
                $this->prefixesPsr0[$first][$prefix]
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->prefixesPsr0[$first][$prefix] = array_merge(
 | 
			
		||||
                $this->prefixesPsr0[$first][$prefix],
 | 
			
		||||
                (array) $paths
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-4 directories for a given namespace, either
 | 
			
		||||
     * appending or prepending to the ones previously set for this namespace.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string       $prefix  The prefix/namespace, with trailing '\\'
 | 
			
		||||
     * @param array|string $paths   The PSR-4 base directories
 | 
			
		||||
     * @param bool         $prepend Whether to prepend the directories
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function addPsr4($prefix, $paths, $prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            // Register directories for the root namespace.
 | 
			
		||||
            if ($prepend) {
 | 
			
		||||
                $this->fallbackDirsPsr4 = array_merge(
 | 
			
		||||
                    (array) $paths,
 | 
			
		||||
                    $this->fallbackDirsPsr4
 | 
			
		||||
                );
 | 
			
		||||
            } else {
 | 
			
		||||
                $this->fallbackDirsPsr4 = array_merge(
 | 
			
		||||
                    $this->fallbackDirsPsr4,
 | 
			
		||||
                    (array) $paths
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
 | 
			
		||||
            // Register directories for a new namespace.
 | 
			
		||||
            $length = strlen($prefix);
 | 
			
		||||
            if ('\\' !== $prefix[$length - 1]) {
 | 
			
		||||
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
 | 
			
		||||
            }
 | 
			
		||||
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
 | 
			
		||||
        } elseif ($prepend) {
 | 
			
		||||
            // Prepend directories for an already registered namespace.
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = array_merge(
 | 
			
		||||
                (array) $paths,
 | 
			
		||||
                $this->prefixDirsPsr4[$prefix]
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            // Append directories for an already registered namespace.
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = array_merge(
 | 
			
		||||
                $this->prefixDirsPsr4[$prefix],
 | 
			
		||||
                (array) $paths
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-0 directories for a given prefix,
 | 
			
		||||
     * replacing any others previously set for this prefix.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string       $prefix The prefix
 | 
			
		||||
     * @param array|string $paths  The PSR-0 base directories
 | 
			
		||||
     */
 | 
			
		||||
    public function set($prefix, $paths)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            $this->fallbackDirsPsr0 = (array) $paths;
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a set of PSR-4 directories for a given namespace,
 | 
			
		||||
     * replacing any others previously set for this namespace.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string       $prefix The prefix/namespace, with trailing '\\'
 | 
			
		||||
     * @param array|string $paths  The PSR-4 base directories
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function setPsr4($prefix, $paths)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$prefix) {
 | 
			
		||||
            $this->fallbackDirsPsr4 = (array) $paths;
 | 
			
		||||
        } else {
 | 
			
		||||
            $length = strlen($prefix);
 | 
			
		||||
            if ('\\' !== $prefix[$length - 1]) {
 | 
			
		||||
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
 | 
			
		||||
            }
 | 
			
		||||
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
 | 
			
		||||
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Turns on searching the include path for class files.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $useIncludePath
 | 
			
		||||
     */
 | 
			
		||||
    public function setUseIncludePath($useIncludePath)
 | 
			
		||||
    {
 | 
			
		||||
        $this->useIncludePath = $useIncludePath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Can be used to check if the autoloader uses the include path to check
 | 
			
		||||
     * for classes.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function getUseIncludePath()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->useIncludePath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Turns off searching the prefix and fallback directories for classes
 | 
			
		||||
     * that have not been registered with the class map.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $classMapAuthoritative
 | 
			
		||||
     */
 | 
			
		||||
    public function setClassMapAuthoritative($classMapAuthoritative)
 | 
			
		||||
    {
 | 
			
		||||
        $this->classMapAuthoritative = $classMapAuthoritative;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Should class lookup fail if not found in the current class map?
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isClassMapAuthoritative()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->classMapAuthoritative;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers this instance as an autoloader.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $prepend Whether to prepend the autoloader or not
 | 
			
		||||
     */
 | 
			
		||||
    public function register($prepend = false)
 | 
			
		||||
    {
 | 
			
		||||
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Unregisters this instance as an autoloader.
 | 
			
		||||
     */
 | 
			
		||||
    public function unregister()
 | 
			
		||||
    {
 | 
			
		||||
        spl_autoload_unregister(array($this, 'loadClass'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Loads the given class or interface.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string    $class The name of the class
 | 
			
		||||
     * @return bool|null True if loaded, null otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public function loadClass($class)
 | 
			
		||||
    {
 | 
			
		||||
        if ($file = $this->findFile($class)) {
 | 
			
		||||
            includeFile($file);
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds the path to the file where the class is defined.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $class The name of the class
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|false The path if found, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public function findFile($class)
 | 
			
		||||
    {
 | 
			
		||||
        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
 | 
			
		||||
        if ('\\' == $class[0]) {
 | 
			
		||||
            $class = substr($class, 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // class map lookup
 | 
			
		||||
        if (isset($this->classMap[$class])) {
 | 
			
		||||
            return $this->classMap[$class];
 | 
			
		||||
        }
 | 
			
		||||
        if ($this->classMapAuthoritative) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $file = $this->findFileWithExtension($class, '.php');
 | 
			
		||||
 | 
			
		||||
        // Search for Hack files if we are running on HHVM
 | 
			
		||||
        if ($file === null && defined('HHVM_VERSION')) {
 | 
			
		||||
            $file = $this->findFileWithExtension($class, '.hh');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($file === null) {
 | 
			
		||||
            // Remember that this class does not exist.
 | 
			
		||||
            return $this->classMap[$class] = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $file;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function findFileWithExtension($class, $ext)
 | 
			
		||||
    {
 | 
			
		||||
        // PSR-4 lookup
 | 
			
		||||
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
 | 
			
		||||
 | 
			
		||||
        $first = $class[0];
 | 
			
		||||
        if (isset($this->prefixLengthsPsr4[$first])) {
 | 
			
		||||
            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
 | 
			
		||||
                if (0 === strpos($class, $prefix)) {
 | 
			
		||||
                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
 | 
			
		||||
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
 | 
			
		||||
                            return $file;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-4 fallback dirs
 | 
			
		||||
        foreach ($this->fallbackDirsPsr4 as $dir) {
 | 
			
		||||
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
 | 
			
		||||
                return $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 lookup
 | 
			
		||||
        if (false !== $pos = strrpos($class, '\\')) {
 | 
			
		||||
            // namespaced class name
 | 
			
		||||
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
 | 
			
		||||
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
 | 
			
		||||
        } else {
 | 
			
		||||
            // PEAR-like class name
 | 
			
		||||
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isset($this->prefixesPsr0[$first])) {
 | 
			
		||||
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
 | 
			
		||||
                if (0 === strpos($class, $prefix)) {
 | 
			
		||||
                    foreach ($dirs as $dir) {
 | 
			
		||||
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
 | 
			
		||||
                            return $file;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 fallback dirs
 | 
			
		||||
        foreach ($this->fallbackDirsPsr0 as $dir) {
 | 
			
		||||
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
 | 
			
		||||
                return $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // PSR-0 include paths.
 | 
			
		||||
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
 | 
			
		||||
            return $file;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Scope isolated include.
 | 
			
		||||
 *
 | 
			
		||||
 * Prevents access to $this/self from included files.
 | 
			
		||||
 */
 | 
			
		||||
function includeFile($file)
 | 
			
		||||
{
 | 
			
		||||
    include $file;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								sites/all/libraries/mailgun/vendor/composer/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								sites/all/libraries/mailgun/vendor/composer/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2016 Nils Adermann, Jordi Boggiano
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is furnished
 | 
			
		||||
to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										355
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_classmap.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_classmap.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,355 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_classmap.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
 | 
			
		||||
    'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
 | 
			
		||||
    'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
 | 
			
		||||
    'PHPUnit_Extensions_GroupTestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
 | 
			
		||||
    'PHPUnit_Extensions_PhptTestCase' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
 | 
			
		||||
    'PHPUnit_Extensions_PhptTestCase_Logger' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
 | 
			
		||||
    'PHPUnit_Extensions_PhptTestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
 | 
			
		||||
    'PHPUnit_Extensions_RepeatedTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
 | 
			
		||||
    'PHPUnit_Extensions_TestDecorator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
 | 
			
		||||
    'PHPUnit_Extensions_TicketListener' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
 | 
			
		||||
    'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Assert.php',
 | 
			
		||||
    'PHPUnit_Framework_AssertionFailedError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
 | 
			
		||||
    'PHPUnit_Framework_ComparatorFactory' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Array' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_DOMDocument' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Double' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_MockObject' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Numeric' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Object' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Resource' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Scalar' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_SplObjectStorage' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
 | 
			
		||||
    'PHPUnit_Framework_Comparator_Type' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
 | 
			
		||||
    'PHPUnit_Framework_ComparisonFailure' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_And' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ArrayHasKey' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Attribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Callback' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Composite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Count' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ExceptionCode' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ExceptionMessage' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_FileExists' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_GreaterThan' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsAnything' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsEmpty' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsEqual' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsFalse' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsIdentical' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsInstanceOf' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsJson' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsJson.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsNull' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsTrue' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_IsType' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_JsonMatches' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_LessThan' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Not' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Or' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_PCREMatch' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_SameSize' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_StringContains' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_StringEndsWith' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_StringMatches' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_StringStartsWith' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_TraversableContains' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
 | 
			
		||||
    'PHPUnit_Framework_Constraint_Xor' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
 | 
			
		||||
    'PHPUnit_Framework_Error' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error.php',
 | 
			
		||||
    'PHPUnit_Framework_Error_Deprecated' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
 | 
			
		||||
    'PHPUnit_Framework_Error_Notice' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
 | 
			
		||||
    'PHPUnit_Framework_Error_Warning' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
 | 
			
		||||
    'PHPUnit_Framework_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Exception.php',
 | 
			
		||||
    'PHPUnit_Framework_ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
 | 
			
		||||
    'PHPUnit_Framework_IncompleteTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
 | 
			
		||||
    'PHPUnit_Framework_IncompleteTestError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_Match' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_Namespace' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Builder_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Invocation_Object' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Invocation_Static' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_Return' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
 | 
			
		||||
    'PHPUnit_Framework_MockObject_Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
 | 
			
		||||
    'PHPUnit_Framework_OutputError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
 | 
			
		||||
    'PHPUnit_Framework_SelfDescribing' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
 | 
			
		||||
    'PHPUnit_Framework_SkippedTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
 | 
			
		||||
    'PHPUnit_Framework_SkippedTestError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
 | 
			
		||||
    'PHPUnit_Framework_SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
 | 
			
		||||
    'PHPUnit_Framework_SyntheticError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
 | 
			
		||||
    'PHPUnit_Framework_Test' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Test.php',
 | 
			
		||||
    'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
 | 
			
		||||
    'PHPUnit_Framework_TestFailure' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
 | 
			
		||||
    'PHPUnit_Framework_TestListener' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
 | 
			
		||||
    'PHPUnit_Framework_TestResult' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
 | 
			
		||||
    'PHPUnit_Framework_TestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
 | 
			
		||||
    'PHPUnit_Framework_TestSuite_DataProvider' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
 | 
			
		||||
    'PHPUnit_Framework_Warning' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Warning.php',
 | 
			
		||||
    'PHPUnit_Runner_BaseTestRunner' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
 | 
			
		||||
    'PHPUnit_Runner_StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
 | 
			
		||||
    'PHPUnit_Runner_TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
 | 
			
		||||
    'PHPUnit_Runner_Version' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/Version.php',
 | 
			
		||||
    'PHPUnit_TextUI_Command' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/Command.php',
 | 
			
		||||
    'PHPUnit_TextUI_ResultPrinter' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
 | 
			
		||||
    'PHPUnit_TextUI_TestRunner' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
 | 
			
		||||
    'PHPUnit_Util_Class' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Class.php',
 | 
			
		||||
    'PHPUnit_Util_Configuration' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Configuration.php',
 | 
			
		||||
    'PHPUnit_Util_DeprecatedFeature' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
 | 
			
		||||
    'PHPUnit_Util_DeprecatedFeature_Logger' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
 | 
			
		||||
    'PHPUnit_Util_Diff' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Diff.php',
 | 
			
		||||
    'PHPUnit_Util_ErrorHandler' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
 | 
			
		||||
    'PHPUnit_Util_Fileloader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
 | 
			
		||||
    'PHPUnit_Util_Filesystem' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
 | 
			
		||||
    'PHPUnit_Util_Filter' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Filter.php',
 | 
			
		||||
    'PHPUnit_Util_Getopt' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Getopt.php',
 | 
			
		||||
    'PHPUnit_Util_GlobalState' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
 | 
			
		||||
    'PHPUnit_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
 | 
			
		||||
    'PHPUnit_Util_Log_JSON' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
 | 
			
		||||
    'PHPUnit_Util_Log_JUnit' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
 | 
			
		||||
    'PHPUnit_Util_Log_TAP' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
 | 
			
		||||
    'PHPUnit_Util_PHP' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP.php',
 | 
			
		||||
    'PHPUnit_Util_PHP_Default' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
 | 
			
		||||
    'PHPUnit_Util_PHP_Windows' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
 | 
			
		||||
    'PHPUnit_Util_Printer' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Printer.php',
 | 
			
		||||
    'PHPUnit_Util_String' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/String.php',
 | 
			
		||||
    'PHPUnit_Util_Test' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Test.php',
 | 
			
		||||
    'PHPUnit_Util_TestDox_NamePrettifier' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
 | 
			
		||||
    'PHPUnit_Util_TestDox_ResultPrinter' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
 | 
			
		||||
    'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
 | 
			
		||||
    'PHPUnit_Util_TestDox_ResultPrinter_Text' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
 | 
			
		||||
    'PHPUnit_Util_TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
 | 
			
		||||
    'PHPUnit_Util_Type' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Type.php',
 | 
			
		||||
    'PHPUnit_Util_XML' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/XML.php',
 | 
			
		||||
    'PHP_CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage.php',
 | 
			
		||||
    'PHP_CodeCoverage_Driver' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
 | 
			
		||||
    'PHP_CodeCoverage_Driver_Xdebug' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
 | 
			
		||||
    'PHP_CodeCoverage_Exception' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
 | 
			
		||||
    'PHP_CodeCoverage_Filter' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Clover' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Factory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_HTML' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_HTML_Renderer' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_HTML_Renderer_File' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Node' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Node_Directory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Node_File' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Node_Iterator' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_PHP' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
 | 
			
		||||
    'PHP_CodeCoverage_Report_Text' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
 | 
			
		||||
    'PHP_CodeCoverage_Util' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
 | 
			
		||||
    'PHP_CodeCoverage_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
 | 
			
		||||
    'PHP_CodeCoverage_Version' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
 | 
			
		||||
    'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
 | 
			
		||||
    'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/PHP/Token/Stream.php',
 | 
			
		||||
    'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
 | 
			
		||||
    'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
    'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										13
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_namespaces.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_namespaces.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_namespaces.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    'Mailgun\\Tests' => array($baseDir . '/tests'),
 | 
			
		||||
    'Mailgun' => array($baseDir . '/src'),
 | 
			
		||||
    'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'),
 | 
			
		||||
    'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										11
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_psr4.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_psr4.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_psr4.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
 | 
			
		||||
    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										56
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_real.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_real.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_real.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
class ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5
 | 
			
		||||
{
 | 
			
		||||
    private static $loader;
 | 
			
		||||
 | 
			
		||||
    public static function loadClassLoader($class)
 | 
			
		||||
    {
 | 
			
		||||
        if ('Composer\Autoload\ClassLoader' === $class) {
 | 
			
		||||
            require __DIR__ . '/ClassLoader.php';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getLoader()
 | 
			
		||||
    {
 | 
			
		||||
        if (null !== self::$loader) {
 | 
			
		||||
            return self::$loader;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        spl_autoload_register(array('ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5', 'loadClassLoader'), true, true);
 | 
			
		||||
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
 | 
			
		||||
        spl_autoload_unregister(array('ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5', 'loadClassLoader'));
 | 
			
		||||
 | 
			
		||||
        $includePaths = require __DIR__ . '/include_paths.php';
 | 
			
		||||
        array_push($includePaths, get_include_path());
 | 
			
		||||
        set_include_path(join(PATH_SEPARATOR, $includePaths));
 | 
			
		||||
 | 
			
		||||
        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
 | 
			
		||||
        if ($useStaticLoader) {
 | 
			
		||||
            require_once __DIR__ . '/autoload_static.php';
 | 
			
		||||
 | 
			
		||||
            call_user_func(\Composer\Autoload\ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::getInitializer($loader));
 | 
			
		||||
        } else {
 | 
			
		||||
            $map = require __DIR__ . '/autoload_namespaces.php';
 | 
			
		||||
            foreach ($map as $namespace => $path) {
 | 
			
		||||
                $loader->set($namespace, $path);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $map = require __DIR__ . '/autoload_psr4.php';
 | 
			
		||||
            foreach ($map as $namespace => $path) {
 | 
			
		||||
                $loader->setPsr4($namespace, $path);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $classMap = require __DIR__ . '/autoload_classmap.php';
 | 
			
		||||
            if ($classMap) {
 | 
			
		||||
                $loader->addClassMap($classMap);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $loader->register(true);
 | 
			
		||||
 | 
			
		||||
        return $loader;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										412
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_static.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										412
									
								
								sites/all/libraries/mailgun/vendor/composer/autoload_static.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,412 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// autoload_static.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
namespace Composer\Autoload;
 | 
			
		||||
 | 
			
		||||
class ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5
 | 
			
		||||
{
 | 
			
		||||
    public static $prefixLengthsPsr4 = array (
 | 
			
		||||
        'S' => 
 | 
			
		||||
        array (
 | 
			
		||||
            'Symfony\\Component\\Yaml\\' => 23,
 | 
			
		||||
            'Symfony\\Component\\EventDispatcher\\' => 34,
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static $prefixDirsPsr4 = array (
 | 
			
		||||
        'Symfony\\Component\\Yaml\\' => 
 | 
			
		||||
        array (
 | 
			
		||||
            0 => __DIR__ . '/..' . '/symfony/yaml',
 | 
			
		||||
        ),
 | 
			
		||||
        'Symfony\\Component\\EventDispatcher\\' => 
 | 
			
		||||
        array (
 | 
			
		||||
            0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static $prefixesPsr0 = array (
 | 
			
		||||
        'M' => 
 | 
			
		||||
        array (
 | 
			
		||||
            'Mailgun\\Tests' => 
 | 
			
		||||
            array (
 | 
			
		||||
                0 => __DIR__ . '/../..' . '/tests',
 | 
			
		||||
            ),
 | 
			
		||||
            'Mailgun' => 
 | 
			
		||||
            array (
 | 
			
		||||
                0 => __DIR__ . '/../..' . '/src',
 | 
			
		||||
            ),
 | 
			
		||||
        ),
 | 
			
		||||
        'G' => 
 | 
			
		||||
        array (
 | 
			
		||||
            'Guzzle\\Tests' => 
 | 
			
		||||
            array (
 | 
			
		||||
                0 => __DIR__ . '/..' . '/guzzle/guzzle/tests',
 | 
			
		||||
            ),
 | 
			
		||||
            'Guzzle' => 
 | 
			
		||||
            array (
 | 
			
		||||
                0 => __DIR__ . '/..' . '/guzzle/guzzle/src',
 | 
			
		||||
            ),
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static $classMap = array (
 | 
			
		||||
        'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
 | 
			
		||||
        'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
 | 
			
		||||
        'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
 | 
			
		||||
        'PHPUnit_Extensions_GroupTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
 | 
			
		||||
        'PHPUnit_Extensions_PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
 | 
			
		||||
        'PHPUnit_Extensions_PhptTestCase_Logger' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
 | 
			
		||||
        'PHPUnit_Extensions_PhptTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
 | 
			
		||||
        'PHPUnit_Extensions_RepeatedTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
 | 
			
		||||
        'PHPUnit_Extensions_TestDecorator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
 | 
			
		||||
        'PHPUnit_Extensions_TicketListener' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
 | 
			
		||||
        'PHPUnit_Framework_Assert' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Assert.php',
 | 
			
		||||
        'PHPUnit_Framework_AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
 | 
			
		||||
        'PHPUnit_Framework_ComparatorFactory' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Array' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_DOMDocument' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Double' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Numeric' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Object' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Resource' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Scalar' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_SplObjectStorage' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
 | 
			
		||||
        'PHPUnit_Framework_Comparator_Type' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
 | 
			
		||||
        'PHPUnit_Framework_ComparisonFailure' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_And' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Callback' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Composite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Count' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsJson.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_IsType' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Not' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Or' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_PCREMatch' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_StringMatches' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
 | 
			
		||||
        'PHPUnit_Framework_Constraint_Xor' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
 | 
			
		||||
        'PHPUnit_Framework_Error' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error.php',
 | 
			
		||||
        'PHPUnit_Framework_Error_Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
 | 
			
		||||
        'PHPUnit_Framework_Error_Notice' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
 | 
			
		||||
        'PHPUnit_Framework_Error_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
 | 
			
		||||
        'PHPUnit_Framework_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Exception.php',
 | 
			
		||||
        'PHPUnit_Framework_ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
 | 
			
		||||
        'PHPUnit_Framework_IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
 | 
			
		||||
        'PHPUnit_Framework_IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_Namespace' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Builder_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Invocation_Object' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Invocation_Static' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_Return' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
 | 
			
		||||
        'PHPUnit_Framework_MockObject_Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
 | 
			
		||||
        'PHPUnit_Framework_OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
 | 
			
		||||
        'PHPUnit_Framework_SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
 | 
			
		||||
        'PHPUnit_Framework_SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
 | 
			
		||||
        'PHPUnit_Framework_SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
 | 
			
		||||
        'PHPUnit_Framework_SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
 | 
			
		||||
        'PHPUnit_Framework_SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
 | 
			
		||||
        'PHPUnit_Framework_Test' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Test.php',
 | 
			
		||||
        'PHPUnit_Framework_TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
 | 
			
		||||
        'PHPUnit_Framework_TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
 | 
			
		||||
        'PHPUnit_Framework_TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
 | 
			
		||||
        'PHPUnit_Framework_TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
 | 
			
		||||
        'PHPUnit_Framework_TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
 | 
			
		||||
        'PHPUnit_Framework_TestSuite_DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
 | 
			
		||||
        'PHPUnit_Framework_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Warning.php',
 | 
			
		||||
        'PHPUnit_Runner_BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
 | 
			
		||||
        'PHPUnit_Runner_StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
 | 
			
		||||
        'PHPUnit_Runner_TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
 | 
			
		||||
        'PHPUnit_Runner_Version' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/Version.php',
 | 
			
		||||
        'PHPUnit_TextUI_Command' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/Command.php',
 | 
			
		||||
        'PHPUnit_TextUI_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
 | 
			
		||||
        'PHPUnit_TextUI_TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
 | 
			
		||||
        'PHPUnit_Util_Class' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Class.php',
 | 
			
		||||
        'PHPUnit_Util_Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Configuration.php',
 | 
			
		||||
        'PHPUnit_Util_DeprecatedFeature' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
 | 
			
		||||
        'PHPUnit_Util_DeprecatedFeature_Logger' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
 | 
			
		||||
        'PHPUnit_Util_Diff' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Diff.php',
 | 
			
		||||
        'PHPUnit_Util_ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
 | 
			
		||||
        'PHPUnit_Util_Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
 | 
			
		||||
        'PHPUnit_Util_Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
 | 
			
		||||
        'PHPUnit_Util_Filter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Filter.php',
 | 
			
		||||
        'PHPUnit_Util_Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Getopt.php',
 | 
			
		||||
        'PHPUnit_Util_GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
 | 
			
		||||
        'PHPUnit_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
 | 
			
		||||
        'PHPUnit_Util_Log_JSON' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
 | 
			
		||||
        'PHPUnit_Util_Log_JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
 | 
			
		||||
        'PHPUnit_Util_Log_TAP' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
 | 
			
		||||
        'PHPUnit_Util_PHP' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP.php',
 | 
			
		||||
        'PHPUnit_Util_PHP_Default' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
 | 
			
		||||
        'PHPUnit_Util_PHP_Windows' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
 | 
			
		||||
        'PHPUnit_Util_Printer' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Printer.php',
 | 
			
		||||
        'PHPUnit_Util_String' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/String.php',
 | 
			
		||||
        'PHPUnit_Util_Test' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Test.php',
 | 
			
		||||
        'PHPUnit_Util_TestDox_NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
 | 
			
		||||
        'PHPUnit_Util_TestDox_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
 | 
			
		||||
        'PHPUnit_Util_TestDox_ResultPrinter_HTML' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
 | 
			
		||||
        'PHPUnit_Util_TestDox_ResultPrinter_Text' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
 | 
			
		||||
        'PHPUnit_Util_TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
 | 
			
		||||
        'PHPUnit_Util_Type' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Type.php',
 | 
			
		||||
        'PHPUnit_Util_XML' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/XML.php',
 | 
			
		||||
        'PHP_CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage.php',
 | 
			
		||||
        'PHP_CodeCoverage_Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
 | 
			
		||||
        'PHP_CodeCoverage_Driver_Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
 | 
			
		||||
        'PHP_CodeCoverage_Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
 | 
			
		||||
        'PHP_CodeCoverage_Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Factory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_HTML' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_HTML_Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_HTML_Renderer_File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Node_Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Node_File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Node_Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
 | 
			
		||||
        'PHP_CodeCoverage_Report_Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
 | 
			
		||||
        'PHP_CodeCoverage_Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
 | 
			
		||||
        'PHP_CodeCoverage_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
 | 
			
		||||
        'PHP_CodeCoverage_Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
 | 
			
		||||
        'PHP_Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php',
 | 
			
		||||
        'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token/Stream.php',
 | 
			
		||||
        'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
 | 
			
		||||
        'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
 | 
			
		||||
        'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    public static function getInitializer(ClassLoader $loader)
 | 
			
		||||
    {
 | 
			
		||||
        return \Closure::bind(function () use ($loader) {
 | 
			
		||||
            $loader->prefixLengthsPsr4 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixLengthsPsr4;
 | 
			
		||||
            $loader->prefixDirsPsr4 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixDirsPsr4;
 | 
			
		||||
            $loader->prefixesPsr0 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixesPsr0;
 | 
			
		||||
            $loader->classMap = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$classMap;
 | 
			
		||||
 | 
			
		||||
        }, null, ClassLoader::class);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								sites/all/libraries/mailgun/vendor/composer/include_paths.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								sites/all/libraries/mailgun/vendor/composer/include_paths.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
// include_paths.php @generated by Composer
 | 
			
		||||
 | 
			
		||||
$vendorDir = dirname(dirname(__FILE__));
 | 
			
		||||
$baseDir = dirname($vendorDir);
 | 
			
		||||
 | 
			
		||||
return array(
 | 
			
		||||
    $vendorDir . '/phpunit/phpunit-mock-objects',
 | 
			
		||||
    $vendorDir . '/phpunit/php-token-stream',
 | 
			
		||||
    $vendorDir . '/phpunit/php-code-coverage',
 | 
			
		||||
    $vendorDir . '/phpunit/phpunit',
 | 
			
		||||
    $vendorDir . '/symfony/yaml',
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										592
									
								
								sites/all/libraries/mailgun/vendor/composer/installed.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										592
									
								
								sites/all/libraries/mailgun/vendor/composer/installed.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,592 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "name": "symfony/event-dispatcher",
 | 
			
		||||
        "version": "v2.8.8",
 | 
			
		||||
        "version_normalized": "2.8.8.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/symfony/event-dispatcher.git",
 | 
			
		||||
            "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b180b70439dca70049b6b9b7e21d75e6e5d7aca9",
 | 
			
		||||
            "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.9"
 | 
			
		||||
        },
 | 
			
		||||
        "require-dev": {
 | 
			
		||||
            "psr/log": "~1.0",
 | 
			
		||||
            "symfony/config": "~2.0,>=2.0.5|~3.0.0",
 | 
			
		||||
            "symfony/dependency-injection": "~2.6|~3.0.0",
 | 
			
		||||
            "symfony/expression-language": "~2.6|~3.0.0",
 | 
			
		||||
            "symfony/stopwatch": "~2.3|~3.0.0"
 | 
			
		||||
        },
 | 
			
		||||
        "suggest": {
 | 
			
		||||
            "symfony/dependency-injection": "",
 | 
			
		||||
            "symfony/http-kernel": ""
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2016-06-29 05:29:29",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "2.8-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "psr-4": {
 | 
			
		||||
                "Symfony\\Component\\EventDispatcher\\": ""
 | 
			
		||||
            },
 | 
			
		||||
            "exclude-from-classmap": [
 | 
			
		||||
                "/Tests/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "MIT"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Fabien Potencier",
 | 
			
		||||
                "email": "fabien@symfony.com"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Symfony Community",
 | 
			
		||||
                "homepage": "https://symfony.com/contributors"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Symfony EventDispatcher Component",
 | 
			
		||||
        "homepage": "https://symfony.com"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "guzzle/guzzle",
 | 
			
		||||
        "version": "v3.9.3",
 | 
			
		||||
        "version_normalized": "3.9.3.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/guzzle/guzzle3.git",
 | 
			
		||||
            "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
 | 
			
		||||
            "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "ext-curl": "*",
 | 
			
		||||
            "php": ">=5.3.3",
 | 
			
		||||
            "symfony/event-dispatcher": "~2.1"
 | 
			
		||||
        },
 | 
			
		||||
        "replace": {
 | 
			
		||||
            "guzzle/batch": "self.version",
 | 
			
		||||
            "guzzle/cache": "self.version",
 | 
			
		||||
            "guzzle/common": "self.version",
 | 
			
		||||
            "guzzle/http": "self.version",
 | 
			
		||||
            "guzzle/inflection": "self.version",
 | 
			
		||||
            "guzzle/iterator": "self.version",
 | 
			
		||||
            "guzzle/log": "self.version",
 | 
			
		||||
            "guzzle/parser": "self.version",
 | 
			
		||||
            "guzzle/plugin": "self.version",
 | 
			
		||||
            "guzzle/plugin-async": "self.version",
 | 
			
		||||
            "guzzle/plugin-backoff": "self.version",
 | 
			
		||||
            "guzzle/plugin-cache": "self.version",
 | 
			
		||||
            "guzzle/plugin-cookie": "self.version",
 | 
			
		||||
            "guzzle/plugin-curlauth": "self.version",
 | 
			
		||||
            "guzzle/plugin-error-response": "self.version",
 | 
			
		||||
            "guzzle/plugin-history": "self.version",
 | 
			
		||||
            "guzzle/plugin-log": "self.version",
 | 
			
		||||
            "guzzle/plugin-md5": "self.version",
 | 
			
		||||
            "guzzle/plugin-mock": "self.version",
 | 
			
		||||
            "guzzle/plugin-oauth": "self.version",
 | 
			
		||||
            "guzzle/service": "self.version",
 | 
			
		||||
            "guzzle/stream": "self.version"
 | 
			
		||||
        },
 | 
			
		||||
        "require-dev": {
 | 
			
		||||
            "doctrine/cache": "~1.3",
 | 
			
		||||
            "monolog/monolog": "~1.0",
 | 
			
		||||
            "phpunit/phpunit": "3.7.*",
 | 
			
		||||
            "psr/log": "~1.0",
 | 
			
		||||
            "symfony/class-loader": "~2.1",
 | 
			
		||||
            "zendframework/zend-cache": "2.*,<2.3",
 | 
			
		||||
            "zendframework/zend-log": "2.*,<2.3"
 | 
			
		||||
        },
 | 
			
		||||
        "suggest": {
 | 
			
		||||
            "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2015-03-18 18:23:50",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "3.9-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "psr-0": {
 | 
			
		||||
                "Guzzle": "src/",
 | 
			
		||||
                "Guzzle\\Tests": "tests/"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "MIT"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Michael Dowling",
 | 
			
		||||
                "email": "mtdowling@gmail.com",
 | 
			
		||||
                "homepage": "https://github.com/mtdowling"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Guzzle Community",
 | 
			
		||||
                "homepage": "https://github.com/guzzle/guzzle/contributors"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
 | 
			
		||||
        "homepage": "http://guzzlephp.org/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "client",
 | 
			
		||||
            "curl",
 | 
			
		||||
            "framework",
 | 
			
		||||
            "http",
 | 
			
		||||
            "http client",
 | 
			
		||||
            "rest",
 | 
			
		||||
            "web service"
 | 
			
		||||
        ],
 | 
			
		||||
        "abandoned": "guzzlehttp/guzzle"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "symfony/yaml",
 | 
			
		||||
        "version": "v2.8.8",
 | 
			
		||||
        "version_normalized": "2.8.8.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/symfony/yaml.git",
 | 
			
		||||
            "reference": "dba4bb5846798cd12f32e2d8f3f35d77045773c8"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/symfony/yaml/zipball/dba4bb5846798cd12f32e2d8f3f35d77045773c8",
 | 
			
		||||
            "reference": "dba4bb5846798cd12f32e2d8f3f35d77045773c8",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.9"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2016-06-29 05:29:29",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "2.8-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "psr-4": {
 | 
			
		||||
                "Symfony\\Component\\Yaml\\": ""
 | 
			
		||||
            },
 | 
			
		||||
            "exclude-from-classmap": [
 | 
			
		||||
                "/Tests/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "MIT"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Fabien Potencier",
 | 
			
		||||
                "email": "fabien@symfony.com"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Symfony Community",
 | 
			
		||||
                "homepage": "https://symfony.com/contributors"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Symfony Yaml Component",
 | 
			
		||||
        "homepage": "https://symfony.com"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/php-text-template",
 | 
			
		||||
        "version": "1.2.1",
 | 
			
		||||
        "version_normalized": "1.2.1.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/php-text-template.git",
 | 
			
		||||
            "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
 | 
			
		||||
            "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.3"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2015-06-21 13:50:34",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "src/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sebastian@phpunit.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Simple template engine.",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/php-text-template/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "template"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/phpunit-mock-objects",
 | 
			
		||||
        "version": "1.2.3",
 | 
			
		||||
        "version_normalized": "1.2.3.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
 | 
			
		||||
            "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875",
 | 
			
		||||
            "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.3",
 | 
			
		||||
            "phpunit/php-text-template": ">=1.1.1@stable"
 | 
			
		||||
        },
 | 
			
		||||
        "suggest": {
 | 
			
		||||
            "ext-soap": "*"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2013-01-13 10:24:48",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "PHPUnit/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "include-path": [
 | 
			
		||||
            ""
 | 
			
		||||
        ],
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sb@sebastian-bergmann.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Mock Object library for PHPUnit",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "mock",
 | 
			
		||||
            "xunit"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/php-timer",
 | 
			
		||||
        "version": "1.0.8",
 | 
			
		||||
        "version_normalized": "1.0.8.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/php-timer.git",
 | 
			
		||||
            "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
 | 
			
		||||
            "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.3"
 | 
			
		||||
        },
 | 
			
		||||
        "require-dev": {
 | 
			
		||||
            "phpunit/phpunit": "~4|~5"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2016-05-12 18:03:57",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "src/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sb@sebastian-bergmann.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Utility class for timing",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/php-timer/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "timer"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/php-file-iterator",
 | 
			
		||||
        "version": "1.4.1",
 | 
			
		||||
        "version_normalized": "1.4.1.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
 | 
			
		||||
            "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
 | 
			
		||||
            "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.3"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2015-06-21 13:08:43",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "1.4.x-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "src/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sb@sebastian-bergmann.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "filesystem",
 | 
			
		||||
            "iterator"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/php-token-stream",
 | 
			
		||||
        "version": "1.2.2",
 | 
			
		||||
        "version_normalized": "1.2.2.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
 | 
			
		||||
            "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32",
 | 
			
		||||
            "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "ext-tokenizer": "*",
 | 
			
		||||
            "php": ">=5.3.3"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2014-03-03 05:10:30",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "1.2-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "PHP/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "include-path": [
 | 
			
		||||
            ""
 | 
			
		||||
        ],
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sb@sebastian-bergmann.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Wrapper around PHP's tokenizer extension.",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "tokenizer"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/php-code-coverage",
 | 
			
		||||
        "version": "1.2.18",
 | 
			
		||||
        "version_normalized": "1.2.18.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
 | 
			
		||||
            "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
 | 
			
		||||
            "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "php": ">=5.3.3",
 | 
			
		||||
            "phpunit/php-file-iterator": ">=1.3.0@stable",
 | 
			
		||||
            "phpunit/php-text-template": ">=1.2.0@stable",
 | 
			
		||||
            "phpunit/php-token-stream": ">=1.1.3,<1.3.0"
 | 
			
		||||
        },
 | 
			
		||||
        "require-dev": {
 | 
			
		||||
            "phpunit/phpunit": "3.7.*@dev"
 | 
			
		||||
        },
 | 
			
		||||
        "suggest": {
 | 
			
		||||
            "ext-dom": "*",
 | 
			
		||||
            "ext-xdebug": ">=2.0.5"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2014-09-02 10:13:14",
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "1.2.x-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "PHP/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "include-path": [
 | 
			
		||||
            ""
 | 
			
		||||
        ],
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sb@sebastian-bergmann.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
 | 
			
		||||
        "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "coverage",
 | 
			
		||||
            "testing",
 | 
			
		||||
            "xunit"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "name": "phpunit/phpunit",
 | 
			
		||||
        "version": "3.7.38",
 | 
			
		||||
        "version_normalized": "3.7.38.0",
 | 
			
		||||
        "source": {
 | 
			
		||||
            "type": "git",
 | 
			
		||||
            "url": "https://github.com/sebastianbergmann/phpunit.git",
 | 
			
		||||
            "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6"
 | 
			
		||||
        },
 | 
			
		||||
        "dist": {
 | 
			
		||||
            "type": "zip",
 | 
			
		||||
            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38709dc22d519a3d1be46849868aa2ddf822bcf6",
 | 
			
		||||
            "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6",
 | 
			
		||||
            "shasum": ""
 | 
			
		||||
        },
 | 
			
		||||
        "require": {
 | 
			
		||||
            "ext-ctype": "*",
 | 
			
		||||
            "ext-dom": "*",
 | 
			
		||||
            "ext-json": "*",
 | 
			
		||||
            "ext-pcre": "*",
 | 
			
		||||
            "ext-reflection": "*",
 | 
			
		||||
            "ext-spl": "*",
 | 
			
		||||
            "php": ">=5.3.3",
 | 
			
		||||
            "phpunit/php-code-coverage": "~1.2",
 | 
			
		||||
            "phpunit/php-file-iterator": "~1.3",
 | 
			
		||||
            "phpunit/php-text-template": "~1.1",
 | 
			
		||||
            "phpunit/php-timer": "~1.0",
 | 
			
		||||
            "phpunit/phpunit-mock-objects": "~1.2",
 | 
			
		||||
            "symfony/yaml": "~2.0"
 | 
			
		||||
        },
 | 
			
		||||
        "require-dev": {
 | 
			
		||||
            "pear-pear.php.net/pear": "1.9.4"
 | 
			
		||||
        },
 | 
			
		||||
        "suggest": {
 | 
			
		||||
            "phpunit/php-invoker": "~1.1"
 | 
			
		||||
        },
 | 
			
		||||
        "time": "2014-10-17 09:04:17",
 | 
			
		||||
        "bin": [
 | 
			
		||||
            "composer/bin/phpunit"
 | 
			
		||||
        ],
 | 
			
		||||
        "type": "library",
 | 
			
		||||
        "extra": {
 | 
			
		||||
            "branch-alias": {
 | 
			
		||||
                "dev-master": "3.7.x-dev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "installation-source": "dist",
 | 
			
		||||
        "autoload": {
 | 
			
		||||
            "classmap": [
 | 
			
		||||
                "PHPUnit/"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
        "include-path": [
 | 
			
		||||
            "",
 | 
			
		||||
            "../../symfony/yaml/"
 | 
			
		||||
        ],
 | 
			
		||||
        "license": [
 | 
			
		||||
            "BSD-3-Clause"
 | 
			
		||||
        ],
 | 
			
		||||
        "authors": [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Sebastian Bergmann",
 | 
			
		||||
                "email": "sebastian@phpunit.de",
 | 
			
		||||
                "role": "lead"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "description": "The PHP Unit Testing framework.",
 | 
			
		||||
        "homepage": "http://www.phpunit.de/",
 | 
			
		||||
        "keywords": [
 | 
			
		||||
            "phpunit",
 | 
			
		||||
            "testing",
 | 
			
		||||
            "xunit"
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
# Ingore common cruft
 | 
			
		||||
.DS_STORE
 | 
			
		||||
coverage
 | 
			
		||||
.idea
 | 
			
		||||
 | 
			
		||||
# Ignore binary files
 | 
			
		||||
guzzle.phar
 | 
			
		||||
guzzle-min.phar
 | 
			
		||||
 | 
			
		||||
# Ignore potentially sensitive phpunit file
 | 
			
		||||
phpunit.xml
 | 
			
		||||
 | 
			
		||||
# Ignore composer generated files
 | 
			
		||||
composer.phar
 | 
			
		||||
composer.lock
 | 
			
		||||
composer-test.lock
 | 
			
		||||
vendor/
 | 
			
		||||
 | 
			
		||||
# Ignore build files
 | 
			
		||||
build/
 | 
			
		||||
phing/build.properties
 | 
			
		||||
 | 
			
		||||
# Ignore subsplit working directory
 | 
			
		||||
.subsplit
 | 
			
		||||
 | 
			
		||||
docs/_build
 | 
			
		||||
docs/*.pyc
 | 
			
		||||
							
								
								
									
										17
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/.travis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/.travis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
language: php
 | 
			
		||||
 | 
			
		||||
php:
 | 
			
		||||
  - 5.3
 | 
			
		||||
  - 5.4
 | 
			
		||||
  - 5.5
 | 
			
		||||
  - 5.6
 | 
			
		||||
  - hhvm
 | 
			
		||||
 | 
			
		||||
before_script:
 | 
			
		||||
  - curl --version
 | 
			
		||||
  - pecl install uri_template-beta || echo "pecl uri_template not available"
 | 
			
		||||
  - composer self-update
 | 
			
		||||
  - composer install --no-interaction --prefer-source --dev
 | 
			
		||||
  - ~/.nvm/nvm.sh install v0.6.14
 | 
			
		||||
 | 
			
		||||
script: composer test
 | 
			
		||||
							
								
								
									
										751
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/CHANGELOG.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										751
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/CHANGELOG.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,751 @@
 | 
			
		||||
# CHANGELOG
 | 
			
		||||
 | 
			
		||||
## 3.9.3 - 2015-03-18
 | 
			
		||||
 | 
			
		||||
* Ensuring Content-Length is not stripped from a request when it is `0`.
 | 
			
		||||
* Added more information to stream wrapper exceptions.
 | 
			
		||||
* Message parser will no longer throw warnings for malformed messages.
 | 
			
		||||
* Giving a valid cache TTL when max-age is 0.
 | 
			
		||||
 | 
			
		||||
## 3.9.2 - 2014-09-10
 | 
			
		||||
 | 
			
		||||
* Retrying "Connection died, retrying a fresh connect" curl errors.
 | 
			
		||||
* Automatically extracting the cacert from the phar in client constructor.
 | 
			
		||||
* Added EntityBody support for OPTIONS requests.
 | 
			
		||||
 | 
			
		||||
## 3.9.1 - 2014-05-07
 | 
			
		||||
 | 
			
		||||
* Added a fix to ReadLimitEntityBody to ensure it doesn't infinitely loop.
 | 
			
		||||
* Added a fix to the stream checksum function so that when the first read
 | 
			
		||||
  returns a falsey value, it still continues to consume the stream until EOF.
 | 
			
		||||
 | 
			
		||||
## 3.9.0 - 2014-04-23
 | 
			
		||||
 | 
			
		||||
* `null`, `false`, and `"_guzzle_blank_"` all now serialize as an empty value
 | 
			
		||||
  with no trailing "=". See dc1d824277.
 | 
			
		||||
* No longer performing an MD5 check on the cacert each time the phar is used,
 | 
			
		||||
  but rather copying the cacert to the temp directory.
 | 
			
		||||
* `"0"` can now be added as a URL path
 | 
			
		||||
* Deleting cookies that are set to empty
 | 
			
		||||
* If-Modified-Since is no longer unnecessarily added to the CachePlugin
 | 
			
		||||
* Cookie path matching now follows RFC 6265 s5.1.4
 | 
			
		||||
* Updated service descriptions are now added to a service client's composite
 | 
			
		||||
  factory.
 | 
			
		||||
* MockPlugin now throws an exception if the queue is empty.
 | 
			
		||||
* Properly parsing URLs that start with "http" but are not absolute
 | 
			
		||||
* Added the ability to configure the curl_multi_select timeout setting
 | 
			
		||||
* OAuth parameters are now sorted using lexicographical byte value ordering
 | 
			
		||||
* Fixing invalid usage of an out of range PHP feature in the ErrorResponsePlugin
 | 
			
		||||
 | 
			
		||||
## 3.8.1 -2014-01-28
 | 
			
		||||
 | 
			
		||||
* Bug: Always using GET requests when redirecting from a 303 response
 | 
			
		||||
* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
 | 
			
		||||
  `Guzzle\Http\ClientInterface::setSslVerification()`
 | 
			
		||||
* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
 | 
			
		||||
* Bug: The body of a request can now be set to `"0"`
 | 
			
		||||
* Sending PHP stream requests no longer forces `HTTP/1.0`
 | 
			
		||||
* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
 | 
			
		||||
  each sub-exception
 | 
			
		||||
* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
 | 
			
		||||
  clobbering everything).
 | 
			
		||||
* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
 | 
			
		||||
* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
 | 
			
		||||
  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
 | 
			
		||||
* Now properly escaping the regular expression delimiter when matching Cookie domains.
 | 
			
		||||
* Network access is now disabled when loading XML documents
 | 
			
		||||
 | 
			
		||||
## 3.8.0 - 2013-12-05
 | 
			
		||||
 | 
			
		||||
* Added the ability to define a POST name for a file
 | 
			
		||||
* JSON response parsing now properly walks additionalProperties
 | 
			
		||||
* cURL error code 18 is now retried automatically in the BackoffPlugin
 | 
			
		||||
* Fixed a cURL error when URLs contain fragments
 | 
			
		||||
* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
 | 
			
		||||
  CurlExceptions
 | 
			
		||||
* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
 | 
			
		||||
* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
 | 
			
		||||
* Fixed a bug that was encountered when parsing empty header parameters
 | 
			
		||||
* UriTemplate now has a `setRegex()` method to match the docs
 | 
			
		||||
* The `debug` request parameter now checks if it is truthy rather than if it exists
 | 
			
		||||
* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
 | 
			
		||||
* Added the ability to combine URLs using strict RFC 3986 compliance
 | 
			
		||||
* Command objects can now return the validation errors encountered by the command
 | 
			
		||||
* Various fixes to cache revalidation (#437 and 29797e5)
 | 
			
		||||
* Various fixes to the AsyncPlugin
 | 
			
		||||
* Cleaned up build scripts
 | 
			
		||||
 | 
			
		||||
## 3.7.4 - 2013-10-02
 | 
			
		||||
 | 
			
		||||
* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
 | 
			
		||||
* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
 | 
			
		||||
  (see https://github.com/aws/aws-sdk-php/issues/147)
 | 
			
		||||
* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
 | 
			
		||||
* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
 | 
			
		||||
* Updated the bundled cacert.pem (#419)
 | 
			
		||||
* OauthPlugin now supports adding authentication to headers or query string (#425)
 | 
			
		||||
 | 
			
		||||
## 3.7.3 - 2013-09-08
 | 
			
		||||
 | 
			
		||||
* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
 | 
			
		||||
  `CommandTransferException`.
 | 
			
		||||
* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
 | 
			
		||||
* Schemas are only injected into response models when explicitly configured.
 | 
			
		||||
* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
 | 
			
		||||
  an EntityBody.
 | 
			
		||||
* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
 | 
			
		||||
* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
 | 
			
		||||
* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
 | 
			
		||||
* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
 | 
			
		||||
* Bug fix: Visiting XML attributes first before visting XML children when serializing requests
 | 
			
		||||
* Bug fix: Properly parsing headers that contain commas contained in quotes
 | 
			
		||||
* Bug fix: mimetype guessing based on a filename is now case-insensitive
 | 
			
		||||
 | 
			
		||||
## 3.7.2 - 2013-08-02
 | 
			
		||||
 | 
			
		||||
* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
 | 
			
		||||
  See https://github.com/guzzle/guzzle/issues/371
 | 
			
		||||
* Bug fix: Cookie domains are now matched correctly according to RFC 6265
 | 
			
		||||
  See https://github.com/guzzle/guzzle/issues/377
 | 
			
		||||
* Bug fix: GET parameters are now used when calculating an OAuth signature
 | 
			
		||||
* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
 | 
			
		||||
* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
 | 
			
		||||
* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
 | 
			
		||||
  See https://github.com/guzzle/guzzle/issues/379
 | 
			
		||||
* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
 | 
			
		||||
  https://github.com/guzzle/guzzle/pull/380
 | 
			
		||||
* cURL multi cleanup and optimizations
 | 
			
		||||
 | 
			
		||||
## 3.7.1 - 2013-07-05
 | 
			
		||||
 | 
			
		||||
* Bug fix: Setting default options on a client now works
 | 
			
		||||
* Bug fix: Setting options on HEAD requests now works. See #352
 | 
			
		||||
* Bug fix: Moving stream factory before send event to before building the stream. See #353
 | 
			
		||||
* Bug fix: Cookies no longer match on IP addresses per RFC 6265
 | 
			
		||||
* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
 | 
			
		||||
* Added `cert` and `ssl_key` as request options
 | 
			
		||||
* `Host` header can now diverge from the host part of a URL if the header is set manually
 | 
			
		||||
* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
 | 
			
		||||
* OAuth parameters are only added via the plugin if they aren't already set
 | 
			
		||||
* Exceptions are now thrown when a URL cannot be parsed
 | 
			
		||||
* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
 | 
			
		||||
* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
 | 
			
		||||
 | 
			
		||||
## 3.7.0 - 2013-06-10
 | 
			
		||||
 | 
			
		||||
* See UPGRADING.md for more information on how to upgrade.
 | 
			
		||||
* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
 | 
			
		||||
  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
 | 
			
		||||
  every request created by a client (e.g. default query string variables, headers, curl options, etc).
 | 
			
		||||
* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
 | 
			
		||||
  See `Guzzle\Http\StaticClient::mount`.
 | 
			
		||||
* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
 | 
			
		||||
      created by a command (e.g. custom headers, query string variables, timeout settings, etc).
 | 
			
		||||
* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
 | 
			
		||||
  headers of a response
 | 
			
		||||
* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
 | 
			
		||||
  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
 | 
			
		||||
* ServiceBuilders now support storing and retrieving arbitrary data
 | 
			
		||||
* CachePlugin can now purge all resources for a given URI
 | 
			
		||||
* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
 | 
			
		||||
* CachePlugin now uses the Vary header to determine if a resource is a cache hit
 | 
			
		||||
* `Guzzle\Http\Message\Response` now implements `\Serializable`
 | 
			
		||||
* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
 | 
			
		||||
* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
 | 
			
		||||
* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
 | 
			
		||||
* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
 | 
			
		||||
* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
 | 
			
		||||
* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
 | 
			
		||||
  Symfony users can still use the old version of Monolog.
 | 
			
		||||
* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
 | 
			
		||||
  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
 | 
			
		||||
* Several performance improvements to `Guzzle\Common\Collection`
 | 
			
		||||
* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
 | 
			
		||||
  createRequest, head, delete, put, patch, post, options, prepareRequest
 | 
			
		||||
* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
 | 
			
		||||
* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
 | 
			
		||||
* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
 | 
			
		||||
  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
 | 
			
		||||
  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
 | 
			
		||||
* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
 | 
			
		||||
  default `array()`
 | 
			
		||||
* Added `Guzzle\Stream\StreamInterface::isRepeatable`
 | 
			
		||||
* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
 | 
			
		||||
  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
 | 
			
		||||
  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
 | 
			
		||||
* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
 | 
			
		||||
* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
 | 
			
		||||
* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
 | 
			
		||||
* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
 | 
			
		||||
* Removed `Guzzle\Http\Message\RequestInterface::canCache`
 | 
			
		||||
* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
 | 
			
		||||
* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
 | 
			
		||||
* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
 | 
			
		||||
* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
 | 
			
		||||
  `Guzzle\Common\Version::$emitWarnings` to true.
 | 
			
		||||
* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
 | 
			
		||||
      `$request->getResponseBody()->isRepeatable()` instead.
 | 
			
		||||
* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
 | 
			
		||||
  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
 | 
			
		||||
* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
 | 
			
		||||
  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
 | 
			
		||||
* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
 | 
			
		||||
* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
 | 
			
		||||
* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
 | 
			
		||||
* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
 | 
			
		||||
  These will work through Guzzle 4.0
 | 
			
		||||
* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
 | 
			
		||||
* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
 | 
			
		||||
* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
 | 
			
		||||
* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
 | 
			
		||||
* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
 | 
			
		||||
* Marked `Guzzle\Common\Collection::inject()` as deprecated.
 | 
			
		||||
* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
 | 
			
		||||
* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
 | 
			
		||||
  CacheStorageInterface. These two objects and interface will be removed in a future version.
 | 
			
		||||
* Always setting X-cache headers on cached responses
 | 
			
		||||
* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
 | 
			
		||||
* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
 | 
			
		||||
  $request, Response $response);`
 | 
			
		||||
* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
 | 
			
		||||
* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
 | 
			
		||||
* Added `CacheStorageInterface::purge($url)`
 | 
			
		||||
* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
 | 
			
		||||
  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
 | 
			
		||||
  CanCacheStrategyInterface $canCache = null)`
 | 
			
		||||
* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
 | 
			
		||||
 | 
			
		||||
## 3.6.0 - 2013-05-29
 | 
			
		||||
 | 
			
		||||
* ServiceDescription now implements ToArrayInterface
 | 
			
		||||
* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
 | 
			
		||||
* Guzzle can now correctly parse incomplete URLs
 | 
			
		||||
* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
 | 
			
		||||
* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
 | 
			
		||||
* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
 | 
			
		||||
* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
 | 
			
		||||
  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
 | 
			
		||||
  CacheControl header implementation.
 | 
			
		||||
* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
 | 
			
		||||
* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
 | 
			
		||||
* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
 | 
			
		||||
  Guzzle\Http\Curl\RequestMediator
 | 
			
		||||
* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
 | 
			
		||||
* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
 | 
			
		||||
* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
 | 
			
		||||
* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
 | 
			
		||||
* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
 | 
			
		||||
* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
 | 
			
		||||
* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc are managed by Guzzle
 | 
			
		||||
  directly via interfaces
 | 
			
		||||
* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
 | 
			
		||||
  but are a no-op until removed.
 | 
			
		||||
* Most classes that used to require a ``Guzzle\Service\Command\CommandInterface` typehint now request a
 | 
			
		||||
  `Guzzle\Service\Command\ArrayCommandInterface`.
 | 
			
		||||
* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
 | 
			
		||||
  on a request while the request is still being transferred
 | 
			
		||||
* The ability to case-insensitively search for header values
 | 
			
		||||
* Guzzle\Http\Message\Header::hasExactHeader
 | 
			
		||||
* Guzzle\Http\Message\Header::raw. Use getAll()
 | 
			
		||||
* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
 | 
			
		||||
  instead.
 | 
			
		||||
* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
 | 
			
		||||
* Added the ability to cast Model objects to a string to view debug information.
 | 
			
		||||
 | 
			
		||||
## 3.5.0 - 2013-05-13
 | 
			
		||||
 | 
			
		||||
* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
 | 
			
		||||
* Bug: Better cleanup of one-time events accross the board (when an event is meant to fire once, it will now remove
 | 
			
		||||
  itself from the EventDispatcher)
 | 
			
		||||
* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
 | 
			
		||||
* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
 | 
			
		||||
* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
 | 
			
		||||
  non-existent key
 | 
			
		||||
* Bug: All __call() method arguments are now required (helps with mocking frameworks)
 | 
			
		||||
* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
 | 
			
		||||
  to help with refcount based garbage collection of resources created by sending a request
 | 
			
		||||
* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
 | 
			
		||||
* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it'sdeprecated). Use the
 | 
			
		||||
  HistoryPlugin for a history.
 | 
			
		||||
* Added a `responseBody` alias for the `response_body` location
 | 
			
		||||
* Refactored internals to no longer rely on Response::getRequest()
 | 
			
		||||
* HistoryPlugin can now be cast to a string
 | 
			
		||||
* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
 | 
			
		||||
  and responses that are sent over the wire
 | 
			
		||||
* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
 | 
			
		||||
 | 
			
		||||
## 3.4.3 - 2013-04-30
 | 
			
		||||
 | 
			
		||||
* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
 | 
			
		||||
* Added a check to re-extract the temp cacert bundle from the phar before sending each request
 | 
			
		||||
 | 
			
		||||
## 3.4.2 - 2013-04-29
 | 
			
		||||
 | 
			
		||||
* Bug fix: Stream objects now work correctly with "a" and "a+" modes
 | 
			
		||||
* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
 | 
			
		||||
* Bug fix: AsyncPlugin no longer forces HEAD requests
 | 
			
		||||
* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
 | 
			
		||||
* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
 | 
			
		||||
* Setting a response on a request will write to the custom request body from the response body if one is specified
 | 
			
		||||
* LogPlugin now writes to php://output when STDERR is undefined
 | 
			
		||||
* Added the ability to set multiple POST files for the same key in a single call
 | 
			
		||||
* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
 | 
			
		||||
* Added the ability to queue CurlExceptions to the MockPlugin
 | 
			
		||||
* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
 | 
			
		||||
* Configuration loading now allows remote files
 | 
			
		||||
 | 
			
		||||
## 3.4.1 - 2013-04-16
 | 
			
		||||
 | 
			
		||||
* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
 | 
			
		||||
  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
 | 
			
		||||
* Exceptions are now properly grouped when sending requests in parallel
 | 
			
		||||
* Redirects are now properly aggregated when a multi transaction fails
 | 
			
		||||
* Redirects now set the response on the original object even in the event of a failure
 | 
			
		||||
* Bug fix: Model names are now properly set even when using $refs
 | 
			
		||||
* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
 | 
			
		||||
* Added support for oauth_callback in OAuth signatures
 | 
			
		||||
* Added support for oauth_verifier in OAuth signatures
 | 
			
		||||
* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
 | 
			
		||||
 | 
			
		||||
## 3.4.0 - 2013-04-11
 | 
			
		||||
 | 
			
		||||
* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289
 | 
			
		||||
* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
 | 
			
		||||
* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
 | 
			
		||||
* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
 | 
			
		||||
* Bug fix: Added `number` type to service descriptions.
 | 
			
		||||
* Bug fix: empty parameters are removed from an OAuth signature
 | 
			
		||||
* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
 | 
			
		||||
* Bug fix: Fixed "array to string" error when validating a union of types in a service description
 | 
			
		||||
* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
 | 
			
		||||
* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
 | 
			
		||||
* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
 | 
			
		||||
* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
 | 
			
		||||
* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
 | 
			
		||||
  the Content-Type can be determined based on the entity body or the path of the request.
 | 
			
		||||
* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
 | 
			
		||||
* Added support for a PSR-3 LogAdapter.
 | 
			
		||||
* Added a `command.after_prepare` event
 | 
			
		||||
* Added `oauth_callback` parameter to the OauthPlugin
 | 
			
		||||
* Added the ability to create a custom stream class when using a stream factory
 | 
			
		||||
* Added a CachingEntityBody decorator
 | 
			
		||||
* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
 | 
			
		||||
* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
 | 
			
		||||
* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
 | 
			
		||||
* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
 | 
			
		||||
  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
 | 
			
		||||
  POST fields or files (the latter is only used when emulating a form POST in the browser).
 | 
			
		||||
* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
 | 
			
		||||
 | 
			
		||||
## 3.3.1 - 2013-03-10
 | 
			
		||||
 | 
			
		||||
* Added the ability to create PHP streaming responses from HTTP requests
 | 
			
		||||
* Bug fix: Running any filters when parsing response headers with service descriptions
 | 
			
		||||
* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
 | 
			
		||||
* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
 | 
			
		||||
  response location visitors.
 | 
			
		||||
* Bug fix: Removed the possibility of creating configuration files with circular dependencies
 | 
			
		||||
* RequestFactory::create() now uses the key of a POST file when setting the POST file name
 | 
			
		||||
* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
 | 
			
		||||
 | 
			
		||||
## 3.3.0 - 2013-03-03
 | 
			
		||||
 | 
			
		||||
* A large number of performance optimizations have been made
 | 
			
		||||
* Bug fix: Added 'wb' as a valid write mode for streams
 | 
			
		||||
* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
 | 
			
		||||
* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
 | 
			
		||||
* BC: Removed `Guzzle\Http\Utils` class
 | 
			
		||||
* BC: Setting a service description on a client will no longer modify the client's command factories.
 | 
			
		||||
* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
 | 
			
		||||
  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
 | 
			
		||||
* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
 | 
			
		||||
  lowercase
 | 
			
		||||
* Operation parameter objects are now lazy loaded internally
 | 
			
		||||
* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
 | 
			
		||||
* Added support for instantiating responseType=class responseClass classes. Classes must implement
 | 
			
		||||
  `Guzzle\Service\Command\ResponseClassInterface`
 | 
			
		||||
* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
 | 
			
		||||
  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
 | 
			
		||||
  JSON is an array
 | 
			
		||||
* Added support for nested renaming of JSON models (rename sentAs to name)
 | 
			
		||||
* CachePlugin
 | 
			
		||||
    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
 | 
			
		||||
    * Debug headers can now added to cached response in the CachePlugin
 | 
			
		||||
 | 
			
		||||
## 3.2.0 - 2013-02-14
 | 
			
		||||
 | 
			
		||||
* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
 | 
			
		||||
* URLs with no path no longer contain a "/" by default
 | 
			
		||||
* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
 | 
			
		||||
* BadResponseException no longer includes the full request and response message
 | 
			
		||||
* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
 | 
			
		||||
* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
 | 
			
		||||
* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
 | 
			
		||||
* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
 | 
			
		||||
* xmlEncoding can now be customized for the XML declaration of a XML service description operation
 | 
			
		||||
* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
 | 
			
		||||
  aggregation and no longer uses callbacks
 | 
			
		||||
* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
 | 
			
		||||
* Bug fix: Filters were not always invoked for array service description parameters
 | 
			
		||||
* Bug fix: Redirects now use a target response body rather than a temporary response body
 | 
			
		||||
* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
 | 
			
		||||
* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
 | 
			
		||||
 | 
			
		||||
## 3.1.2 - 2013-01-27
 | 
			
		||||
 | 
			
		||||
* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
 | 
			
		||||
  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
 | 
			
		||||
* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
 | 
			
		||||
* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
 | 
			
		||||
* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
 | 
			
		||||
* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
 | 
			
		||||
 | 
			
		||||
## 3.1.1 - 2013-01-20
 | 
			
		||||
 | 
			
		||||
* Adding wildcard support to Guzzle\Common\Collection::getPath()
 | 
			
		||||
* Adding alias support to ServiceBuilder configs
 | 
			
		||||
* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
 | 
			
		||||
 | 
			
		||||
## 3.1.0 - 2013-01-12
 | 
			
		||||
 | 
			
		||||
* BC: CurlException now extends from RequestException rather than BadResponseException
 | 
			
		||||
* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
 | 
			
		||||
* Added getData to ServiceDescriptionInterface
 | 
			
		||||
* Added context array to RequestInterface::setState()
 | 
			
		||||
* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
 | 
			
		||||
* Bug: Adding required content-type when JSON request visitor adds JSON to a command
 | 
			
		||||
* Bug: Fixing the serialization of a service description with custom data
 | 
			
		||||
* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
 | 
			
		||||
  an array of successful and failed responses
 | 
			
		||||
* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
 | 
			
		||||
* Added Guzzle\Http\IoEmittingEntityBody
 | 
			
		||||
* Moved command filtration from validators to location visitors
 | 
			
		||||
* Added `extends` attributes to service description parameters
 | 
			
		||||
* Added getModels to ServiceDescriptionInterface
 | 
			
		||||
 | 
			
		||||
## 3.0.7 - 2012-12-19
 | 
			
		||||
 | 
			
		||||
* Fixing phar detection when forcing a cacert to system if null or true
 | 
			
		||||
* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
 | 
			
		||||
* Cleaning up `Guzzle\Common\Collection::inject` method
 | 
			
		||||
* Adding a response_body location to service descriptions
 | 
			
		||||
 | 
			
		||||
## 3.0.6 - 2012-12-09
 | 
			
		||||
 | 
			
		||||
* CurlMulti performance improvements
 | 
			
		||||
* Adding setErrorResponses() to Operation
 | 
			
		||||
* composer.json tweaks
 | 
			
		||||
 | 
			
		||||
## 3.0.5 - 2012-11-18
 | 
			
		||||
 | 
			
		||||
* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
 | 
			
		||||
* Bug: Response body can now be a string containing "0"
 | 
			
		||||
* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
 | 
			
		||||
* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
 | 
			
		||||
* Added support for XML attributes in service description responses
 | 
			
		||||
* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
 | 
			
		||||
* Added better mimetype guessing to requests and post files
 | 
			
		||||
 | 
			
		||||
## 3.0.4 - 2012-11-11
 | 
			
		||||
 | 
			
		||||
* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
 | 
			
		||||
* Bug: Cookies can now be added that have a name, domain, or value set to "0"
 | 
			
		||||
* Bug: Using the system cacert bundle when using the Phar
 | 
			
		||||
* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
 | 
			
		||||
* Enhanced cookie jar de-duplication
 | 
			
		||||
* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
 | 
			
		||||
* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
 | 
			
		||||
* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
 | 
			
		||||
 | 
			
		||||
## 3.0.3 - 2012-11-04
 | 
			
		||||
 | 
			
		||||
* Implementing redirects in PHP rather than cURL
 | 
			
		||||
* Added PECL URI template extension and using as default parser if available
 | 
			
		||||
* Bug: Fixed Content-Length parsing of Response factory
 | 
			
		||||
* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
 | 
			
		||||
* Adding ToArrayInterface throughout library
 | 
			
		||||
* Fixing OauthPlugin to create unique nonce values per request
 | 
			
		||||
 | 
			
		||||
## 3.0.2 - 2012-10-25
 | 
			
		||||
 | 
			
		||||
* Magic methods are enabled by default on clients
 | 
			
		||||
* Magic methods return the result of a command
 | 
			
		||||
* Service clients no longer require a base_url option in the factory
 | 
			
		||||
* Bug: Fixed an issue with URI templates where null template variables were being expanded
 | 
			
		||||
 | 
			
		||||
## 3.0.1 - 2012-10-22
 | 
			
		||||
 | 
			
		||||
* Models can now be used like regular collection objects by calling filter, map, etc
 | 
			
		||||
* Models no longer require a Parameter structure or initial data in the constructor
 | 
			
		||||
* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
 | 
			
		||||
 | 
			
		||||
## 3.0.0 - 2012-10-15
 | 
			
		||||
 | 
			
		||||
* Rewrote service description format to be based on Swagger
 | 
			
		||||
    * Now based on JSON schema
 | 
			
		||||
    * Added nested input structures and nested response models
 | 
			
		||||
    * Support for JSON and XML input and output models
 | 
			
		||||
    * Renamed `commands` to `operations`
 | 
			
		||||
    * Removed dot class notation
 | 
			
		||||
    * Removed custom types
 | 
			
		||||
* Broke the project into smaller top-level namespaces to be more component friendly
 | 
			
		||||
* Removed support for XML configs and descriptions. Use arrays or JSON files.
 | 
			
		||||
* Removed the Validation component and Inspector
 | 
			
		||||
* Moved all cookie code to Guzzle\Plugin\Cookie
 | 
			
		||||
* Magic methods on a Guzzle\Service\Client now return the command un-executed.
 | 
			
		||||
* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
 | 
			
		||||
* Now shipping with cURL's CA certs and using it by default
 | 
			
		||||
* Added previousResponse() method to response objects
 | 
			
		||||
* No longer sending Accept and Accept-Encoding headers on every request
 | 
			
		||||
* Only sending an Expect header by default when a payload is greater than 1MB
 | 
			
		||||
* Added/moved client options:
 | 
			
		||||
    * curl.blacklist to curl.option.blacklist
 | 
			
		||||
    * Added ssl.certificate_authority
 | 
			
		||||
* Added a Guzzle\Iterator component
 | 
			
		||||
* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
 | 
			
		||||
* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
 | 
			
		||||
* Added a more robust caching plugin
 | 
			
		||||
* Added setBody to response objects
 | 
			
		||||
* Updating LogPlugin to use a more flexible MessageFormatter
 | 
			
		||||
* Added a completely revamped build process
 | 
			
		||||
* Cleaning up Collection class and removing default values from the get method
 | 
			
		||||
* Fixed ZF2 cache adapters
 | 
			
		||||
 | 
			
		||||
## 2.8.8 - 2012-10-15
 | 
			
		||||
 | 
			
		||||
* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
 | 
			
		||||
 | 
			
		||||
## 2.8.7 - 2012-09-30
 | 
			
		||||
 | 
			
		||||
* Bug: Fixed config file aliases for JSON includes
 | 
			
		||||
* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
 | 
			
		||||
* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
 | 
			
		||||
* Bug: Hardening request and response parsing to account for missing parts
 | 
			
		||||
* Bug: Fixed PEAR packaging
 | 
			
		||||
* Bug: Fixed Request::getInfo
 | 
			
		||||
* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
 | 
			
		||||
* Adding the ability for the namespace Iterator factory to look in multiple directories
 | 
			
		||||
* Added more getters/setters/removers from service descriptions
 | 
			
		||||
* Added the ability to remove POST fields from OAuth signatures
 | 
			
		||||
* OAuth plugin now supports 2-legged OAuth
 | 
			
		||||
 | 
			
		||||
## 2.8.6 - 2012-09-05
 | 
			
		||||
 | 
			
		||||
* Added the ability to modify and build service descriptions
 | 
			
		||||
* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
 | 
			
		||||
* Added a `json` parameter location
 | 
			
		||||
* Now allowing dot notation for classes in the CacheAdapterFactory
 | 
			
		||||
* Using the union of two arrays rather than an array_merge when extending service builder services and service params
 | 
			
		||||
* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
 | 
			
		||||
  in service builder config files.
 | 
			
		||||
* Services defined in two different config files that include one another will by default replace the previously
 | 
			
		||||
  defined service, but you can now create services that extend themselves and merge their settings over the previous
 | 
			
		||||
* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
 | 
			
		||||
  '_default' with a default JSON configuration file.
 | 
			
		||||
 | 
			
		||||
## 2.8.5 - 2012-08-29
 | 
			
		||||
 | 
			
		||||
* Bug: Suppressed empty arrays from URI templates
 | 
			
		||||
* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
 | 
			
		||||
* Added support for HTTP responses that do not contain a reason phrase in the start-line
 | 
			
		||||
* AbstractCommand commands are now invokable
 | 
			
		||||
* Added a way to get the data used when signing an Oauth request before a request is sent
 | 
			
		||||
 | 
			
		||||
## 2.8.4 - 2012-08-15
 | 
			
		||||
 | 
			
		||||
* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
 | 
			
		||||
* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
 | 
			
		||||
* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
 | 
			
		||||
* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
 | 
			
		||||
* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
 | 
			
		||||
* Added additional response status codes
 | 
			
		||||
* Removed SSL information from the default User-Agent header
 | 
			
		||||
* DELETE requests can now send an entity body
 | 
			
		||||
* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
 | 
			
		||||
* Added the ability of the MockPlugin to consume mocked request bodies
 | 
			
		||||
* LogPlugin now exposes request and response objects in the extras array
 | 
			
		||||
 | 
			
		||||
## 2.8.3 - 2012-07-30
 | 
			
		||||
 | 
			
		||||
* Bug: Fixed a case where empty POST requests were sent as GET requests
 | 
			
		||||
* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
 | 
			
		||||
* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
 | 
			
		||||
* Added multiple inheritance to service description commands
 | 
			
		||||
* Added an ApiCommandInterface and added ``getParamNames()`` and ``hasParam()``
 | 
			
		||||
* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
 | 
			
		||||
* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
 | 
			
		||||
 | 
			
		||||
## 2.8.2 - 2012-07-24
 | 
			
		||||
 | 
			
		||||
* Bug: Query string values set to 0 are no longer dropped from the query string
 | 
			
		||||
* Bug: A Collection object is no longer created each time a call is made to ``Guzzle\Service\Command\AbstractCommand::getRequestHeaders()``
 | 
			
		||||
* Bug: ``+`` is now treated as an encoded space when parsing query strings
 | 
			
		||||
* QueryString and Collection performance improvements
 | 
			
		||||
* Allowing dot notation for class paths in filters attribute of a service descriptions
 | 
			
		||||
 | 
			
		||||
## 2.8.1 - 2012-07-16
 | 
			
		||||
 | 
			
		||||
* Loosening Event Dispatcher dependency
 | 
			
		||||
* POST redirects can now be customized using CURLOPT_POSTREDIR
 | 
			
		||||
 | 
			
		||||
## 2.8.0 - 2012-07-15
 | 
			
		||||
 | 
			
		||||
* BC: Guzzle\Http\Query
 | 
			
		||||
    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
 | 
			
		||||
    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
 | 
			
		||||
    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
 | 
			
		||||
    * Changed the aggregation functions of QueryString to be static methods
 | 
			
		||||
    * Can now use fromString() with querystrings that have a leading ?
 | 
			
		||||
* cURL configuration values can be specified in service descriptions using ``curl.`` prefixed parameters
 | 
			
		||||
* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
 | 
			
		||||
* Cookies are no longer URL decoded by default
 | 
			
		||||
* Bug: URI template variables set to null are no longer expanded
 | 
			
		||||
 | 
			
		||||
## 2.7.2 - 2012-07-02
 | 
			
		||||
 | 
			
		||||
* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
 | 
			
		||||
* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
 | 
			
		||||
* CachePlugin now allows for a custom request parameter function to check if a request can be cached
 | 
			
		||||
* Bug fix: CachePlugin now only caches GET and HEAD requests by default
 | 
			
		||||
* Bug fix: Using header glue when transferring headers over the wire
 | 
			
		||||
* Allowing deeply nested arrays for composite variables in URI templates
 | 
			
		||||
* Batch divisors can now return iterators or arrays
 | 
			
		||||
 | 
			
		||||
## 2.7.1 - 2012-06-26
 | 
			
		||||
 | 
			
		||||
* Minor patch to update version number in UA string
 | 
			
		||||
* Updating build process
 | 
			
		||||
 | 
			
		||||
## 2.7.0 - 2012-06-25
 | 
			
		||||
 | 
			
		||||
* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
 | 
			
		||||
* BC: Removed magic setX methods from commands
 | 
			
		||||
* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
 | 
			
		||||
* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
 | 
			
		||||
* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
 | 
			
		||||
* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
 | 
			
		||||
* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
 | 
			
		||||
* Added the ability to set POST fields and files in a service description
 | 
			
		||||
* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
 | 
			
		||||
* Adding a command.before_prepare event to clients
 | 
			
		||||
* Added BatchClosureTransfer and BatchClosureDivisor
 | 
			
		||||
* BatchTransferException now includes references to the batch divisor and transfer strategies
 | 
			
		||||
* Fixed some tests so that they pass more reliably
 | 
			
		||||
* Added Guzzle\Common\Log\ArrayLogAdapter
 | 
			
		||||
 | 
			
		||||
## 2.6.6 - 2012-06-10
 | 
			
		||||
 | 
			
		||||
* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
 | 
			
		||||
* BC: Removing Guzzle\Service\Command\CommandSet
 | 
			
		||||
* Adding generic batching system (replaces the batch queue plugin and command set)
 | 
			
		||||
* Updating ZF cache and log adapters and now using ZF's composer repository
 | 
			
		||||
* Bug: Setting the name of each ApiParam when creating through an ApiCommand
 | 
			
		||||
* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
 | 
			
		||||
* Bug: Changed the default cookie header casing back to 'Cookie'
 | 
			
		||||
 | 
			
		||||
## 2.6.5 - 2012-06-03
 | 
			
		||||
 | 
			
		||||
* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
 | 
			
		||||
* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
 | 
			
		||||
* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
 | 
			
		||||
* BC: Renaming methods in the CookieJarInterface
 | 
			
		||||
* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
 | 
			
		||||
* Making the default glue for HTTP headers ';' instead of ','
 | 
			
		||||
* Adding a removeValue to Guzzle\Http\Message\Header
 | 
			
		||||
* Adding getCookies() to request interface.
 | 
			
		||||
* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
 | 
			
		||||
 | 
			
		||||
## 2.6.4 - 2012-05-30
 | 
			
		||||
 | 
			
		||||
* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
 | 
			
		||||
* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
 | 
			
		||||
* Bug: Fixing magic method command calls on clients
 | 
			
		||||
* Bug: Email constraint only validates strings
 | 
			
		||||
* Bug: Aggregate POST fields when POST files are present in curl handle
 | 
			
		||||
* Bug: Fixing default User-Agent header
 | 
			
		||||
* Bug: Only appending or prepending parameters in commands if they are specified
 | 
			
		||||
* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
 | 
			
		||||
* Allowing the use of dot notation for class namespaces when using instance_of constraint
 | 
			
		||||
* Added any_match validation constraint
 | 
			
		||||
* Added an AsyncPlugin
 | 
			
		||||
* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
 | 
			
		||||
* Allowing the result of a command object to be changed
 | 
			
		||||
* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
 | 
			
		||||
 | 
			
		||||
## 2.6.3 - 2012-05-23
 | 
			
		||||
 | 
			
		||||
* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
 | 
			
		||||
* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
 | 
			
		||||
* You can now use an array of data when creating PUT request bodies in the request factory.
 | 
			
		||||
* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
 | 
			
		||||
* [Http] Adding support for Content-Type in multipart POST uploads per upload
 | 
			
		||||
* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
 | 
			
		||||
* Adding more POST data operations for easier manipulation of POST data.
 | 
			
		||||
* You can now set empty POST fields.
 | 
			
		||||
* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
 | 
			
		||||
* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
 | 
			
		||||
* CS updates
 | 
			
		||||
 | 
			
		||||
## 2.6.2 - 2012-05-19
 | 
			
		||||
 | 
			
		||||
* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.
 | 
			
		||||
 | 
			
		||||
## 2.6.1 - 2012-05-19
 | 
			
		||||
 | 
			
		||||
* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
 | 
			
		||||
* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
 | 
			
		||||
* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
 | 
			
		||||
* [BC] Removing Guzzle\Common\XmlElement.
 | 
			
		||||
* All commands, both dynamic and concrete, have ApiCommand objects.
 | 
			
		||||
* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
 | 
			
		||||
* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
 | 
			
		||||
* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
 | 
			
		||||
 | 
			
		||||
## 2.6.0 - 2012-05-15
 | 
			
		||||
 | 
			
		||||
* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
 | 
			
		||||
* [BC] Executing a Command returns the result of the command rather than the command
 | 
			
		||||
* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
 | 
			
		||||
* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
 | 
			
		||||
* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
 | 
			
		||||
* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
 | 
			
		||||
* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
 | 
			
		||||
* [BC] Guzzle\Guzzle is now deprecated
 | 
			
		||||
* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
 | 
			
		||||
* Adding Guzzle\Version class to give version information about Guzzle
 | 
			
		||||
* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
 | 
			
		||||
* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
 | 
			
		||||
* ServiceDescription and ServiceBuilder are now cacheable using similar configs
 | 
			
		||||
* Changing the format of XML and JSON service builder configs.  Backwards compatible.
 | 
			
		||||
* Cleaned up Cookie parsing
 | 
			
		||||
* Trimming the default Guzzle User-Agent header
 | 
			
		||||
* Adding a setOnComplete() method to Commands that is called when a command completes
 | 
			
		||||
* Keeping track of requests that were mocked in the MockPlugin
 | 
			
		||||
* Fixed a caching bug in the CacheAdapterFactory
 | 
			
		||||
* Inspector objects can be injected into a Command object
 | 
			
		||||
* Refactoring a lot of code and tests to be case insensitive when dealing with headers
 | 
			
		||||
* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
 | 
			
		||||
* Adding the ability to set global option overrides to service builder configs
 | 
			
		||||
* Adding the ability to include other service builder config files from within XML and JSON files
 | 
			
		||||
* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
 | 
			
		||||
 | 
			
		||||
## 2.5.0 - 2012-05-08
 | 
			
		||||
 | 
			
		||||
* Major performance improvements
 | 
			
		||||
* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
 | 
			
		||||
* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
 | 
			
		||||
* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
 | 
			
		||||
* Added the ability to passed parameters to all requests created by a client
 | 
			
		||||
* Added callback functionality to the ExponentialBackoffPlugin
 | 
			
		||||
* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
 | 
			
		||||
* Rewinding request stream bodies when retrying requests
 | 
			
		||||
* Exception is thrown when JSON response body cannot be decoded
 | 
			
		||||
* Added configurable magic method calls to clients and commands.  This is off by default.
 | 
			
		||||
* Fixed a defect that added a hash to every parsed URL part
 | 
			
		||||
* Fixed duplicate none generation for OauthPlugin.
 | 
			
		||||
* Emitting an event each time a client is generated by a ServiceBuilder
 | 
			
		||||
* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
 | 
			
		||||
* cache.* request parameters should be renamed to params.cache.*
 | 
			
		||||
* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc). See CurlHandle.
 | 
			
		||||
* Added the ability to disable type validation of service descriptions
 | 
			
		||||
* ServiceDescriptions and ServiceBuilders are now Serializable
 | 
			
		||||
							
								
								
									
										19
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
Copyright (c) 2011 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										57
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
Guzzle, PHP HTTP client and webservice framework
 | 
			
		||||
================================================
 | 
			
		||||
 | 
			
		||||
# This is an old version of Guzzle
 | 
			
		||||
 | 
			
		||||
This repository is for Guzzle 3.x. Guzzle 5.x, the new version of Guzzle, has
 | 
			
		||||
been released and is available at
 | 
			
		||||
[https://github.com/guzzle/guzzle](https://github.com/guzzle/guzzle). The
 | 
			
		||||
documentation for Guzzle version 5+ can be found at
 | 
			
		||||
[http://guzzlephp.org](http://guzzlephp.org).
 | 
			
		||||
 | 
			
		||||
Guzzle 3 is only maintained for bug and security fixes. Guzzle 3 will be EOL
 | 
			
		||||
at some point in late 2015.
 | 
			
		||||
 | 
			
		||||
### About Guzzle 3
 | 
			
		||||
 | 
			
		||||
[](https://packagist.org/packages/guzzle/guzzle)
 | 
			
		||||
 [](http://travis-ci.org/guzzle/guzzle3)
 | 
			
		||||
 | 
			
		||||
- Extremely powerful API provides all the power of cURL with a simple interface.
 | 
			
		||||
- Truly take advantage of HTTP/1.1 with persistent connections, connection pooling, and parallel requests.
 | 
			
		||||
- Service description DSL allows you build awesome web service clients faster.
 | 
			
		||||
- Symfony2 event-based plugin system allows you to completely modify the behavior of a request.
 | 
			
		||||
 | 
			
		||||
Get answers with: [Documentation](http://guzzle3.readthedocs.org/en/latest/), [Forums](https://groups.google.com/forum/?hl=en#!forum/guzzle), IRC ([#guzzlephp](irc://irc.freenode.net/#guzzlephp) @ irc.freenode.net)
 | 
			
		||||
 | 
			
		||||
### Installing via Composer
 | 
			
		||||
 | 
			
		||||
The recommended way to install Guzzle is through [Composer](http://getcomposer.org).
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Install Composer
 | 
			
		||||
curl -sS https://getcomposer.org/installer | php
 | 
			
		||||
 | 
			
		||||
# Add Guzzle as a dependency
 | 
			
		||||
php composer.phar require guzzle/guzzle:~3.9
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
After installing, you need to require Composer's autoloader:
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
require 'vendor/autoload.php';
 | 
			
		||||
```
 | 
			
		||||
## Known Issues
 | 
			
		||||
 | 
			
		||||
1. Problem following a specific redirect: https://github.com/guzzle/guzzle/issues/385.
 | 
			
		||||
   This has been fixed in Guzzle 4/5.
 | 
			
		||||
2. Root XML attributes not serialized in a service description: https://github.com/guzzle/guzzle3/issues/5.
 | 
			
		||||
   This has been fixed in Guzzle 4/5.
 | 
			
		||||
3. Accept-Encoding not preserved when following redirect: https://github.com/guzzle/guzzle3/issues/9
 | 
			
		||||
   Fixed in Guzzle 4/5.
 | 
			
		||||
4. String "Array" Transmitted w/ PostFiles and Duplicate Aggregator: https://github.com/guzzle/guzzle3/issues/10
 | 
			
		||||
   Fixed in Guzzle 4/5.
 | 
			
		||||
5. Recursive model references with array items: https://github.com/guzzle/guzzle3/issues/13
 | 
			
		||||
   Fixed in Guzzle 4/5
 | 
			
		||||
6. String "Array" Transmitted w/ PostFiles and Duplicate Aggregator: https://github.com/guzzle/guzzle3/issues/10
 | 
			
		||||
   Fixed in Guzzle 4/5.
 | 
			
		||||
							
								
								
									
										537
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/UPGRADING.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										537
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/UPGRADING.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,537 @@
 | 
			
		||||
Guzzle Upgrade Guide
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
3.6 to 3.7
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
### Deprecations
 | 
			
		||||
 | 
			
		||||
- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
\Guzzle\Common\Version::$emitWarnings = true;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The following APIs and options have been marked as deprecated:
 | 
			
		||||
 | 
			
		||||
- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.
 | 
			
		||||
- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
 | 
			
		||||
- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
 | 
			
		||||
- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
 | 
			
		||||
- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
 | 
			
		||||
- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
 | 
			
		||||
- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
 | 
			
		||||
- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
 | 
			
		||||
- Marked `Guzzle\Common\Collection::inject()` as deprecated.
 | 
			
		||||
- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use
 | 
			
		||||
  `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or
 | 
			
		||||
  `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`
 | 
			
		||||
 | 
			
		||||
3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational
 | 
			
		||||
request methods. When paired with a client's configuration settings, these options allow you to specify default settings
 | 
			
		||||
for various aspects of a request. Because these options make other previous configuration options redundant, several
 | 
			
		||||
configuration options and methods of a client and AbstractCommand have been deprecated.
 | 
			
		||||
 | 
			
		||||
- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.
 | 
			
		||||
- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.
 | 
			
		||||
- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`
 | 
			
		||||
- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0
 | 
			
		||||
 | 
			
		||||
        $command = $client->getCommand('foo', array(
 | 
			
		||||
            'command.headers' => array('Test' => '123'),
 | 
			
		||||
            'command.response_body' => '/path/to/file'
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
        // Should be changed to:
 | 
			
		||||
 | 
			
		||||
        $command = $client->getCommand('foo', array(
 | 
			
		||||
            'command.request_options' => array(
 | 
			
		||||
                'headers' => array('Test' => '123'),
 | 
			
		||||
                'save_as' => '/path/to/file'
 | 
			
		||||
            )
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
### Interface changes
 | 
			
		||||
 | 
			
		||||
Additions and changes (you will need to update any implementations or subclasses you may have created):
 | 
			
		||||
 | 
			
		||||
- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
 | 
			
		||||
  createRequest, head, delete, put, patch, post, options, prepareRequest
 | 
			
		||||
- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
 | 
			
		||||
- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
 | 
			
		||||
- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
 | 
			
		||||
  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
 | 
			
		||||
  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
 | 
			
		||||
- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
 | 
			
		||||
  default `array()`
 | 
			
		||||
- Added `Guzzle\Stream\StreamInterface::isRepeatable`
 | 
			
		||||
- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
 | 
			
		||||
 | 
			
		||||
The following methods were removed from interfaces. All of these methods are still available in the concrete classes
 | 
			
		||||
that implement them, but you should update your code to use alternative methods:
 | 
			
		||||
 | 
			
		||||
- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
 | 
			
		||||
  `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
 | 
			
		||||
  `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or
 | 
			
		||||
  `$client->setDefaultOption('headers/{header_name}', 'value')`. or
 | 
			
		||||
  `$client->setDefaultOption('headers', array('header_name' => 'value'))`.
 | 
			
		||||
- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.
 | 
			
		||||
- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail.
 | 
			
		||||
- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail.
 | 
			
		||||
- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.
 | 
			
		||||
- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin.
 | 
			
		||||
- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin.
 | 
			
		||||
- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin.
 | 
			
		||||
 | 
			
		||||
### Cache plugin breaking changes
 | 
			
		||||
 | 
			
		||||
- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
 | 
			
		||||
  CacheStorageInterface. These two objects and interface will be removed in a future version.
 | 
			
		||||
- Always setting X-cache headers on cached responses
 | 
			
		||||
- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
 | 
			
		||||
- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
 | 
			
		||||
  $request, Response $response);`
 | 
			
		||||
- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
 | 
			
		||||
- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
 | 
			
		||||
- Added `CacheStorageInterface::purge($url)`
 | 
			
		||||
- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
 | 
			
		||||
  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
 | 
			
		||||
  CanCacheStrategyInterface $canCache = null)`
 | 
			
		||||
- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
 | 
			
		||||
 | 
			
		||||
3.5 to 3.6
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
 | 
			
		||||
* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
 | 
			
		||||
* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
 | 
			
		||||
  For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().
 | 
			
		||||
  Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.
 | 
			
		||||
* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
 | 
			
		||||
  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
 | 
			
		||||
  CacheControl header implementation.
 | 
			
		||||
* Moved getLinks() from Response to just be used on a Link header object.
 | 
			
		||||
 | 
			
		||||
If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the
 | 
			
		||||
HeaderInterface (e.g. toArray(), getAll(), etc).
 | 
			
		||||
 | 
			
		||||
### Interface changes
 | 
			
		||||
 | 
			
		||||
* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
 | 
			
		||||
* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
 | 
			
		||||
* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
 | 
			
		||||
  Guzzle\Http\Curl\RequestMediator
 | 
			
		||||
* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
 | 
			
		||||
* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
 | 
			
		||||
* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
 | 
			
		||||
 | 
			
		||||
### Removed deprecated functions
 | 
			
		||||
 | 
			
		||||
* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
 | 
			
		||||
* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
 | 
			
		||||
 | 
			
		||||
### Deprecations
 | 
			
		||||
 | 
			
		||||
* The ability to case-insensitively search for header values
 | 
			
		||||
* Guzzle\Http\Message\Header::hasExactHeader
 | 
			
		||||
* Guzzle\Http\Message\Header::raw. Use getAll()
 | 
			
		||||
* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
 | 
			
		||||
  instead.
 | 
			
		||||
 | 
			
		||||
### Other changes
 | 
			
		||||
 | 
			
		||||
* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
 | 
			
		||||
* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc are managed by Guzzle
 | 
			
		||||
  directly via interfaces
 | 
			
		||||
* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
 | 
			
		||||
  but are a no-op until removed.
 | 
			
		||||
* Most classes that used to require a ``Guzzle\Service\Command\CommandInterface` typehint now request a
 | 
			
		||||
  `Guzzle\Service\Command\ArrayCommandInterface`.
 | 
			
		||||
* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
 | 
			
		||||
  on a request while the request is still being transferred
 | 
			
		||||
* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
 | 
			
		||||
 | 
			
		||||
3.3 to 3.4
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs.
 | 
			
		||||
 | 
			
		||||
3.2 to 3.3
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
### Response::getEtag() quote stripping removed
 | 
			
		||||
 | 
			
		||||
`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header
 | 
			
		||||
 | 
			
		||||
### Removed `Guzzle\Http\Utils`
 | 
			
		||||
 | 
			
		||||
The `Guzzle\Http\Utils` class was removed. This class was only used for testing.
 | 
			
		||||
 | 
			
		||||
### Stream wrapper and type
 | 
			
		||||
 | 
			
		||||
`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to lowercase.
 | 
			
		||||
 | 
			
		||||
### curl.emit_io became emit_io
 | 
			
		||||
 | 
			
		||||
Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the
 | 
			
		||||
'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
 | 
			
		||||
 | 
			
		||||
3.1 to 3.2
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
### CurlMulti is no longer reused globally
 | 
			
		||||
 | 
			
		||||
Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added
 | 
			
		||||
to a single client can pollute requests dispatched from other clients.
 | 
			
		||||
 | 
			
		||||
If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the
 | 
			
		||||
ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is
 | 
			
		||||
created.
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
$multi = new Guzzle\Http\Curl\CurlMulti();
 | 
			
		||||
$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json');
 | 
			
		||||
$builder->addListener('service_builder.create_client', function ($event) use ($multi) {
 | 
			
		||||
    $event['client']->setCurlMulti($multi);
 | 
			
		||||
}
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### No default path
 | 
			
		||||
 | 
			
		||||
URLs no longer have a default path value of '/' if no path was specified.
 | 
			
		||||
 | 
			
		||||
Before:
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
$request = $client->get('http://www.foo.com');
 | 
			
		||||
echo $request->getUrl();
 | 
			
		||||
// >> http://www.foo.com/
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
After:
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
$request = $client->get('http://www.foo.com');
 | 
			
		||||
echo $request->getUrl();
 | 
			
		||||
// >> http://www.foo.com
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Less verbose BadResponseException
 | 
			
		||||
 | 
			
		||||
The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and
 | 
			
		||||
response information. You can, however, get access to the request and response object by calling `getRequest()` or
 | 
			
		||||
`getResponse()` on the exception object.
 | 
			
		||||
 | 
			
		||||
### Query parameter aggregation
 | 
			
		||||
 | 
			
		||||
Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a
 | 
			
		||||
setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is
 | 
			
		||||
responsible for handling the aggregation of multi-valued query string variables into a flattened hash.
 | 
			
		||||
 | 
			
		||||
2.8 to 3.x
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
### Guzzle\Service\Inspector
 | 
			
		||||
 | 
			
		||||
Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig`
 | 
			
		||||
 | 
			
		||||
**Before**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Service\Inspector;
 | 
			
		||||
 | 
			
		||||
class YourClient extends \Guzzle\Service\Client
 | 
			
		||||
{
 | 
			
		||||
    public static function factory($config = array())
 | 
			
		||||
    {
 | 
			
		||||
        $default = array();
 | 
			
		||||
        $required = array('base_url', 'username', 'api_key');
 | 
			
		||||
        $config = Inspector::fromConfig($config, $default, $required);
 | 
			
		||||
 | 
			
		||||
        $client = new self(
 | 
			
		||||
            $config->get('base_url'),
 | 
			
		||||
            $config->get('username'),
 | 
			
		||||
            $config->get('api_key')
 | 
			
		||||
        );
 | 
			
		||||
        $client->setConfig($config);
 | 
			
		||||
 | 
			
		||||
        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
 | 
			
		||||
 | 
			
		||||
        return $client;
 | 
			
		||||
    }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**After**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Common\Collection;
 | 
			
		||||
 | 
			
		||||
class YourClient extends \Guzzle\Service\Client
 | 
			
		||||
{
 | 
			
		||||
    public static function factory($config = array())
 | 
			
		||||
    {
 | 
			
		||||
        $default = array();
 | 
			
		||||
        $required = array('base_url', 'username', 'api_key');
 | 
			
		||||
        $config = Collection::fromConfig($config, $default, $required);
 | 
			
		||||
 | 
			
		||||
        $client = new self(
 | 
			
		||||
            $config->get('base_url'),
 | 
			
		||||
            $config->get('username'),
 | 
			
		||||
            $config->get('api_key')
 | 
			
		||||
        );
 | 
			
		||||
        $client->setConfig($config);
 | 
			
		||||
 | 
			
		||||
        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
 | 
			
		||||
 | 
			
		||||
        return $client;
 | 
			
		||||
    }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Convert XML Service Descriptions to JSON
 | 
			
		||||
 | 
			
		||||
**Before**
 | 
			
		||||
 | 
			
		||||
```xml
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<client>
 | 
			
		||||
    <commands>
 | 
			
		||||
        <!-- Groups -->
 | 
			
		||||
        <command name="list_groups" method="GET" uri="groups.json">
 | 
			
		||||
            <doc>Get a list of groups</doc>
 | 
			
		||||
        </command>
 | 
			
		||||
        <command name="search_groups" method="GET" uri='search.json?query="{{query}} type:group"'>
 | 
			
		||||
            <doc>Uses a search query to get a list of groups</doc>
 | 
			
		||||
            <param name="query" type="string" required="true" />
 | 
			
		||||
        </command>
 | 
			
		||||
        <command name="create_group" method="POST" uri="groups.json">
 | 
			
		||||
            <doc>Create a group</doc>
 | 
			
		||||
            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
 | 
			
		||||
            <param name="Content-Type" location="header" static="application/json"/>
 | 
			
		||||
        </command>
 | 
			
		||||
        <command name="delete_group" method="DELETE" uri="groups/{{id}}.json">
 | 
			
		||||
            <doc>Delete a group by ID</doc>
 | 
			
		||||
            <param name="id" type="integer" required="true"/>
 | 
			
		||||
        </command>
 | 
			
		||||
        <command name="get_group" method="GET" uri="groups/{{id}}.json">
 | 
			
		||||
            <param name="id" type="integer" required="true"/>
 | 
			
		||||
        </command>
 | 
			
		||||
        <command name="update_group" method="PUT" uri="groups/{{id}}.json">
 | 
			
		||||
            <doc>Update a group</doc>
 | 
			
		||||
            <param name="id" type="integer" required="true"/>
 | 
			
		||||
            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
 | 
			
		||||
            <param name="Content-Type" location="header" static="application/json"/>
 | 
			
		||||
        </command>
 | 
			
		||||
    </commands>
 | 
			
		||||
</client>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**After**
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
    "name":       "Zendesk REST API v2",
 | 
			
		||||
    "apiVersion": "2012-12-31",
 | 
			
		||||
    "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users",
 | 
			
		||||
    "operations": {
 | 
			
		||||
        "list_groups":  {
 | 
			
		||||
            "httpMethod":"GET",
 | 
			
		||||
            "uri":       "groups.json",
 | 
			
		||||
            "summary":   "Get a list of groups"
 | 
			
		||||
        },
 | 
			
		||||
        "search_groups":{
 | 
			
		||||
            "httpMethod":"GET",
 | 
			
		||||
            "uri":       "search.json?query=\"{query} type:group\"",
 | 
			
		||||
            "summary":   "Uses a search query to get a list of groups",
 | 
			
		||||
            "parameters":{
 | 
			
		||||
                "query":{
 | 
			
		||||
                    "location":   "uri",
 | 
			
		||||
                    "description":"Zendesk Search Query",
 | 
			
		||||
                    "type":       "string",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "create_group": {
 | 
			
		||||
            "httpMethod":"POST",
 | 
			
		||||
            "uri":       "groups.json",
 | 
			
		||||
            "summary":   "Create a group",
 | 
			
		||||
            "parameters":{
 | 
			
		||||
                "data":        {
 | 
			
		||||
                    "type":       "array",
 | 
			
		||||
                    "location":   "body",
 | 
			
		||||
                    "description":"Group JSON",
 | 
			
		||||
                    "filters":    "json_encode",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                },
 | 
			
		||||
                "Content-Type":{
 | 
			
		||||
                    "type":    "string",
 | 
			
		||||
                    "location":"header",
 | 
			
		||||
                    "static":  "application/json"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "delete_group": {
 | 
			
		||||
            "httpMethod":"DELETE",
 | 
			
		||||
            "uri":       "groups/{id}.json",
 | 
			
		||||
            "summary":   "Delete a group",
 | 
			
		||||
            "parameters":{
 | 
			
		||||
                "id":{
 | 
			
		||||
                    "location":   "uri",
 | 
			
		||||
                    "description":"Group to delete by ID",
 | 
			
		||||
                    "type":       "integer",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "get_group":    {
 | 
			
		||||
            "httpMethod":"GET",
 | 
			
		||||
            "uri":       "groups/{id}.json",
 | 
			
		||||
            "summary":   "Get a ticket",
 | 
			
		||||
            "parameters":{
 | 
			
		||||
                "id":{
 | 
			
		||||
                    "location":   "uri",
 | 
			
		||||
                    "description":"Group to get by ID",
 | 
			
		||||
                    "type":       "integer",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "update_group": {
 | 
			
		||||
            "httpMethod":"PUT",
 | 
			
		||||
            "uri":       "groups/{id}.json",
 | 
			
		||||
            "summary":   "Update a group",
 | 
			
		||||
            "parameters":{
 | 
			
		||||
                "id":          {
 | 
			
		||||
                    "location":   "uri",
 | 
			
		||||
                    "description":"Group to update by ID",
 | 
			
		||||
                    "type":       "integer",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                },
 | 
			
		||||
                "data":        {
 | 
			
		||||
                    "type":       "array",
 | 
			
		||||
                    "location":   "body",
 | 
			
		||||
                    "description":"Group JSON",
 | 
			
		||||
                    "filters":    "json_encode",
 | 
			
		||||
                    "required":   true
 | 
			
		||||
                },
 | 
			
		||||
                "Content-Type":{
 | 
			
		||||
                    "type":    "string",
 | 
			
		||||
                    "location":"header",
 | 
			
		||||
                    "static":  "application/json"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Guzzle\Service\Description\ServiceDescription
 | 
			
		||||
 | 
			
		||||
Commands are now called Operations
 | 
			
		||||
 | 
			
		||||
**Before**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Service\Description\ServiceDescription;
 | 
			
		||||
 | 
			
		||||
$sd = new ServiceDescription();
 | 
			
		||||
$sd->getCommands();     // @returns ApiCommandInterface[]
 | 
			
		||||
$sd->hasCommand($name);
 | 
			
		||||
$sd->getCommand($name); // @returns ApiCommandInterface|null
 | 
			
		||||
$sd->addCommand($command); // @param ApiCommandInterface $command
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**After**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Service\Description\ServiceDescription;
 | 
			
		||||
 | 
			
		||||
$sd = new ServiceDescription();
 | 
			
		||||
$sd->getOperations();           // @returns OperationInterface[]
 | 
			
		||||
$sd->hasOperation($name);
 | 
			
		||||
$sd->getOperation($name);       // @returns OperationInterface|null
 | 
			
		||||
$sd->addOperation($operation);  // @param OperationInterface $operation
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Guzzle\Common\Inflection\Inflector
 | 
			
		||||
 | 
			
		||||
Namespace is now `Guzzle\Inflection\Inflector`
 | 
			
		||||
 | 
			
		||||
### Guzzle\Http\Plugin
 | 
			
		||||
 | 
			
		||||
Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.
 | 
			
		||||
 | 
			
		||||
### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log
 | 
			
		||||
 | 
			
		||||
Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively.
 | 
			
		||||
 | 
			
		||||
**Before**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Common\Log\ClosureLogAdapter;
 | 
			
		||||
use Guzzle\Http\Plugin\LogPlugin;
 | 
			
		||||
 | 
			
		||||
/** @var \Guzzle\Http\Client */
 | 
			
		||||
$client;
 | 
			
		||||
 | 
			
		||||
// $verbosity is an integer indicating desired message verbosity level
 | 
			
		||||
$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**After**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Log\ClosureLogAdapter;
 | 
			
		||||
use Guzzle\Log\MessageFormatter;
 | 
			
		||||
use Guzzle\Plugin\Log\LogPlugin;
 | 
			
		||||
 | 
			
		||||
/** @var \Guzzle\Http\Client */
 | 
			
		||||
$client;
 | 
			
		||||
 | 
			
		||||
// $format is a string indicating desired message format -- @see MessageFormatter
 | 
			
		||||
$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Guzzle\Http\Plugin\CurlAuthPlugin
 | 
			
		||||
 | 
			
		||||
Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`.
 | 
			
		||||
 | 
			
		||||
### Guzzle\Http\Plugin\ExponentialBackoffPlugin
 | 
			
		||||
 | 
			
		||||
Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes.
 | 
			
		||||
 | 
			
		||||
**Before**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Http\Plugin\ExponentialBackoffPlugin;
 | 
			
		||||
 | 
			
		||||
$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(
 | 
			
		||||
        ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
$client->addSubscriber($backoffPlugin);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
**After**
 | 
			
		||||
 | 
			
		||||
```php
 | 
			
		||||
use Guzzle\Plugin\Backoff\BackoffPlugin;
 | 
			
		||||
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
 | 
			
		||||
 | 
			
		||||
// Use convenient factory method instead -- see implementation for ideas of what
 | 
			
		||||
// you can do with chaining backoff strategies
 | 
			
		||||
$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(
 | 
			
		||||
        HttpBackoffStrategy::getDefaultFailureCodes(), array(429)
 | 
			
		||||
    ));
 | 
			
		||||
$client->addSubscriber($backoffPlugin);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Known Issues
 | 
			
		||||
 | 
			
		||||
#### [BUG] Accept-Encoding header behavior changed unintentionally.
 | 
			
		||||
 | 
			
		||||
(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)
 | 
			
		||||
 | 
			
		||||
In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to
 | 
			
		||||
properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.
 | 
			
		||||
See issue #217 for a workaround, or use a version containing the fix.
 | 
			
		||||
							
								
								
									
										45
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/build.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/build.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project name="guzzle" default="test">
 | 
			
		||||
    <!-- set local values, like git location -->
 | 
			
		||||
    <property file="phing/build.properties.dist" override="true" />
 | 
			
		||||
    <property file="phing/build.properties" override="true" />
 | 
			
		||||
 | 
			
		||||
    <property name="dir.output" value="${project.basedir}/build/artifacts" />
 | 
			
		||||
    <property name="dir.imports" value="${project.basedir}/phing/imports" />
 | 
			
		||||
    <property name="dir.bin" value="${project.basedir}/bin" />
 | 
			
		||||
    <property name="repo.dir" value="${project.basedir}" />
 | 
			
		||||
 | 
			
		||||
    <import file="${dir.imports}/dependencies.xml"/>
 | 
			
		||||
    <import file="${dir.imports}/deploy.xml"/>
 | 
			
		||||
 | 
			
		||||
    <target name="composer-lint" description="lint-check composer.json only">
 | 
			
		||||
        <composerlint dir="${project.basedir}/src" file="{$project.basedir}/composer.json" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="test" description="Run unit tests">
 | 
			
		||||
        <exec passthru="true" command="vendor/bin/phpunit" checkReturn="true" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="build-init" description="Initialize local phing properties">
 | 
			
		||||
        <copy file="phing/build.properties.dist" tofile="phing/build.properties" overwrite="false" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="clean">
 | 
			
		||||
        <delete dir="${dir.output}"/>
 | 
			
		||||
        <delete dir="${project.basedir}/build/pearwork"/>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="prepare" depends="clean,build-init">
 | 
			
		||||
        <mkdir dir="${dir.output}"/>
 | 
			
		||||
        <mkdir dir="${dir.output}/logs" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="coverage" depends="prepare">
 | 
			
		||||
        <exec passthru="true" command="vendor/bin/phpunit --coverage-html=${dir.output}/coverage" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="view-coverage">
 | 
			
		||||
        <exec passthru="true" command="open ${dir.output}/coverage/index.html" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										82
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "guzzle/guzzle",
 | 
			
		||||
    "type": "library",
 | 
			
		||||
    "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
 | 
			
		||||
    "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
 | 
			
		||||
    "homepage": "http://guzzlephp.org/",
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
 | 
			
		||||
    "authors": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Michael Dowling",
 | 
			
		||||
            "email": "mtdowling@gmail.com",
 | 
			
		||||
            "homepage": "https://github.com/mtdowling"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Guzzle Community",
 | 
			
		||||
            "homepage": "https://github.com/guzzle/guzzle/contributors"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    "replace": {
 | 
			
		||||
        "guzzle/batch": "self.version",
 | 
			
		||||
        "guzzle/cache": "self.version",
 | 
			
		||||
        "guzzle/common": "self.version",
 | 
			
		||||
        "guzzle/http": "self.version",
 | 
			
		||||
        "guzzle/inflection": "self.version",
 | 
			
		||||
        "guzzle/iterator": "self.version",
 | 
			
		||||
        "guzzle/log": "self.version",
 | 
			
		||||
        "guzzle/parser": "self.version",
 | 
			
		||||
        "guzzle/plugin": "self.version",
 | 
			
		||||
        "guzzle/plugin-async": "self.version",
 | 
			
		||||
        "guzzle/plugin-backoff": "self.version",
 | 
			
		||||
        "guzzle/plugin-cache": "self.version",
 | 
			
		||||
        "guzzle/plugin-cookie": "self.version",
 | 
			
		||||
        "guzzle/plugin-curlauth": "self.version",
 | 
			
		||||
        "guzzle/plugin-error-response": "self.version",
 | 
			
		||||
        "guzzle/plugin-history": "self.version",
 | 
			
		||||
        "guzzle/plugin-log": "self.version",
 | 
			
		||||
        "guzzle/plugin-md5": "self.version",
 | 
			
		||||
        "guzzle/plugin-mock": "self.version",
 | 
			
		||||
        "guzzle/plugin-oauth": "self.version",
 | 
			
		||||
        "guzzle/service": "self.version",
 | 
			
		||||
        "guzzle/stream": "self.version"
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": ">=5.3.3",
 | 
			
		||||
        "ext-curl": "*",
 | 
			
		||||
        "symfony/event-dispatcher": "~2.1"
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-0": {
 | 
			
		||||
            "Guzzle": "src/",
 | 
			
		||||
            "Guzzle\\Tests": "tests/"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "suggest": {
 | 
			
		||||
        "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "test": "phpunit"
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        "doctrine/cache": "~1.3",
 | 
			
		||||
        "symfony/class-loader": "~2.1",
 | 
			
		||||
        "monolog/monolog": "~1.0",
 | 
			
		||||
        "psr/log": "~1.0",
 | 
			
		||||
        "zendframework/zend-cache": "2.*,<2.3",
 | 
			
		||||
        "zendframework/zend-log": "2.*,<2.3",
 | 
			
		||||
        "phpunit/phpunit": "3.7.*"
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "extra": {
 | 
			
		||||
        "branch-alias": {
 | 
			
		||||
            "dev-master": "3.9-dev"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										153
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,153 @@
 | 
			
		||||
# Makefile for Sphinx documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# You can set these variables from the command line.
 | 
			
		||||
SPHINXOPTS    =
 | 
			
		||||
SPHINXBUILD   = sphinx-build
 | 
			
		||||
PAPER         =
 | 
			
		||||
BUILDDIR      = _build
 | 
			
		||||
 | 
			
		||||
# Internal variables.
 | 
			
		||||
PAPEROPT_a4     = -D latex_paper_size=a4
 | 
			
		||||
PAPEROPT_letter = -D latex_paper_size=letter
 | 
			
		||||
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
 | 
			
		||||
# the i18n builder cannot share the environment and doctrees with the others
 | 
			
		||||
I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
 | 
			
		||||
 | 
			
		||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
 | 
			
		||||
 | 
			
		||||
help:
 | 
			
		||||
	@echo "Please use \`make <target>' where <target> is one of"
 | 
			
		||||
	@echo "  html       to make standalone HTML files"
 | 
			
		||||
	@echo "  dirhtml    to make HTML files named index.html in directories"
 | 
			
		||||
	@echo "  singlehtml to make a single large HTML file"
 | 
			
		||||
	@echo "  pickle     to make pickle files"
 | 
			
		||||
	@echo "  json       to make JSON files"
 | 
			
		||||
	@echo "  htmlhelp   to make HTML files and a HTML help project"
 | 
			
		||||
	@echo "  qthelp     to make HTML files and a qthelp project"
 | 
			
		||||
	@echo "  devhelp    to make HTML files and a Devhelp project"
 | 
			
		||||
	@echo "  epub       to make an epub"
 | 
			
		||||
	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
 | 
			
		||||
	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
 | 
			
		||||
	@echo "  text       to make text files"
 | 
			
		||||
	@echo "  man        to make manual pages"
 | 
			
		||||
	@echo "  texinfo    to make Texinfo files"
 | 
			
		||||
	@echo "  info       to make Texinfo files and run them through makeinfo"
 | 
			
		||||
	@echo "  gettext    to make PO message catalogs"
 | 
			
		||||
	@echo "  changes    to make an overview of all changed/added/deprecated items"
 | 
			
		||||
	@echo "  linkcheck  to check all external links for integrity"
 | 
			
		||||
	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-rm -rf $(BUILDDIR)/*
 | 
			
		||||
 | 
			
		||||
html:
 | 
			
		||||
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
 | 
			
		||||
 | 
			
		||||
dirhtml:
 | 
			
		||||
	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
 | 
			
		||||
 | 
			
		||||
singlehtml:
 | 
			
		||||
	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
 | 
			
		||||
 | 
			
		||||
pickle:
 | 
			
		||||
	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can process the pickle files."
 | 
			
		||||
 | 
			
		||||
json:
 | 
			
		||||
	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can process the JSON files."
 | 
			
		||||
 | 
			
		||||
htmlhelp:
 | 
			
		||||
	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can run HTML Help Workshop with the" \
 | 
			
		||||
	      ".hhp project file in $(BUILDDIR)/htmlhelp."
 | 
			
		||||
 | 
			
		||||
qthelp:
 | 
			
		||||
	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
 | 
			
		||||
	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
 | 
			
		||||
	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Guzzle.qhcp"
 | 
			
		||||
	@echo "To view the help file:"
 | 
			
		||||
	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Guzzle.qhc"
 | 
			
		||||
 | 
			
		||||
devhelp:
 | 
			
		||||
	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished."
 | 
			
		||||
	@echo "To view the help file:"
 | 
			
		||||
	@echo "# mkdir -p $$HOME/.local/share/devhelp/Guzzle"
 | 
			
		||||
	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Guzzle"
 | 
			
		||||
	@echo "# devhelp"
 | 
			
		||||
 | 
			
		||||
epub:
 | 
			
		||||
	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
 | 
			
		||||
 | 
			
		||||
latex:
 | 
			
		||||
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
 | 
			
		||||
	@echo "Run \`make' in that directory to run these through (pdf)latex" \
 | 
			
		||||
	      "(use \`make latexpdf' here to do that automatically)."
 | 
			
		||||
 | 
			
		||||
latexpdf:
 | 
			
		||||
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 | 
			
		||||
	@echo "Running LaTeX files through pdflatex..."
 | 
			
		||||
	$(MAKE) -C $(BUILDDIR)/latex all-pdf
 | 
			
		||||
	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 | 
			
		||||
 | 
			
		||||
text:
 | 
			
		||||
	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The text files are in $(BUILDDIR)/text."
 | 
			
		||||
 | 
			
		||||
man:
 | 
			
		||||
	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
 | 
			
		||||
 | 
			
		||||
texinfo:
 | 
			
		||||
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
 | 
			
		||||
	@echo "Run \`make' in that directory to run these through makeinfo" \
 | 
			
		||||
	      "(use \`make info' here to do that automatically)."
 | 
			
		||||
 | 
			
		||||
info:
 | 
			
		||||
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
 | 
			
		||||
	@echo "Running Texinfo files through makeinfo..."
 | 
			
		||||
	make -C $(BUILDDIR)/texinfo info
 | 
			
		||||
	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
 | 
			
		||||
 | 
			
		||||
gettext:
 | 
			
		||||
	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
 | 
			
		||||
 | 
			
		||||
changes:
 | 
			
		||||
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "The overview file is in $(BUILDDIR)/changes."
 | 
			
		||||
 | 
			
		||||
linkcheck:
 | 
			
		||||
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Link check complete; look for any errors in the above output " \
 | 
			
		||||
	      "or in $(BUILDDIR)/linkcheck/output.txt."
 | 
			
		||||
 | 
			
		||||
doctest:
 | 
			
		||||
	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
 | 
			
		||||
	@echo "Testing of doctests in the sources finished, look at the " \
 | 
			
		||||
	      "results in $(BUILDDIR)/doctest/output.txt."
 | 
			
		||||
							
								
								
									
										176
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_downloads/guzzle-schema-1.0.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_downloads/guzzle-schema-1.0.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,176 @@
 | 
			
		||||
{
 | 
			
		||||
    "additionalProperties": true,
 | 
			
		||||
    "name": {
 | 
			
		||||
        "type": "string",
 | 
			
		||||
        "description": "Name of the web service"
 | 
			
		||||
    },
 | 
			
		||||
    "apiVersion": {
 | 
			
		||||
        "type": ["string", "number"],
 | 
			
		||||
        "description": "Version identifier that the service description is compatible with"
 | 
			
		||||
    },
 | 
			
		||||
    "baseUrl": {
 | 
			
		||||
        "type": "string",
 | 
			
		||||
        "description": "Base URL of the web service. Any relative URI specified in an operation will be merged with the baseUrl using the process defined in RFC 2396"
 | 
			
		||||
    },
 | 
			
		||||
    "basePath": {
 | 
			
		||||
        "type": "string",
 | 
			
		||||
        "description": "Alias of baseUrl"
 | 
			
		||||
    },
 | 
			
		||||
    "_description": {
 | 
			
		||||
        "type": "string",
 | 
			
		||||
        "description": "Short summary of the web service. This is actually called 'description' but this JSON schema wont validate using just description."
 | 
			
		||||
    },
 | 
			
		||||
    "operations": {
 | 
			
		||||
        "description": "Operations of the web service",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
            "extends": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Extend from another operation by name. The parent operation must be defined before the child."
 | 
			
		||||
            },
 | 
			
		||||
            "httpMethod": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "HTTP method used with the operation (e.g. GET, POST, PUT, DELETE, PATCH, etc)"
 | 
			
		||||
            },
 | 
			
		||||
            "uri": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "URI of the operation. The uri attribute can contain URI templates. The variables of the URI template are parameters of the operation with a location value of uri"
 | 
			
		||||
            },
 | 
			
		||||
            "summary": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Short summary of what the operation does"
 | 
			
		||||
            },
 | 
			
		||||
            "class": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Custom class to instantiate instead of the default Guzzle\\Service\\Command\\OperationCommand"
 | 
			
		||||
            },
 | 
			
		||||
            "responseClass": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "This is what is returned from the method. Can be a primitive, class name, or model name."
 | 
			
		||||
            },
 | 
			
		||||
            "responseNotes": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "A description of the response returned by the operation"
 | 
			
		||||
            },
 | 
			
		||||
            "responseType": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "The type of response that the operation creates. If not specified, this value will be automatically inferred based on whether or not there is a model matching the name, if a matching class name is found, or set to 'primitive' by default.",
 | 
			
		||||
                "enum": [ "primitive", "class", "model", "documentation" ]
 | 
			
		||||
            },
 | 
			
		||||
            "deprecated": {
 | 
			
		||||
                "type": "boolean",
 | 
			
		||||
                "description": "Whether or not the operation is deprecated"
 | 
			
		||||
            },
 | 
			
		||||
            "errorResponses": {
 | 
			
		||||
                "description": "Errors that could occur while executing the operation",
 | 
			
		||||
                "type": "array",
 | 
			
		||||
                "items": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                        "code": {
 | 
			
		||||
                            "type": "number",
 | 
			
		||||
                            "description": "HTTP response status code of the error"
 | 
			
		||||
                        },
 | 
			
		||||
                        "reason": {
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "description": "Response reason phrase or description of the error"
 | 
			
		||||
                        },
 | 
			
		||||
                        "class": {
 | 
			
		||||
                            "type": "string",
 | 
			
		||||
                            "description": "A custom exception class that would be thrown if the error is encountered"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "data": {
 | 
			
		||||
                "type": "object",
 | 
			
		||||
                "additionalProperties": "true"
 | 
			
		||||
            },
 | 
			
		||||
            "parameters": {
 | 
			
		||||
                "$ref": "parameters",
 | 
			
		||||
                "description": "Parameters of the operation. Parameters are used to define how input data is serialized into a HTTP request."
 | 
			
		||||
            },
 | 
			
		||||
            "additionalParameters": {
 | 
			
		||||
              "$ref": "parameters",
 | 
			
		||||
              "description": "Validation and serialization rules for any parameter supplied to the operation that was not explicitly defined."
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "models": {
 | 
			
		||||
        "description": "Schema models that can be referenced throughout the service description. Models can be used to define how an HTTP response is parsed into a Guzzle\\Service\\Resource\\Model object.",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
            "$ref": "parameters",
 | 
			
		||||
            "description": "Parameters of the model. When a model is referenced in a responseClass attribute of an operation, parameters define how a HTTP response message is parsed into a Guzzle\\Service\\Resource\\Model."
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "includes": {
 | 
			
		||||
        "description": "Service description files to include and extend from (can be a .json, .js, or .php file)",
 | 
			
		||||
        "type": "array",
 | 
			
		||||
        "items": {
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "pattern": ".+\\.(js|json|php)$"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "definitions": {
 | 
			
		||||
        "parameters": {
 | 
			
		||||
            "extends": "http://json-schema.org/schema",
 | 
			
		||||
            "id": "parameters",
 | 
			
		||||
            "name": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Unique name of the parameter"
 | 
			
		||||
            },
 | 
			
		||||
            "type": {
 | 
			
		||||
                "type": ["string", "array"],
 | 
			
		||||
                "description": "Type of variable (string, number, integer, boolean, object, array, numeric, null, any). Types are using for validation and determining the structure of a parameter. You can use a union type by providing an array of simple types. If one of the union types matches the provided value, then the value is valid."
 | 
			
		||||
            },
 | 
			
		||||
            "instanceOf": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "When the type is an object, you can specify the class that the object must implement"
 | 
			
		||||
            },
 | 
			
		||||
            "required": {
 | 
			
		||||
                "type": "boolean",
 | 
			
		||||
                "description": "Whether or not the parameter is required"
 | 
			
		||||
            },
 | 
			
		||||
            "default": {
 | 
			
		||||
                "description": "Default value to use if no value is supplied"
 | 
			
		||||
            },
 | 
			
		||||
            "static": {
 | 
			
		||||
                "type": "bool",
 | 
			
		||||
                "description": "Set to true to specify that the parameter value cannot be changed from the default setting"
 | 
			
		||||
            },
 | 
			
		||||
            "description": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Documentation of the parameter"
 | 
			
		||||
            },
 | 
			
		||||
            "location": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "The location of a request used to apply a parameter. Custom locations can be registered with a command, but the defaults are uri, query, statusCode, reasonPhrase, header, body, json, xml, postField, postFile, responseBody"
 | 
			
		||||
            },
 | 
			
		||||
            "sentAs": {
 | 
			
		||||
                "type": "string",
 | 
			
		||||
                "description": "Specifies how the data being modeled is sent over the wire. For example, you may wish to include certain headers in a response model that have a normalized casing of FooBar, but the actual header is x-foo-bar. In this case, sentAs would be set to x-foo-bar."
 | 
			
		||||
            },
 | 
			
		||||
            "filters": {
 | 
			
		||||
                "type": "array",
 | 
			
		||||
                "description": "Array of static method names to to run a parameter value through. Each value in the array must be a string containing the full class path to a static method or an array of complex filter information. You can specify static methods of classes using the full namespace class name followed by ‘::’ (e.g. FooBar::baz()). Some filters require arguments in order to properly filter a value. For complex filters, use a hash containing a ‘method’ key pointing to a static method, and an ‘args’ key containing an array of positional arguments to pass to the method. Arguments can contain keywords that are replaced when filtering a value: '@value‘ is replaced with the value being validated, '@api‘ is replaced with the Parameter object.",
 | 
			
		||||
                "items": {
 | 
			
		||||
                    "type": ["string", {
 | 
			
		||||
                        "object": {
 | 
			
		||||
                            "properties": {
 | 
			
		||||
                                "method": {
 | 
			
		||||
                                    "type": "string",
 | 
			
		||||
                                    "description": "PHP function to call",
 | 
			
		||||
                                    "required": true
 | 
			
		||||
                                },
 | 
			
		||||
                                "args": {
 | 
			
		||||
                                    "type": "array"
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }]
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/guzzle-icon.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/guzzle-icon.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 803 B  | 
							
								
								
									
										122
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/homepage.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/homepage.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
/* Hero unit on homepage */
 | 
			
		||||
 | 
			
		||||
.hero-unit h1 {
 | 
			
		||||
  font-size: 49px;
 | 
			
		||||
  margin-bottom: 12px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hero-unit {
 | 
			
		||||
  padding: 40px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hero-unit p {
 | 
			
		||||
  font-size: 17px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.masthead img {
 | 
			
		||||
  float: left;
 | 
			
		||||
  margin-right: 17px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hero-unit ul li {
 | 
			
		||||
  margin-left: 220px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hero-unit .buttons {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.jumbotron {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  padding: 40px 0;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075);
 | 
			
		||||
  background: #00312F;
 | 
			
		||||
  background: -moz-linear-gradient(45deg, #002F31 0%, #335A6D 100%);
 | 
			
		||||
  background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#00312D), color-stop(100%,#33566D));
 | 
			
		||||
  background: -webkit-linear-gradient(45deg, #020031 0%,#334F6D 100%);
 | 
			
		||||
  background: -o-linear-gradient(45deg, #002D31 0%,#334D6D 100%);
 | 
			
		||||
  background: -ms-linear-gradient(45deg, #002F31 0%,#33516D 100%);
 | 
			
		||||
  background: linear-gradient(45deg, #020031 0%,#33516D 100%);
 | 
			
		||||
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 );
 | 
			
		||||
  -webkit-box-shadow: inset 0 3px 7px rgba(0, 0, 0, .2), inset 0 -3px 7px rgba(0, 0, 0, .2);
 | 
			
		||||
  -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2);
 | 
			
		||||
  box-shadow: inset 0 3px 7px rgba(0, 0, 0, .2), inset 0 -3px 7px rgba(0, 0, 0, .2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.jumbotron h1 {
 | 
			
		||||
  font-size: 80px;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  letter-spacing: -1px;
 | 
			
		||||
  line-height: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.jumbotron p {
 | 
			
		||||
  font-size: 24px;
 | 
			
		||||
  font-weight: 300;
 | 
			
		||||
  line-height: 1.25;
 | 
			
		||||
  margin-bottom: 30px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.masthead {
 | 
			
		||||
  padding: 40px 0 30px;
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  margin-top: -19px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.masthead h1 {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.masthead p {
 | 
			
		||||
  font-size: 40px;
 | 
			
		||||
  font-weight: 200;
 | 
			
		||||
  line-height: 1.25;
 | 
			
		||||
  margin: 12px 0 0 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.masthead .btn {
 | 
			
		||||
  padding: 19px 24px;
 | 
			
		||||
  font-size: 24px;
 | 
			
		||||
  font-weight: 200;
 | 
			
		||||
  border: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Social bar on homepage */
 | 
			
		||||
 | 
			
		||||
.social {
 | 
			
		||||
  padding: 2px 0;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  background-color: #f5f5f5;
 | 
			
		||||
  border-top: 1px solid #fff;
 | 
			
		||||
  border-bottom: 1px solid #ddd;
 | 
			
		||||
  margin: 0 0 20px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.social ul {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.social-buttons {
 | 
			
		||||
  margin-left: 0;
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  padding-left: 0;
 | 
			
		||||
  list-style: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.social-buttons li {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  padding: 5px 8px;
 | 
			
		||||
  line-height: 1;
 | 
			
		||||
  *display: inline;
 | 
			
		||||
  *zoom: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.center-announcement {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
  background-color: rgb(238, 243, 255);
 | 
			
		||||
  border-radius: 8px;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  margin: 24px 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/logo.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/logo.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 242 KiB  | 
							
								
								
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
.com {
 | 
			
		||||
  color: #93A1A1;
 | 
			
		||||
}
 | 
			
		||||
.lit {
 | 
			
		||||
  color: #195F91;
 | 
			
		||||
}
 | 
			
		||||
.pun, .opn, .clo {
 | 
			
		||||
  color: #93A1A1;
 | 
			
		||||
}
 | 
			
		||||
.fun {
 | 
			
		||||
  color: #DC322F;
 | 
			
		||||
}
 | 
			
		||||
.str, .atv {
 | 
			
		||||
  color: #DD1144;
 | 
			
		||||
}
 | 
			
		||||
.kwd, .linenums .tag {
 | 
			
		||||
  color: #1E347B;
 | 
			
		||||
}
 | 
			
		||||
.typ, .atn, .dec, .var {
 | 
			
		||||
  color: teal;
 | 
			
		||||
}
 | 
			
		||||
.pln {
 | 
			
		||||
  color: #48484C;
 | 
			
		||||
}
 | 
			
		||||
.prettyprint {
 | 
			
		||||
  background-color: #F7F7F9;
 | 
			
		||||
  border: 1px solid #E1E1E8;
 | 
			
		||||
  padding: 8px;
 | 
			
		||||
}
 | 
			
		||||
.prettyprint.linenums {
 | 
			
		||||
  box-shadow: 40px 0 0 #FBFBFC inset, 41px 0 0 #ECECF0 inset;
 | 
			
		||||
}
 | 
			
		||||
ol.linenums {
 | 
			
		||||
  margin: 0 0 0 33px;
 | 
			
		||||
}
 | 
			
		||||
ol.linenums li {
 | 
			
		||||
  color: #BEBEC5;
 | 
			
		||||
  line-height: 18px;
 | 
			
		||||
  padding-left: 12px;
 | 
			
		||||
  text-shadow: 0 1px 0 #FFFFFF;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
 | 
			
		||||
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
 | 
			
		||||
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
 | 
			
		||||
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
 | 
			
		||||
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
 | 
			
		||||
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
 | 
			
		||||
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
 | 
			
		||||
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
 | 
			
		||||
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
 | 
			
		||||
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
 | 
			
		||||
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
 | 
			
		||||
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
 | 
			
		||||
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
 | 
			
		||||
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
 | 
			
		||||
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
 | 
			
		||||
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
 | 
			
		||||
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
 | 
			
		||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
 | 
			
		||||
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
 | 
			
		||||
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
 | 
			
		||||
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
 | 
			
		||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
 | 
			
		||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
 | 
			
		||||
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
 | 
			
		||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
 | 
			
		||||
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
 | 
			
		||||
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
 | 
			
		||||
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
 | 
			
		||||
							
								
								
									
										106
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
<script type="text/javascript" src="{{ pathto('_static/prettify.js', 1) }}"></script>
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="{{ pathto('_static/prettify.css', 1) }}" />
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="{{ pathto('_static/homepage.css', 1) }}" />
 | 
			
		||||
 | 
			
		||||
<div class="jumbotron masthead">
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    <img src="{{ pathto('_static/logo.png', 1) }}" alt="guzzle" width="199" height="260" />
 | 
			
		||||
    <h1>Guzzle</h1>
 | 
			
		||||
    <p>Guzzle is a PHP HTTP client<br />& framework for building RESTful web service clients.</p>
 | 
			
		||||
    <p>
 | 
			
		||||
      <a class="btn btn-primary btn-lg" href="https://github.com/guzzle/guzzle">View Guzzle on GitHub</a>
 | 
			
		||||
      <a class="btn btn-default btn-lg" href="{{ pathto('docs') }}">Read the docs</a>
 | 
			
		||||
    </p>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="social">
 | 
			
		||||
  <ul class="social-buttons">
 | 
			
		||||
    <li>
 | 
			
		||||
      <iframe src="http://ghbtns.com/github-btn.html?user=guzzle&repo=guzzle&type=watch&count=true"
 | 
			
		||||
          allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
 | 
			
		||||
    </li>
 | 
			
		||||
    <li>
 | 
			
		||||
      <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://guzzlephp.org" data-text="Guzzle, PHP HTTP client & framework for building RESTful web service clients" data-via="mtdowling">Tweet</a>
 | 
			
		||||
      <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
 | 
			
		||||
    </li>
 | 
			
		||||
    <li>
 | 
			
		||||
      <a href="https://twitter.com/mtdowling" class="twitter-follow-button" data-show-count="false">Follow @mtdowling</a>
 | 
			
		||||
      <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
 | 
			
		||||
    </li>
 | 
			
		||||
  </ul>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="container">
 | 
			
		||||
 | 
			
		||||
  <h1>Introducing Guzzle</h1>
 | 
			
		||||
 | 
			
		||||
  <p>Guzzle takes the pain out of sending HTTP requests and the redundancy out of creating web service clients. It's
 | 
			
		||||
    a framework that includes the tools needed to create a robust web service client, including:
 | 
			
		||||
    Service descriptions for defining the inputs and outputs of an API, resource iterators for traversing
 | 
			
		||||
    paginated resources, batching for sending a large number of requests as efficiently as possible.</p>
 | 
			
		||||
 | 
			
		||||
  <ul>
 | 
			
		||||
    <li>All the power of cURL with a simple interface.</li>
 | 
			
		||||
    <li>Persistent connections and parallel requests.</li>
 | 
			
		||||
    <li>Streams request and response bodies</li>
 | 
			
		||||
    <li><a href="{{ pathto('webservice-client/guzzle-service-descriptions') }}">Service descriptions</a> for quickly building clients.</li>
 | 
			
		||||
    <li>Powered by the Symfony2 EventDispatcher.</li>
 | 
			
		||||
    <li>Use all of the code or only <a href="https://packagist.org/packages/guzzle/">specific components</a>.</li>
 | 
			
		||||
    <li><a href="{{ pathto('plugins/plugins-overview') }}">Plugins</a> for caching, logging, OAuth, mocks, and more</li>
 | 
			
		||||
    <li>Includes a custom node.js webserver to <a href="{{ pathto('testing/unit-testing') }}">test your clients</a>.</li>
 | 
			
		||||
  </ul>
 | 
			
		||||
 | 
			
		||||
  <div class="center-announcement">
 | 
			
		||||
    Guzzle is now part of Drupal 8 core and powers the official <a href="https://github.com/aws/aws-sdk-php">AWS SDK for PHP</a>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <h2>GitHub Example</h2>
 | 
			
		||||
 | 
			
		||||
  <pre class="prettyprint"><?php
 | 
			
		||||
require_once 'vendor/autoload.php';
 | 
			
		||||
use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
// Create a client and provide a base URL
 | 
			
		||||
$client = new Client('https://api.github.com');
 | 
			
		||||
// Create a request with basic Auth
 | 
			
		||||
$request = $client->get('/user')->setAuth('user', 'pass');
 | 
			
		||||
// Send the request and get the response
 | 
			
		||||
$response = $request->send();
 | 
			
		||||
echo $response->getBody();
 | 
			
		||||
// >>> {"type":"User", ...
 | 
			
		||||
echo $response->getHeader('Content-Length');
 | 
			
		||||
// >>> 792
 | 
			
		||||
</pre>
 | 
			
		||||
 | 
			
		||||
    <h2>Twitter Example</h2>
 | 
			
		||||
    <pre class="prettyprint"><?php
 | 
			
		||||
// Create a client to work with the Twitter API
 | 
			
		||||
$client = new Client('https://api.twitter.com/{version}', array(
 | 
			
		||||
    'version' => '1.1'
 | 
			
		||||
));
 | 
			
		||||
 | 
			
		||||
// Sign all requests with the OauthPlugin
 | 
			
		||||
$client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin(array(
 | 
			
		||||
    'consumer_key'  => '***',
 | 
			
		||||
    'consumer_secret' => '***',
 | 
			
		||||
    'token'       => '***',
 | 
			
		||||
    'token_secret'  => '***'
 | 
			
		||||
)));
 | 
			
		||||
 | 
			
		||||
echo $client->get('statuses/user_timeline.json')->send()->getBody();
 | 
			
		||||
// >>> {"public_gists":6,"type":"User" ...
 | 
			
		||||
 | 
			
		||||
// Create a tweet using POST
 | 
			
		||||
$request = $client->post('statuses/update.json', null, array(
 | 
			
		||||
    'status' => 'Tweeted with Guzzle, http://guzzlephp.org'
 | 
			
		||||
));
 | 
			
		||||
 | 
			
		||||
// Send the request and parse the JSON response into an array
 | 
			
		||||
$data = $request->send()->json();
 | 
			
		||||
echo $data['text'];
 | 
			
		||||
// >>> Tweeted with Guzzle, http://t.co/kngJMfRk
 | 
			
		||||
</pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript">prettyPrint();</script>
 | 
			
		||||
							
								
								
									
										0
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/leftbar.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/leftbar.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/nav_links.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/nav_links.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
<li><a href="{{ pathto('docs') }}">Docs</a></li>
 | 
			
		||||
<li><a href="http://guzzlephp.org/api/index.html">API</a></li>
 | 
			
		||||
<li><a href="https://github.com/guzzle/guzzle">GitHub</a></li>
 | 
			
		||||
<li><a href="https://groups.google.com/forum/?hl=en#!forum/guzzle">Forum</a></li>
 | 
			
		||||
<li><a href="irc:irc.freenode.com/#guzzlephp">IRC</a></li>
 | 
			
		||||
							
								
								
									
										183
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/batching/batching.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/batching/batching.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
			
		||||
========
 | 
			
		||||
Batching
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
Guzzle provides a fairly generic and very customizable batching framework that allows developers to efficiently
 | 
			
		||||
transfer requests in parallel.
 | 
			
		||||
 | 
			
		||||
Sending requests and commands in parallel
 | 
			
		||||
-----------------------------------------
 | 
			
		||||
 | 
			
		||||
You can send HTTP requests in parallel by passing an array of ``Guzzle\Http\Message\RequestInterface`` objects to
 | 
			
		||||
``Guzzle\Http\Client::send()``:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $responses = $client->send(array(
 | 
			
		||||
        $client->get('http://www.example.com/foo'),
 | 
			
		||||
        $client->get('http://www.example.com/baz')
 | 
			
		||||
        $client->get('http://www.example.com/bar')
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
You can send commands in parallel by passing an array of ``Guzzle\Service\Command\CommandInterface`` objects
 | 
			
		||||
``Guzzle\Service\Client::execute()``:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $commands = $client->execute(array(
 | 
			
		||||
        $client->getCommand('foo'),
 | 
			
		||||
        $client->getCommand('baz'),
 | 
			
		||||
        $client->getCommand('bar')
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
These approaches work well for most use-cases.  When you need more control over the requests that are sent in
 | 
			
		||||
parallel or you need to send a large number of requests, you need to use the functionality provided in the
 | 
			
		||||
``Guzzle\Batch`` namespace.
 | 
			
		||||
 | 
			
		||||
Batching overview
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
The batch object, ``Guzzle\Batch\Batch``, is a queue.  You add requests to the queue until you are ready to transfer
 | 
			
		||||
all of the requests.  In order to efficiently transfer the items in the queue, the batch object delegates the
 | 
			
		||||
responsibility of dividing the queue into manageable parts to a divisor (``Guzzle\Batch\BatchDivisorInterface``).
 | 
			
		||||
The batch object then iterates over each array of items created by the divisor and sends them to the batch object's
 | 
			
		||||
``Guzzle\Batch\BatchTransferInterface``.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\Batch;
 | 
			
		||||
    use Guzzle\Http\BatchRequestTransfer;
 | 
			
		||||
 | 
			
		||||
    // BatchRequestTransfer acts as both the divisor and transfer strategy
 | 
			
		||||
    $transferStrategy = new BatchRequestTransfer(10);
 | 
			
		||||
    $divisorStrategy = $transferStrategy;
 | 
			
		||||
 | 
			
		||||
    $batch = new Batch($transferStrategy, $divisorStrategy);
 | 
			
		||||
 | 
			
		||||
    // Add some requests to the batch queue
 | 
			
		||||
    $batch->add($request1)
 | 
			
		||||
        ->add($request2)
 | 
			
		||||
        ->add($request3);
 | 
			
		||||
 | 
			
		||||
    // Flush the queue and retrieve the flushed items
 | 
			
		||||
    $arrayOfTransferredRequests = $batch->flush();
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    You might find that your transfer strategy will need to act as both the divisor and transfer strategy.
 | 
			
		||||
 | 
			
		||||
Using the BatchBuilder
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
The ``Guzzle\Batch\BatchBuilder`` makes it easier to create batch objects.  The batch builder also provides an easier
 | 
			
		||||
way to add additional behaviors to your batch object.
 | 
			
		||||
 | 
			
		||||
Transferring requests
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ``Guzzle\Http\BatchRequestTransfer`` class efficiently transfers HTTP requests in parallel by grouping batches of
 | 
			
		||||
requests by the curl_multi handle that is used to transfer the requests.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\BatchBuilder;
 | 
			
		||||
 | 
			
		||||
    $batch = BatchBuilder::factory()
 | 
			
		||||
        ->transferRequests(10)
 | 
			
		||||
        ->build();
 | 
			
		||||
 | 
			
		||||
Transferring commands
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ``Guzzle\Service\Command\BatchCommandTransfer`` class efficiently transfers service commands by grouping commands
 | 
			
		||||
by the client that is used to transfer them.  You can add commands to a batch object that are transferred by different
 | 
			
		||||
clients, and the batch will handle the rest.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\BatchBuilder;
 | 
			
		||||
 | 
			
		||||
    $batch = BatchBuilder::factory()
 | 
			
		||||
        ->transferCommands(10)
 | 
			
		||||
        ->build();
 | 
			
		||||
 | 
			
		||||
    $batch->add($client->getCommand('foo'))
 | 
			
		||||
        ->add($client->getCommand('baz'))
 | 
			
		||||
        ->add($client->getCommand('bar'));
 | 
			
		||||
 | 
			
		||||
    $commands = $batch->flush();
 | 
			
		||||
 | 
			
		||||
Batch behaviors
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
You can add various behaviors to your batch that allow for more customizable transfers.
 | 
			
		||||
 | 
			
		||||
Automatically flushing a queue
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Use the ``Guzzle\Batch\FlushingBatch`` decorator when you want to pump a large number of items into a batch queue and
 | 
			
		||||
have the queue automatically flush when the size of the queue reaches a certain threshold.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\BatchBuilder;
 | 
			
		||||
 | 
			
		||||
    $batch = BatchBuilder::factory()
 | 
			
		||||
        ->transferRequests(10)
 | 
			
		||||
        ->autoFlushAt(10)
 | 
			
		||||
        ->build();
 | 
			
		||||
 | 
			
		||||
Batch builder method: ``autoFlushAt($threshold)``
 | 
			
		||||
 | 
			
		||||
Notifying on flush
 | 
			
		||||
~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Use the ``Guzzle\Batch\NotifyingBatch`` decorator if you want a function to be notified each time the batch queue is
 | 
			
		||||
flushed.  This is useful when paired with the flushing batch decorator.  Pass a callable to the ``notify()`` method of
 | 
			
		||||
a batch builder to use this decorator with the builder.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\BatchBuilder;
 | 
			
		||||
 | 
			
		||||
    $batch = BatchBuilder::factory()
 | 
			
		||||
        ->transferRequests(10)
 | 
			
		||||
        ->autoFlushAt(10)
 | 
			
		||||
        ->notify(function (array $transferredItems) {
 | 
			
		||||
            echo 'Transferred ' . count($transferredItems) . "items\n";
 | 
			
		||||
        })
 | 
			
		||||
        ->build();
 | 
			
		||||
 | 
			
		||||
Batch builder method:: ``notify(callable $callback)``
 | 
			
		||||
 | 
			
		||||
Keeping a history
 | 
			
		||||
~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Use the ``Guzzle\Batch\HistoryBatch`` decorator if you want to maintain a history of all the items transferred with
 | 
			
		||||
the batch queue.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Batch\BatchBuilder;
 | 
			
		||||
 | 
			
		||||
    $batch = BatchBuilder::factory()
 | 
			
		||||
        ->transferRequests(10)
 | 
			
		||||
        ->keepHistory()
 | 
			
		||||
        ->build();
 | 
			
		||||
 | 
			
		||||
After transferring items, you can use the ``getHistory()`` of a batch to retrieve an array of transferred items.  Be
 | 
			
		||||
sure to periodically clear the history using ``clearHistory()``.
 | 
			
		||||
 | 
			
		||||
Batch builder method: ``keepHistory()``
 | 
			
		||||
 | 
			
		||||
Exception buffering
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Use the ``Guzzle\Batch\ExceptionBufferingBatch`` decorator to buffer exceptions during a transfer so that you can
 | 
			
		||||
transfer as many items as possible then deal with the errored batches after the transfer completes.  After transfer,
 | 
			
		||||
use the ``getExceptions()`` method of a batch to retrieve an array of
 | 
			
		||||
``Guzzle\Batch\Exception\BatchTransferException`` objects.  You can use these exceptions to attempt to retry the
 | 
			
		||||
failed batches.  Be sure to clear the buffered exceptions when you are done with them by using the
 | 
			
		||||
``clearExceptions()`` method.
 | 
			
		||||
 | 
			
		||||
Batch builder method: ``bufferExceptions()``
 | 
			
		||||
							
								
								
									
										94
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/conf.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/conf.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
import sys, os
 | 
			
		||||
from sphinx.highlighting import lexers
 | 
			
		||||
from pygments.lexers.web import PhpLexer
 | 
			
		||||
 | 
			
		||||
lexers['php'] = PhpLexer(startinline=True, linenos=1)
 | 
			
		||||
lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
 | 
			
		||||
primary_domain = 'php'
 | 
			
		||||
 | 
			
		||||
# -- General configuration -----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
extensions = []
 | 
			
		||||
templates_path = ['_templates']
 | 
			
		||||
source_suffix = '.rst'
 | 
			
		||||
master_doc = 'index'
 | 
			
		||||
 | 
			
		||||
project = u'Guzzle'
 | 
			
		||||
copyright = u'2012, Michael Dowling'
 | 
			
		||||
version = '3.0.0'
 | 
			
		||||
release = '3.0.0'
 | 
			
		||||
 | 
			
		||||
exclude_patterns = ['_build']
 | 
			
		||||
 | 
			
		||||
# -- Options for HTML output ---------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# The name for this set of Sphinx documents.  If None, it defaults to
 | 
			
		||||
# "<project> v<release> documentation".
 | 
			
		||||
html_title = "Guzzle documentation"
 | 
			
		||||
html_short_title = "Guzzle"
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain custom static files (such as style sheets) here,
 | 
			
		||||
# relative to this directory. They are copied after the builtin static files,
 | 
			
		||||
# so a file named "default.css" will overwrite the builtin "default.css".
 | 
			
		||||
html_static_path = ['_static']
 | 
			
		||||
 | 
			
		||||
# Custom sidebar templates, maps document names to template names.
 | 
			
		||||
html_sidebars = {
 | 
			
		||||
    '**':       ['localtoc.html', 'leftbar.html', 'searchbox.html']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Output file base name for HTML help builder.
 | 
			
		||||
htmlhelp_basename = 'Guzzledoc'
 | 
			
		||||
 | 
			
		||||
# -- Guzzle Sphinx theme setup ------------------------------------------------
 | 
			
		||||
 | 
			
		||||
sys.path.insert(0, '/Users/dowling/projects/guzzle_sphinx_theme')
 | 
			
		||||
 | 
			
		||||
import guzzle_sphinx_theme
 | 
			
		||||
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
 | 
			
		||||
html_theme_path = guzzle_sphinx_theme.html_theme_path()
 | 
			
		||||
html_theme = 'guzzle_sphinx_theme'
 | 
			
		||||
 | 
			
		||||
# Guzzle theme options (see theme.conf for more information)
 | 
			
		||||
html_theme_options = {
 | 
			
		||||
    "index_template": "index.html",
 | 
			
		||||
    "project_nav_name": "Guzzle",
 | 
			
		||||
    "github_user": "guzzle",
 | 
			
		||||
    "github_repo": "guzzle",
 | 
			
		||||
    "disqus_comments_shortname": "guzzle",
 | 
			
		||||
    "google_analytics_account": "UA-22752917-1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# -- Options for LaTeX output --------------------------------------------------
 | 
			
		||||
 | 
			
		||||
latex_elements = {}
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into LaTeX files. List of tuples
 | 
			
		||||
# (source start file, target name, title, author, documentclass [howto/manual]).
 | 
			
		||||
latex_documents = [
 | 
			
		||||
  ('index', 'Guzzle.tex', u'Guzzle Documentation',
 | 
			
		||||
   u'Michael Dowling', 'manual'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# -- Options for manual page output --------------------------------------------
 | 
			
		||||
 | 
			
		||||
# One entry per manual page. List of tuples
 | 
			
		||||
# (source start file, name, description, authors, manual section).
 | 
			
		||||
man_pages = [
 | 
			
		||||
    ('index', 'guzzle', u'Guzzle Documentation',
 | 
			
		||||
     [u'Michael Dowling'], 1)
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# If true, show URL addresses after external links.
 | 
			
		||||
#man_show_urls = False
 | 
			
		||||
 | 
			
		||||
# -- Options for Texinfo output ------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into Texinfo files. List of tuples
 | 
			
		||||
# (source start file, target name, title, author,
 | 
			
		||||
#  dir menu entry, description, category)
 | 
			
		||||
texinfo_documents = [
 | 
			
		||||
  ('index', 'Guzzle', u'Guzzle Documentation',
 | 
			
		||||
   u'Michael Dowling', 'Guzzle', 'One line description of project.',
 | 
			
		||||
   'Miscellaneous'),
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										73
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/docs.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/docs.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
.. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
 | 
			
		||||
 | 
			
		||||
====================
 | 
			
		||||
Guzzle Documentation
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
Getting started
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   getting-started/overview
 | 
			
		||||
   getting-started/installation
 | 
			
		||||
   getting-started/faq
 | 
			
		||||
 | 
			
		||||
The HTTP client
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   http-client/client
 | 
			
		||||
   http-client/request
 | 
			
		||||
   http-client/response
 | 
			
		||||
   http-client/entity-bodies
 | 
			
		||||
   http-client/http-redirects
 | 
			
		||||
   http-client/uri-templates
 | 
			
		||||
 | 
			
		||||
Plugins
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   plugins/plugins-overview
 | 
			
		||||
   plugins/creating-plugins
 | 
			
		||||
   plugins/async-plugin
 | 
			
		||||
   plugins/backoff-plugin
 | 
			
		||||
   plugins/cache-plugin
 | 
			
		||||
   plugins/cookie-plugin
 | 
			
		||||
   plugins/curl-auth-plugin
 | 
			
		||||
   plugins/history-plugin
 | 
			
		||||
   plugins/log-plugin
 | 
			
		||||
   plugins/md5-validator-plugin
 | 
			
		||||
   plugins/mock-plugin
 | 
			
		||||
   plugins/oauth-plugin
 | 
			
		||||
 | 
			
		||||
The web service client
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
   webservice-client/webservice-client
 | 
			
		||||
   webservice-client/using-the-service-builder
 | 
			
		||||
   webservice-client/guzzle-service-descriptions
 | 
			
		||||
   batching/batching
 | 
			
		||||
   iterators/resource-iterators
 | 
			
		||||
   iterators/guzzle-iterators
 | 
			
		||||
 | 
			
		||||
Testing
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   testing/unit-testing
 | 
			
		||||
 | 
			
		||||
API Docs
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
`Read the API docs <http://guzzlephp.org/api/index.html>`_
 | 
			
		||||
							
								
								
									
										29
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/faq.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/faq.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
===
 | 
			
		||||
FAQ
 | 
			
		||||
===
 | 
			
		||||
 | 
			
		||||
What should I do if I get this error: Fatal error: Maximum function nesting level of '100' reached, aborting!
 | 
			
		||||
-------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
You could run into this error if you have the XDebug extension installed and you execute a lot of requests in
 | 
			
		||||
callbacks.  This error message comes specifically from the XDebug extension. PHP itself does not have a function
 | 
			
		||||
nesting limit. Change this setting in your php.ini to increase the limit::
 | 
			
		||||
 | 
			
		||||
    xdebug.max_nesting_level = 1000
 | 
			
		||||
 | 
			
		||||
[`source <http://stackoverflow.com/a/4293870/151504>`_]
 | 
			
		||||
 | 
			
		||||
How can I speed up my client?
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
There are several things you can do to speed up your client:
 | 
			
		||||
 | 
			
		||||
1. Utilize a C based HTTP message parser (e.g. ``Guzzle\Parser\Message\PeclHttpMessageParser``)
 | 
			
		||||
2. Disable operation validation by setting the ``command.disable_validation`` option to true on a command
 | 
			
		||||
 | 
			
		||||
Why am I getting a 417 error response?
 | 
			
		||||
--------------------------------------
 | 
			
		||||
 | 
			
		||||
This can occur for a number of reasons, but if you are sending PUT, POST, or PATCH requests with an
 | 
			
		||||
``Expect: 100-Continue`` header, a server that does not support this header will return a 417 response. You can work
 | 
			
		||||
around this by calling ``$request->removeHeader('Expect');`` after setting the entity body of a request.
 | 
			
		||||
							
								
								
									
										154
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/installation.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/installation.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,154 @@
 | 
			
		||||
============
 | 
			
		||||
Installation
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
#. PHP 5.3.3+ compiled with the cURL extension
 | 
			
		||||
#. A recent version of cURL 7.16.2+ compiled with OpenSSL and zlib
 | 
			
		||||
 | 
			
		||||
Installing Guzzle
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Composer
 | 
			
		||||
~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The recommended way to install Guzzle is with `Composer <http://getcomposer.org>`_. Composer is a dependency
 | 
			
		||||
management tool for PHP that allows you to declare the dependencies your project needs and installs them into your
 | 
			
		||||
project.
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
    # Install Composer
 | 
			
		||||
    curl -sS https://getcomposer.org/installer | php
 | 
			
		||||
 | 
			
		||||
    # Add Guzzle as a dependency
 | 
			
		||||
    php composer.phar require guzzle/guzzle:~3.9
 | 
			
		||||
 | 
			
		||||
After installing, you need to require Composer's autoloader:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    require 'vendor/autoload.php';
 | 
			
		||||
 | 
			
		||||
You can find out more on how to install Composer, configure autoloading, and other best-practices for defining
 | 
			
		||||
dependencies at `getcomposer.org <http://getcomposer.org>`_.
 | 
			
		||||
 | 
			
		||||
Using only specific parts of Guzzle
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
While you can always just rely on ``guzzle/guzzle``, Guzzle provides several smaller parts of Guzzle as individual
 | 
			
		||||
packages available through Composer.
 | 
			
		||||
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| Package name                                                                                  | Description                              |
 | 
			
		||||
+===============================================================================================+==========================================+
 | 
			
		||||
| `guzzle/common <https://packagist.org/packages/guzzle/common>`_                               | Provides ``Guzzle\Common``               |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/http <https://packagist.org/packages/guzzle/http>`_                                   | Provides ``Guzzle\Http``                 |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/parser <https://packagist.org/packages/guzzle/parser>`_                               | Provides ``Guzzle\Parser``               |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/batch <https://packagist.org/packages/guzzle/batch>`_                                 | Provides ``Guzzle\Batch``                |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/cache <https://packagist.org/packages/guzzle/cache>`_                                 | Provides ``Guzzle\Cache``                |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/inflection <https://packagist.org/packages/guzzle/inflection>`_                       | Provides ``Guzzle\Inflection``           |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/iterator <https://packagist.org/packages/guzzle/iterator>`_                           | Provides ``Guzzle\Iterator``             |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/log <https://packagist.org/packages/guzzle/log>`_                                     | Provides ``Guzzle\Log``                  |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin <https://packagist.org/packages/guzzle/plugin>`_                               | Provides ``Guzzle\Plugin`` (all plugins) |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-async <https://packagist.org/packages/guzzle/plugin-async>`_                   | Provides ``Guzzle\Plugin\Async``         |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-backoff <https://packagist.org/packages/guzzle/plugin-backoff>`_               | Provides ``Guzzle\Plugin\BackoffPlugin`` |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-cache <https://packagist.org/packages/guzzle/plugin-cache>`_                   | Provides ``Guzzle\Plugin\Cache``         |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-cookie <https://packagist.org/packages/guzzle/plugin-cookie>`_                 | Provides ``Guzzle\Plugin\Cookie``        |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-error-response <https://packagist.org/packages/guzzle/plugin-error-response>`_ | Provides ``Guzzle\Plugin\ErrorResponse`` |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-history <https://packagist.org/packages/guzzle/plugin-history>`_               | Provides ``Guzzle\Plugin\History``       |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-log <https://packagist.org/packages/guzzle/plugin-log>`_                       | Provides ``Guzzle\Plugin\Log``           |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-md5 <https://packagist.org/packages/guzzle/plugin-md5>`_                       | Provides ``Guzzle\Plugin\Md5``           |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-mock <https://packagist.org/packages/guzzle/plugin-mock>`_                     | Provides ``Guzzle\Plugin\Mock``          |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/plugin-oauth <https://packagist.org/packages/guzzle/plugin-oauth>`_                   | Provides ``Guzzle\Plugin\Oauth``         |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/service <https://packagist.org/packages/guzzle/service>`_                             | Provides ``Guzzle\Service``              |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
| `guzzle/stream <https://packagist.org/packages/guzzle/stream>`_                               | Provides ``Guzzle\Stream``               |
 | 
			
		||||
+-----------------------------------------------------------------------------------------------+------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Bleeding edge
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
During your development, you can keep up with the latest changes on the master branch by setting the version
 | 
			
		||||
requirement for Guzzle to ``dev-master``.
 | 
			
		||||
 | 
			
		||||
.. code-block:: js
 | 
			
		||||
 | 
			
		||||
   {
 | 
			
		||||
      "require": {
 | 
			
		||||
         "guzzle/guzzle": "dev-master"
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
PEAR
 | 
			
		||||
~~~~
 | 
			
		||||
 | 
			
		||||
Guzzle can be installed through PEAR:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
    pear channel-discover guzzlephp.org/pear
 | 
			
		||||
    pear install guzzle/guzzle
 | 
			
		||||
 | 
			
		||||
You can install a specific version of Guzzle by providing a version number suffix:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
    pear install guzzle/guzzle-3.9.0
 | 
			
		||||
 | 
			
		||||
Contributing to Guzzle
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
In order to contribute, you'll need to checkout the source from GitHub and install Guzzle's dependencies using
 | 
			
		||||
Composer:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
    git clone https://github.com/guzzle/guzzle.git
 | 
			
		||||
    cd guzzle && curl -s http://getcomposer.org/installer | php && ./composer.phar install --dev
 | 
			
		||||
 | 
			
		||||
Guzzle is unit tested with PHPUnit. You will need to create your own phpunit.xml file in order to run the unit tests
 | 
			
		||||
(or just copy phpunit.xml.dist to phpunit.xml). Run the tests using the vendored PHPUnit binary:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
    vendor/bin/phpunit
 | 
			
		||||
 | 
			
		||||
You'll need to install node.js v0.5.0 or newer in order to test the cURL implementation.
 | 
			
		||||
 | 
			
		||||
Framework integrations
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
Using Guzzle with Symfony
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Bundles are available on GitHub:
 | 
			
		||||
 | 
			
		||||
- `DdeboerGuzzleBundle <https://github.com/ddeboer/GuzzleBundle>`_ for Guzzle 2
 | 
			
		||||
- `MisdGuzzleBundle <https://github.com/misd-service-development/guzzle-bundle>`_ for Guzzle 3
 | 
			
		||||
 | 
			
		||||
Using Guzzle with Silex
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
A `Guzzle Silex service provider <https://github.com/guzzle/guzzle-silex-extension>`_ is available on GitHub.
 | 
			
		||||
							
								
								
									
										85
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/overview.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/overview.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
=================
 | 
			
		||||
Welcome to Guzzle
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
What is Guzzle?
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Guzzle is a PHP HTTP client and framework for building web service clients. Guzzle takes the pain out of sending HTTP
 | 
			
		||||
requests and the redundancy out of creating web service clients.
 | 
			
		||||
 | 
			
		||||
Features at a glance
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
- All the power of cURL with a simple interface.
 | 
			
		||||
- Persistent connections and parallel requests.
 | 
			
		||||
- Streams request and response bodies
 | 
			
		||||
- Service descriptions for quickly building clients.
 | 
			
		||||
- Powered by the Symfony2 EventDispatcher.
 | 
			
		||||
- Use all of the code or only specific components.
 | 
			
		||||
- Plugins for caching, logging, OAuth, mocks, and more
 | 
			
		||||
- Includes a custom node.js webserver to test your clients.
 | 
			
		||||
- Service descriptions for defining the inputs and outputs of an API
 | 
			
		||||
- Resource iterators for traversing paginated resources
 | 
			
		||||
- Batching for sending a large number of requests as efficiently as possible
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Really simple using a static facade
 | 
			
		||||
    Guzzle\Http\StaticClient::mount();
 | 
			
		||||
    $response = Guzzle::get('http://guzzlephp.org');
 | 
			
		||||
 | 
			
		||||
    // More control using a client class
 | 
			
		||||
    $client = new \Guzzle\Http\Client('http://guzzlephp.org');
 | 
			
		||||
    $request = $client->get('/');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
License
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
 | 
			
		||||
 | 
			
		||||
    Copyright (c) 2013 Michael Dowling <https://github.com/mtdowling>
 | 
			
		||||
 | 
			
		||||
    Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
    of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
    in the Software without restriction, including without limitation the rights
 | 
			
		||||
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
    copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
    furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
    The above copyright notice and this permission notice shall be included in
 | 
			
		||||
    all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
    THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
Contributing
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Guidelines
 | 
			
		||||
~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
This is still a work in progress, but there are only a few rules:
 | 
			
		||||
 | 
			
		||||
1. Guzzle follows PSR-0, PSR-1, and PSR-2
 | 
			
		||||
2. All pull requests must include unit tests to ensure the change works as expected and to prevent future regressions
 | 
			
		||||
 | 
			
		||||
Reporting a security vulnerability
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
We want to ensure that Guzzle is a secure HTTP client library for everyone. If you've discovered a security
 | 
			
		||||
vulnerability in Guzzle, we appreciate your help in disclosing it to us in a
 | 
			
		||||
`responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
 | 
			
		||||
 | 
			
		||||
Publicly disclosing a vulnerability can put the entire community at risk. If you've discovered a security concern,
 | 
			
		||||
please email us at security@guzzlephp.org. We'll work with you to make sure that we understand the scope of the issue,
 | 
			
		||||
and that we fully address your concern. We consider correspondence sent to security@guzzlephp.org our highest priority,
 | 
			
		||||
and work to address any issues that arise as quickly as possible.
 | 
			
		||||
 | 
			
		||||
After a security vulnerability has been corrected, a security hotfix release will be deployed as soon as possible.
 | 
			
		||||
							
								
								
									
										569
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/client.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										569
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/client.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,569 @@
 | 
			
		||||
======================
 | 
			
		||||
The Guzzle HTTP client
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
Guzzle gives PHP developers complete control over HTTP requests while utilizing HTTP/1.1 best practices. Guzzle's HTTP
 | 
			
		||||
functionality is a robust framework built on top of the `PHP libcurl bindings <http://www.php.net/curl>`_.
 | 
			
		||||
 | 
			
		||||
The three main parts of the Guzzle HTTP client are:
 | 
			
		||||
 | 
			
		||||
+--------------+-------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| Clients      | ``Guzzle\Http\Client`` (creates and sends requests, associates a response with a request)             |
 | 
			
		||||
+--------------+-------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| Requests     | ``Guzzle\Http\Message\Request`` (requests with no body),                                              |
 | 
			
		||||
|              | ``Guzzle\Http\Message\EntityEnclosingRequest`` (requests with a body)                                 |
 | 
			
		||||
+--------------+-------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| Responses    | ``Guzzle\Http\Message\Response``                                                                      |
 | 
			
		||||
+--------------+-------------------------------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Creating a Client
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Clients create requests, send requests, and set responses on a request object. When instantiating a client object,
 | 
			
		||||
you can pass an optional "base URL" and optional array of configuration options. A base URL is a
 | 
			
		||||
:doc:`URI template <uri-templates>` that contains the URL of a remote server. When creating requests with a relative
 | 
			
		||||
URL, the base URL of a client will be merged into the request's URL.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
    // Create a client and provide a base URL
 | 
			
		||||
    $client = new Client('https://api.github.com');
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('/user');
 | 
			
		||||
    $request->setAuth('user', 'pass');
 | 
			
		||||
    echo $request->getUrl();
 | 
			
		||||
    // >>> https://api.github.com/user
 | 
			
		||||
 | 
			
		||||
    // You must send a request in order for the transfer to occur
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    echo $response->getBody();
 | 
			
		||||
    // >>> {"type":"User", ...
 | 
			
		||||
 | 
			
		||||
    echo $response->getHeader('Content-Length');
 | 
			
		||||
    // >>> 792
 | 
			
		||||
 | 
			
		||||
    $data = $response->json();
 | 
			
		||||
    echo $data['type'];
 | 
			
		||||
    // >>> User
 | 
			
		||||
 | 
			
		||||
Base URLs
 | 
			
		||||
~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Notice that the URL provided to the client's ``get()`` method is relative. Relative URLs will always merge into the
 | 
			
		||||
base URL of the client. There are a few rules that control how the URLs are merged.
 | 
			
		||||
 | 
			
		||||
.. tip::
 | 
			
		||||
 | 
			
		||||
    Guzzle follows `RFC 3986 <http://tools.ietf.org/html/rfc3986#section-5.2>`_ when merging base URLs and
 | 
			
		||||
    relative URLs.
 | 
			
		||||
 | 
			
		||||
In the above example, we passed ``/user`` to the ``get()`` method of the client. This is a relative URL, so it will
 | 
			
		||||
merge into the base URL of the client-- resulting in the derived URL of ``https://api.github.com/users``.
 | 
			
		||||
 | 
			
		||||
``/user`` is a relative URL but uses an absolute path because it contains the leading slash. Absolute paths will
 | 
			
		||||
overwrite any existing path of the base URL. If an absolute path is provided (e.g. ``/path/to/something``), then the
 | 
			
		||||
path specified in the base URL of the client will be replaced with the absolute path, and the query string provided
 | 
			
		||||
by the relative URL will replace the query string of the base URL.
 | 
			
		||||
 | 
			
		||||
Omitting the leading slash and using relative paths will add to the path of the base URL of the client. So using a
 | 
			
		||||
client base URL of ``https://api.twitter.com/v1.1`` and creating a GET request with ``statuses/user_timeline.json``
 | 
			
		||||
will result in a URL of ``https://api.twitter.com/v1.1/statuses/user_timeline.json``. If a relative path and a query
 | 
			
		||||
string are provided, then the relative path will be appended to the base URL path, and the query string provided will
 | 
			
		||||
be merged into the query string of the base URL.
 | 
			
		||||
 | 
			
		||||
If an absolute URL is provided (e.g. ``http://httpbin.org/ip``), then the request will completely use the absolute URL
 | 
			
		||||
as-is without merging in any of the URL parts specified in the base URL.
 | 
			
		||||
 | 
			
		||||
Configuration options
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The second argument of the client's constructor is an array of configuration data. This can include URI template data
 | 
			
		||||
or special options that alter the client's behavior:
 | 
			
		||||
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
| ``request.options``           | Associative array of :ref:`Request options <request-options>` to apply to every     |
 | 
			
		||||
|                               | request created by the client.                                                      |
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
| ``redirect.disable``          | Disable HTTP redirects for every request created by the client.                     |
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
| ``curl.options``              | Associative array of cURL options to apply to every request created by the client.  |
 | 
			
		||||
|                               | if either the key or value of an entry in the array is a string, Guzzle will        |
 | 
			
		||||
|                               | attempt to find a matching defined cURL constant automatically (e.g.                |
 | 
			
		||||
|                               | "CURLOPT_PROXY" will be converted to the constant ``CURLOPT_PROXY``).               |
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
| ``ssl.certificate_authority`` | Set to true to use the Guzzle bundled SSL certificate bundle (this is used by       |
 | 
			
		||||
|                               | default, 'system' to use the bundle on your system, a string pointing to a file to  |
 | 
			
		||||
|                               | use a specific certificate file, a string pointing to a directory to use multiple   |
 | 
			
		||||
|                               | certificates, or ``false`` to disable SSL validation (not recommended).             |
 | 
			
		||||
|                               |                                                                                     |
 | 
			
		||||
|                               | When using  Guzzle inside of a phar file, the bundled SSL certificate will be       |
 | 
			
		||||
|                               | extracted to your system's temp folder, and each time a client is created an MD5    |
 | 
			
		||||
|                               | check will be performed to ensure the integrity of the certificate.                 |
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
| ``command.params``            | When using a ``Guzzle\Service\Client`` object, this is an associative array of      |
 | 
			
		||||
|                               | default options to set on each command created by the client.                       |
 | 
			
		||||
+-------------------------------+-------------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Here's an example showing how to set various configuration options, including default headers to send with each request,
 | 
			
		||||
default query string parameters to add to each request, a default auth scheme for each request, and a proxy to use for
 | 
			
		||||
each request. Values can be injected into the client's base URL using variables from the configuration array.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('https://api.twitter.com/{version}', array(
 | 
			
		||||
        'version'        => 'v1.1',
 | 
			
		||||
        'request.options' => array(
 | 
			
		||||
            'headers' => array('Foo' => 'Bar'),
 | 
			
		||||
            'query'   => array('testing' => '123'),
 | 
			
		||||
            'auth'    => array('username', 'password', 'Basic|Digest|NTLM|Any'),
 | 
			
		||||
            'proxy'   => 'tcp://localhost:80'
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Setting a custom User-Agent
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The default Guzzle User-Agent header is ``Guzzle/<Guzzle_Version> curl/<curl_version> PHP/<PHP_VERSION>``. You can
 | 
			
		||||
customize the User-Agent header of a client by calling the ``setUserAgent()`` method of a Client object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Completely override the default User-Agent
 | 
			
		||||
    $client->setUserAgent('Test/123');
 | 
			
		||||
 | 
			
		||||
    // Prepend a string to the default User-Agent
 | 
			
		||||
    $client->setUserAgent('Test/123', true);
 | 
			
		||||
 | 
			
		||||
Creating requests with a client
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
A Client object exposes several methods used to create Request objects:
 | 
			
		||||
 | 
			
		||||
* Create a custom HTTP request: ``$client->createRequest($method, $uri, array $headers, $body, $options)``
 | 
			
		||||
* Create a GET request: ``$client->get($uri, array $headers, $options)``
 | 
			
		||||
* Create a HEAD request: ``$client->head($uri, array $headers, $options)``
 | 
			
		||||
* Create a DELETE request: ``$client->delete($uri, array $headers, $body, $options)``
 | 
			
		||||
* Create a POST request: ``$client->post($uri, array $headers, $postBody, $options)``
 | 
			
		||||
* Create a PUT request: ``$client->put($uri, array $headers, $body, $options)``
 | 
			
		||||
* Create a PATCH request: ``$client->patch($uri, array $headers, $body, $options)``
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://baseurl.com/api/v1');
 | 
			
		||||
 | 
			
		||||
    // Create a GET request using Relative to base URL
 | 
			
		||||
    // URL of the request: http://baseurl.com/api/v1/path?query=123&value=abc)
 | 
			
		||||
    $request = $client->get('path?query=123&value=abc');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Create HEAD request using a relative URL with an absolute path
 | 
			
		||||
    // URL of the request: http://baseurl.com/path?query=123&value=abc
 | 
			
		||||
    $request = $client->head('/path?query=123&value=abc');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Create a DELETE request using an absolute URL
 | 
			
		||||
    $request = $client->delete('http://www.example.com/path?query=123&value=abc');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Create a PUT request using the contents of a PHP stream as the body
 | 
			
		||||
    // Specify custom HTTP headers
 | 
			
		||||
    $request = $client->put('http://www.example.com/upload', array(
 | 
			
		||||
        'X-Header' => 'My Header'
 | 
			
		||||
    ), fopen('http://www.test.com/', 'r'));
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Create a POST request and add the POST files manually
 | 
			
		||||
    $request = $client->post('http://localhost:8983/solr/update')
 | 
			
		||||
        ->addPostFiles(array('file' => '/path/to/documents.xml'));
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Check if a resource supports the DELETE method
 | 
			
		||||
    $supportsDelete = $client->options('/path')->send()->isMethodAllowed('DELETE');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
Client objects create Request objects using a request factory (``Guzzle\Http\Message\RequestFactoryInterface``).
 | 
			
		||||
You can inject a custom request factory into the Client using ``$client->setRequestFactory()``, but you can typically
 | 
			
		||||
rely on a Client's default request factory.
 | 
			
		||||
 | 
			
		||||
Static clients
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
You can use Guzzle's static client facade to more easily send simple HTTP requests.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Mount the client so that you can access it at \Guzzle
 | 
			
		||||
    Guzzle\Http\StaticClient::mount();
 | 
			
		||||
    $response = Guzzle::get('http://guzzlephp.org');
 | 
			
		||||
 | 
			
		||||
Each request method of the static client (e.g. ``get()``, ``post()`, ``put()``, etc) accepts an associative array of request
 | 
			
		||||
options to apply to the request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $response = Guzzle::post('http://test.com', array(
 | 
			
		||||
        'headers' => array('X-Foo' => 'Bar'),
 | 
			
		||||
        'body'    => array('Test' => '123'),
 | 
			
		||||
        'timeout' => 10
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
.. _request-options:
 | 
			
		||||
 | 
			
		||||
Request options
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Request options can be specified when creating a request or in the ``request.options`` parameter of a client. These
 | 
			
		||||
options can control various aspects of a request including: headers to send, query string data, where the response
 | 
			
		||||
should be downloaded, proxies, auth, etc.
 | 
			
		||||
 | 
			
		||||
headers
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
Associative array of headers to apply to the request. When specified in the ``$options`` argument of a client creational
 | 
			
		||||
method (e.g. ``get()``, ``post()``, etc), the headers in the ``$options`` array will overwrite headers specified in the
 | 
			
		||||
``$headers`` array.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, array(), array(
 | 
			
		||||
        'headers' => array('X-Foo' => 'Bar')
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Headers can be specified on a client to add default headers to every request sent by a client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client();
 | 
			
		||||
 | 
			
		||||
    // Set a single header using path syntax
 | 
			
		||||
    $client->setDefaultOption('headers/X-Foo', 'Bar');
 | 
			
		||||
 | 
			
		||||
    // Set all headers
 | 
			
		||||
    $client->setDefaultOption('headers', array('X-Foo' => 'Bar'));
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    In addition to setting request options when creating requests or using the ``setDefaultOption()`` method, any
 | 
			
		||||
    default client request option can be set using a client's config object:
 | 
			
		||||
 | 
			
		||||
    .. code-block:: php
 | 
			
		||||
 | 
			
		||||
        $client->getConfig()->setPath('request.options/headers/X-Foo', 'Bar');
 | 
			
		||||
 | 
			
		||||
query
 | 
			
		||||
~~~~~
 | 
			
		||||
 | 
			
		||||
Associative array of query string parameters to the request. When specified in the ``$options`` argument of a client
 | 
			
		||||
creational method, the query string parameters in the ``$options`` array will overwrite query string parameters
 | 
			
		||||
specified in the `$url`.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, array(), array(
 | 
			
		||||
        'query' => array('abc' => '123')
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Query string parameters can be specified on a client to add default query string parameters to every request sent by a
 | 
			
		||||
client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client();
 | 
			
		||||
 | 
			
		||||
    // Set a single query string parameter using path syntax
 | 
			
		||||
    $client->setDefaultOption('query/abc', '123');
 | 
			
		||||
 | 
			
		||||
    // Set an array of default query string parameters
 | 
			
		||||
    $client->setDefaultOption('query', array('abc' => '123'));
 | 
			
		||||
 | 
			
		||||
body
 | 
			
		||||
~~~~
 | 
			
		||||
 | 
			
		||||
Sets the body of a request. The value supplied to the body option can be a ``Guzzle\Http\EntityBodyInterface``, string,
 | 
			
		||||
fopen resource, or array when sending POST requests. When a ``body`` request option is supplied, the option value will
 | 
			
		||||
overwrite the ``$body`` argument of a client creational method.
 | 
			
		||||
 | 
			
		||||
auth
 | 
			
		||||
~~~~
 | 
			
		||||
 | 
			
		||||
Specifies and array of HTTP authorization parameters parameters to use with the request. The array must contain the
 | 
			
		||||
username in index [0], the password in index [1], and can optionally contain the authentication type in index [2].
 | 
			
		||||
The available authentication types are: "Basic" (default), "Digest", "NTLM", or "Any".
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, array(), array(
 | 
			
		||||
        'auth' => array('username', 'password', 'Digest')
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    // You can add auth headers to every request of a client
 | 
			
		||||
    $client->setDefaultOption('auth', array('username', 'password', 'Digest'));
 | 
			
		||||
 | 
			
		||||
cookies
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
Specifies an associative array of cookies to add to the request.
 | 
			
		||||
 | 
			
		||||
allow_redirects
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Specifies whether or not the request should follow redirects. Requests will follow redirects by default. Set
 | 
			
		||||
``allow_redirects`` to ``false`` to disable redirects.
 | 
			
		||||
 | 
			
		||||
save_to
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ``save_to`` option specifies where the body of a response is downloaded. You can pass the path to a file, an fopen
 | 
			
		||||
resource, or a ``Guzzle\Http\EntityBodyInterface`` object.
 | 
			
		||||
 | 
			
		||||
See :ref:`Changing where a response is downloaded <request-set-response-body>` for more information on setting the
 | 
			
		||||
`save_to` option.
 | 
			
		||||
 | 
			
		||||
events
 | 
			
		||||
~~~~~~
 | 
			
		||||
 | 
			
		||||
The `events` option makes it easy to attach listeners to the various events emitted by a request object. The `events`
 | 
			
		||||
options must be an associative array mapping an event name to a Closure or array the contains a Closure and the
 | 
			
		||||
priority of the event.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, array(), array(
 | 
			
		||||
        'events' => array(
 | 
			
		||||
            'request.before_send' => function (\Guzzle\Common\Event $e) {
 | 
			
		||||
                echo 'About to send ' . $e['request'];
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    // Using the static client:
 | 
			
		||||
    Guzzle::get($url, array(
 | 
			
		||||
        'events' => array(
 | 
			
		||||
            'request.before_send' => function (\Guzzle\Common\Event $e) {
 | 
			
		||||
                echo 'About to send ' . $e['request'];
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
plugins
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
The `plugins` options makes it easy to attach an array of plugins to a request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Using the static client:
 | 
			
		||||
    Guzzle::get($url, array(
 | 
			
		||||
        'plugins' => array(
 | 
			
		||||
            new Guzzle\Plugin\Cache\CachePlugin(),
 | 
			
		||||
            new Guzzle\Plugin\Cookie\CookiePlugin()
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
exceptions
 | 
			
		||||
~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The `exceptions` option can be used to disable throwing exceptions for unsuccessful HTTP response codes
 | 
			
		||||
(e.g. 404, 500, etc). Set `exceptions` to false to not throw exceptions.
 | 
			
		||||
 | 
			
		||||
params
 | 
			
		||||
~~~~~~
 | 
			
		||||
 | 
			
		||||
The `params` options can be used to specify an associative array of data parameters to add to a request.  Note that
 | 
			
		||||
these are not query string parameters.
 | 
			
		||||
 | 
			
		||||
timeout / connect_timeout
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can specify the maximum number of seconds to allow for an entire transfer to take place before timing out using
 | 
			
		||||
the `timeout` request option. You can specify the maximum number of seconds to wait while trying to connect using the
 | 
			
		||||
`connect_timeout` request option. Set either of these options to 0 to wait indefinitely.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('http://www.example.com', array(), array(
 | 
			
		||||
        'timeout'         => 20,
 | 
			
		||||
        'connect_timeout' => 1.5
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
verify
 | 
			
		||||
~~~~~~
 | 
			
		||||
 | 
			
		||||
Set to true to enable SSL certificate validation (the default), false to disable SSL certificate validation, or supply
 | 
			
		||||
the path to a CA bundle to enable verification using a custom certificate.
 | 
			
		||||
 | 
			
		||||
cert
 | 
			
		||||
~~~~
 | 
			
		||||
 | 
			
		||||
The `cert` option lets you specify a PEM formatted SSL client certificate to use with servers that require one. If the
 | 
			
		||||
certificate requires a password, provide an array with the password as the second item.
 | 
			
		||||
 | 
			
		||||
This would typically be used in conjunction with the `ssl_key` option.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('https://www.example.com', array(), array(
 | 
			
		||||
        'cert' => '/etc/pki/client_certificate.pem'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('https://www.example.com', array(), array(
 | 
			
		||||
        'cert' => array('/etc/pki/client_certificate.pem', 's3cr3tp455w0rd')
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
ssl_key
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
The `ssl_key` option lets you specify a file containing your PEM formatted private key, optionally protected by a password.
 | 
			
		||||
Note: your password is sensitive, keep the PHP script containing it safe.
 | 
			
		||||
 | 
			
		||||
This would typically be used in conjunction with the `cert` option.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('https://www.example.com', array(), array(
 | 
			
		||||
        'ssl_key' => '/etc/pki/private_key.pem'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('https://www.example.com', array(), array(
 | 
			
		||||
        'ssl_key' => array('/etc/pki/private_key.pem', 's3cr3tp455w0rd')
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
proxy
 | 
			
		||||
~~~~~
 | 
			
		||||
 | 
			
		||||
The `proxy` option is used to specify an HTTP proxy (e.g. `http://username:password@192.168.16.1:10`).
 | 
			
		||||
 | 
			
		||||
debug
 | 
			
		||||
~~~~~
 | 
			
		||||
 | 
			
		||||
The `debug` option is used to show verbose cURL output for a transfer.
 | 
			
		||||
 | 
			
		||||
stream
 | 
			
		||||
~~~~~~
 | 
			
		||||
 | 
			
		||||
When using a static client, you can set the `stream` option to true to return a `Guzzle\Stream\Stream` object that can
 | 
			
		||||
be used to pull data from a stream as needed (rather than have cURL download the entire contents of a response to a
 | 
			
		||||
stream all at once).
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $stream = Guzzle::get('http://guzzlephp.org', array('stream' => true));
 | 
			
		||||
    while (!$stream->feof()) {
 | 
			
		||||
        echo $stream->readLine();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Sending requests
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
Requests can be sent by calling the ``send()`` method of a Request object, but you can also send requests using the
 | 
			
		||||
``send()`` method of a Client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('http://www.amazon.com');
 | 
			
		||||
    $response = $client->send($request);
 | 
			
		||||
 | 
			
		||||
Sending requests in parallel
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The Client's ``send()`` method accept a single ``Guzzle\Http\Message\RequestInterface`` object or an array of
 | 
			
		||||
RequestInterface objects. When an array is specified, the requests will be sent in parallel.
 | 
			
		||||
 | 
			
		||||
Sending many HTTP requests serially (one at a time) can cause an unnecessary delay in a script's execution. Each
 | 
			
		||||
request must complete before a subsequent request can be sent. By sending requests in parallel, a pool of HTTP
 | 
			
		||||
requests can complete at the speed of the slowest request in the pool, significantly reducing the amount of time
 | 
			
		||||
needed to execute multiple HTTP requests. Guzzle provides a wrapper for the curl_multi functions in PHP.
 | 
			
		||||
 | 
			
		||||
Here's an example of sending three requests in parallel using a client object:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Exception\MultiTransferException;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        $responses = $client->send(array(
 | 
			
		||||
            $client->get('http://www.google.com/'),
 | 
			
		||||
            $client->head('http://www.google.com/'),
 | 
			
		||||
            $client->get('https://www.github.com/')
 | 
			
		||||
        ));
 | 
			
		||||
    } catch (MultiTransferException $e) {
 | 
			
		||||
 | 
			
		||||
        echo "The following exceptions were encountered:\n";
 | 
			
		||||
        foreach ($e as $exception) {
 | 
			
		||||
            echo $exception->getMessage() . "\n";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        echo "The following requests failed:\n";
 | 
			
		||||
        foreach ($e->getFailedRequests() as $request) {
 | 
			
		||||
            echo $request . "\n\n";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        echo "The following requests succeeded:\n";
 | 
			
		||||
        foreach ($e->getSuccessfulRequests() as $request) {
 | 
			
		||||
            echo $request . "\n\n";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
If the requests succeed, an array of ``Guzzle\Http\Message\Response`` objects are returned. A single request failure
 | 
			
		||||
will not cause the entire pool of requests to fail. Any exceptions thrown while transferring a pool of requests will
 | 
			
		||||
be aggregated into a ``Guzzle\Common\Exception\MultiTransferException`` exception.
 | 
			
		||||
 | 
			
		||||
Plugins and events
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Guzzle provides easy to use request plugins that add behavior to requests based on signal slot event notifications
 | 
			
		||||
powered by the
 | 
			
		||||
`Symfony2 Event Dispatcher component <http://symfony.com/doc/2.0/components/event_dispatcher/introduction.html>`_. Any
 | 
			
		||||
event listener or subscriber attached to a Client object will automatically be attached to each request created by the
 | 
			
		||||
client.
 | 
			
		||||
 | 
			
		||||
Using the same cookie session for each request
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Attach a ``Guzzle\Plugin\Cookie\CookiePlugin`` to a client which will in turn add support for cookies to every request
 | 
			
		||||
created by a client, and each request will use the same cookie session:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Plugin\Cookie\CookiePlugin;
 | 
			
		||||
    use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
 | 
			
		||||
 | 
			
		||||
    // Create a new cookie plugin
 | 
			
		||||
    $cookiePlugin = new CookiePlugin(new ArrayCookieJar());
 | 
			
		||||
 | 
			
		||||
    // Add the cookie plugin to the client
 | 
			
		||||
    $client->addSubscriber($cookiePlugin);
 | 
			
		||||
 | 
			
		||||
.. _client-events:
 | 
			
		||||
 | 
			
		||||
Events emitted from a client
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
A ``Guzzle\Http\Client`` object emits the following events:
 | 
			
		||||
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| Event name                   | Description                                | Event data                               |
 | 
			
		||||
+==============================+============================================+==========================================+
 | 
			
		||||
| client.create_request        | Called when a client creates a request     | * client: The client                     |
 | 
			
		||||
|                              |                                            | * request: The created request           |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client();
 | 
			
		||||
 | 
			
		||||
    // Add a listener that will echo out requests as they are created
 | 
			
		||||
    $client->getEventDispatcher()->addListener('client.create_request', function (Event $e) {
 | 
			
		||||
        echo 'Client object: ' . spl_object_hash($e['client']) . "\n";
 | 
			
		||||
        echo "Request object: {$e['request']}\n";
 | 
			
		||||
    });
 | 
			
		||||
							
								
								
									
										151
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/entity-bodies.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/entity-bodies.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
			
		||||
===========================
 | 
			
		||||
Request and response bodies
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
`Entity body <http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html>`_ is the term used for the body of an HTTP
 | 
			
		||||
message. The entity body of requests and responses is inherently a
 | 
			
		||||
`PHP stream <http://php.net/manual/en/book.stream.php>`_ in Guzzle. The body of the request can be either a string or
 | 
			
		||||
a PHP stream which are converted into a ``Guzzle\Http\EntityBody`` object using its factory method. When using a
 | 
			
		||||
string, the entity body is stored in a `temp PHP stream <http://www.php.net/manual/en/wrappers.php.php>`_. The use of
 | 
			
		||||
temp PHP streams helps to protect your application from running out of memory when sending or receiving large entity
 | 
			
		||||
bodies in your messages. When more than 2MB of data is stored in a temp stream, it automatically stores the data on
 | 
			
		||||
disk rather than in memory.
 | 
			
		||||
 | 
			
		||||
EntityBody objects provide a great deal of functionality: compression, decompression, calculate the Content-MD5,
 | 
			
		||||
calculate the Content-Length (when the resource is repeatable), guessing the Content-Type, and more. Guzzle doesn't
 | 
			
		||||
need to load an entire entity body into a string when sending or retrieving data; entity bodies are streamed when
 | 
			
		||||
being uploaded and downloaded.
 | 
			
		||||
 | 
			
		||||
Here's an example of gzip compressing a text file then sending the file to a URL:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\EntityBody;
 | 
			
		||||
 | 
			
		||||
    $body = EntityBody::factory(fopen('/path/to/file.txt', 'r+'));
 | 
			
		||||
    echo $body->read(1024);
 | 
			
		||||
    $body->seek(0, SEEK_END);
 | 
			
		||||
    $body->write('foo');
 | 
			
		||||
    echo $body->ftell();
 | 
			
		||||
    $body->rewind();
 | 
			
		||||
 | 
			
		||||
    // Send a request using the body
 | 
			
		||||
    $response = $client->put('http://localhost:8080/uploads', null, $body)->send();
 | 
			
		||||
 | 
			
		||||
The body of the request can be specified in the ``Client::put()`` or ``Client::post()``  method, or, you can specify
 | 
			
		||||
the body of the request by calling the ``setBody()`` method of any
 | 
			
		||||
``Guzzle\Http\Message\EntityEnclosingRequestInterface`` object.
 | 
			
		||||
 | 
			
		||||
Compression
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
You can compress the contents of an EntityBody object using the ``compress()`` method. The compress method accepts a
 | 
			
		||||
filter that must match to one of the supported
 | 
			
		||||
`PHP stream filters <http://www.php.net/manual/en/filters.compression.php>`_ on your system (e.g. `zlib.deflate`,
 | 
			
		||||
``bzip2.compress``, etc). Compressing an entity body will stream the entire entity body through a stream compression
 | 
			
		||||
filter into a temporary PHP stream. You can uncompress an entity body using the ``uncompress()`` method and passing
 | 
			
		||||
the PHP stream filter to use when decompressing the stream (e.g. ``zlib.inflate``).
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\EntityBody;
 | 
			
		||||
 | 
			
		||||
    $body = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
 | 
			
		||||
    echo $body->getSize();
 | 
			
		||||
    // >>> 1048576
 | 
			
		||||
 | 
			
		||||
    // Compress using the default zlib.deflate filter
 | 
			
		||||
    $body->compress();
 | 
			
		||||
    echo $body->getSize();
 | 
			
		||||
    // >>> 314572
 | 
			
		||||
 | 
			
		||||
    // Decompress the stream
 | 
			
		||||
    $body->uncompress();
 | 
			
		||||
    echo $body->getSize();
 | 
			
		||||
    // >>> 1048576
 | 
			
		||||
 | 
			
		||||
Decorators
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
Guzzle provides several EntityBody decorators that can be used to add functionality to an EntityBody at runtime.
 | 
			
		||||
 | 
			
		||||
IoEmittingEntityBody
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
This decorator will emit events when data is read from a stream or written to a stream. Add an event subscriber to the
 | 
			
		||||
entity body's ``body.read`` or ``body.write`` methods to receive notifications when data data is transferred.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
    use Guzzle\Http\EntityBody;
 | 
			
		||||
    use Guzzle\Http\IoEmittingEntityBody;
 | 
			
		||||
 | 
			
		||||
    $original = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
 | 
			
		||||
    $body = new IoEmittingEntityBody($original);
 | 
			
		||||
 | 
			
		||||
    // Listen for read events
 | 
			
		||||
    $body->getEventDispatcher()->addListener('body.read', function (Event $e) {
 | 
			
		||||
        // Grab data from the event
 | 
			
		||||
        $entityBody = $e['body'];
 | 
			
		||||
        // Amount of data retrieved from the body
 | 
			
		||||
        $lengthOfData = $e['length'];
 | 
			
		||||
        // The actual data that was read
 | 
			
		||||
        $data = $e['read'];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Listen for write events
 | 
			
		||||
    $body->getEventDispatcher()->addListener('body.write', function (Event $e) {
 | 
			
		||||
        // Grab data from the event
 | 
			
		||||
        $entityBody = $e['body'];
 | 
			
		||||
        // The data that was written
 | 
			
		||||
        $data = $e['write'];
 | 
			
		||||
        // The actual amount of data that was written
 | 
			
		||||
        $data = $e['read'];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
ReadLimitEntityBody
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ReadLimitEntityBody decorator can be used to transfer a subset or slice of an existing EntityBody object. This can
 | 
			
		||||
be useful for breaking a large file into smaller pieces to be sent in chunks (e.g. Amazon S3's multipart upload API).
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\EntityBody;
 | 
			
		||||
    use Guzzle\Http\ReadLimitEntityBody;
 | 
			
		||||
 | 
			
		||||
    $original = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
 | 
			
		||||
    echo $original->getSize();
 | 
			
		||||
    // >>> 1048576
 | 
			
		||||
 | 
			
		||||
    // Limit the size of the body to 1024 bytes and start reading from byte 2048
 | 
			
		||||
    $body = new ReadLimitEntityBody($original, 1024, 2048);
 | 
			
		||||
    echo $body->getSize();
 | 
			
		||||
    // >>> 1024
 | 
			
		||||
    echo $body->ftell();
 | 
			
		||||
    // >>> 0
 | 
			
		||||
 | 
			
		||||
CachingEntityBody
 | 
			
		||||
~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The CachingEntityBody decorator is used to allow seeking over previously read bytes on non-seekable read streams. This
 | 
			
		||||
can be useful when transferring a non-seekable entity body fails due to needing to rewind the stream (for example,
 | 
			
		||||
resulting from a redirect). Data that is read from the remote stream will be buffered in a PHP temp stream so that
 | 
			
		||||
previously read bytes are cached first in memory, then on disk.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\EntityBody;
 | 
			
		||||
    use Guzzle\Http\CachingEntityBody;
 | 
			
		||||
 | 
			
		||||
    $original = EntityBody::factory(fopen('http://www.google.com', 'r'));
 | 
			
		||||
    $body = new CachingEntityBody($original);
 | 
			
		||||
 | 
			
		||||
    $body->read(1024);
 | 
			
		||||
    echo $body->ftell();
 | 
			
		||||
    // >>> 1024
 | 
			
		||||
 | 
			
		||||
    $body->seek(0);
 | 
			
		||||
    echo $body->ftell();
 | 
			
		||||
    // >>> 0
 | 
			
		||||
							
								
								
									
										99
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/http-redirects.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/http-redirects.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
==============
 | 
			
		||||
HTTP redirects
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
By default, Guzzle will automatically follow redirects using the non-RFC compliant implementation used by most web
 | 
			
		||||
browsers. This means that redirects for POST requests are followed by a GET request. You can force RFC compliance by
 | 
			
		||||
enabling the strict mode on a request's parameter object:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Set per request
 | 
			
		||||
    $request = $client->post();
 | 
			
		||||
    $request->getParams()->set('redirect.strict', true);
 | 
			
		||||
 | 
			
		||||
    // You can set globally on a client so all requests use strict redirects
 | 
			
		||||
    $client->getConfig()->set('request.params', array(
 | 
			
		||||
        'redirect.strict' => true
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
By default, Guzzle will redirect up to 5 times before throwing a ``Guzzle\Http\Exception\TooManyRedirectsException``.
 | 
			
		||||
You can raise or lower this value using the ``redirect.max`` parameter of a request object:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request->getParams()->set('redirect.max', 2);
 | 
			
		||||
 | 
			
		||||
Redirect history
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
You can get the number of redirects of a request using the resulting response object's ``getRedirectCount()`` method.
 | 
			
		||||
Similar to cURL's ``effective_url`` property, Guzzle provides the effective URL, or the last redirect URL that returned
 | 
			
		||||
the request, in a response's ``getEffectiveUrl()`` method.
 | 
			
		||||
 | 
			
		||||
When testing or debugging, it is often useful to see a history of redirects for a particular request. This can be
 | 
			
		||||
achieved using the HistoryPlugin.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('/');
 | 
			
		||||
    $history = new Guzzle\Plugin\History\HistoryPlugin();
 | 
			
		||||
    $request->addSubscriber($history);
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Get the last redirect URL or the URL of the request that received
 | 
			
		||||
    // this response
 | 
			
		||||
    echo $response->getEffectiveUrl();
 | 
			
		||||
 | 
			
		||||
    // Get the number of redirects
 | 
			
		||||
    echo $response->getRedirectCount();
 | 
			
		||||
 | 
			
		||||
    // Iterate over each sent request and response
 | 
			
		||||
    foreach ($history->getAll() as $transaction) {
 | 
			
		||||
        // Request object
 | 
			
		||||
        echo $transaction['request']->getUrl() . "\n";
 | 
			
		||||
        // Response object
 | 
			
		||||
        echo $transaction['response']->getEffectiveUrl() . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Or, simply cast the HistoryPlugin to a string to view each request and response
 | 
			
		||||
    echo $history;
 | 
			
		||||
 | 
			
		||||
Disabling redirects
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
You can disable redirects on a client by passing a configuration option in the client's constructor:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Client(null, array('redirect.disable' => true));
 | 
			
		||||
 | 
			
		||||
You can also disable redirects per request:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, array(), array('allow_redirects' => false));
 | 
			
		||||
 | 
			
		||||
Redirects and non-repeatable streams
 | 
			
		||||
------------------------------------
 | 
			
		||||
 | 
			
		||||
If you are redirected when sending data from a non-repeatable stream and some of the data has been read off of the
 | 
			
		||||
stream, then you will get a ``Guzzle\Http\Exception\CouldNotRewindStreamException``. You can get around this error by
 | 
			
		||||
adding a custom rewind method to the entity body object being sent in the request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post(
 | 
			
		||||
        'http://httpbin.com/redirect/2',
 | 
			
		||||
        null,
 | 
			
		||||
        fopen('http://httpbin.com/get', 'r')
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Add a custom function that can be used to rewind the stream
 | 
			
		||||
    // (reopen in this example)
 | 
			
		||||
    $request->getBody()->setRewindFunction(function ($body) {
 | 
			
		||||
        $body->setStream(fopen('http://httpbin.com/get', 'r'));
 | 
			
		||||
        return true;
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    $response = $client->send();
 | 
			
		||||
							
								
								
									
										667
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/request.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										667
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/request.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,667 @@
 | 
			
		||||
=====================
 | 
			
		||||
Using Request objects
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
HTTP request messages
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
Request objects are all about building an HTTP message. Each part of an HTTP request message can be set individually
 | 
			
		||||
using methods on the request object or set in bulk using the ``setUrl()`` method. Here's the format of an HTTP request
 | 
			
		||||
with each part of the request referencing the method used to change it::
 | 
			
		||||
 | 
			
		||||
    PUT(a) /path(b)?query=123(c) HTTP/1.1(d)
 | 
			
		||||
    X-Header(e): header
 | 
			
		||||
    Content-Length(e): 4
 | 
			
		||||
 | 
			
		||||
    data(f)
 | 
			
		||||
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| a. **Method**           | The request method can only be set when instantiating a request                 |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| b. **Path**             | ``$request->setPath('/path');``                                                 |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| c. **Query**            | ``$request->getQuery()->set('query', '123');``                                  |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| d. **Protocol version** | ``$request->setProtocolVersion('1.1');``                                        |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| e. **Header**           | ``$request->setHeader('X-Header', 'header');``                                  |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| f. **Entity Body**      |  ``$request->setBody('data'); // Only available with PUT, POST, PATCH, DELETE`` |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Creating requests with a client
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
Client objects are responsible for creating HTTP request objects.
 | 
			
		||||
 | 
			
		||||
GET requests
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
`GET requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3>`_ are the most common form of HTTP
 | 
			
		||||
requests. When you visit a website in your browser, the HTML of the website is downloaded using a GET request. GET
 | 
			
		||||
requests are idempotent requests that are typically used to download content (an entity) identified by a request URL.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client();
 | 
			
		||||
 | 
			
		||||
    // Create a request that has a query string and an X-Foo header
 | 
			
		||||
    $request = $client->get('http://www.amazon.com?a=1', array('X-Foo' => 'Bar'));
 | 
			
		||||
 | 
			
		||||
    // Send the request and get the response
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
You can change where the body of a response is downloaded on any request using the
 | 
			
		||||
``$request->setResponseBody(string|EntityBodyInterface|resource)`` method of a request. You can also set the ``save_to``
 | 
			
		||||
option of a request:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Send the response body to a file
 | 
			
		||||
    $request = $client->get('http://test.com', array(), array('save_to' => '/path/to/file'));
 | 
			
		||||
 | 
			
		||||
    // Send the response body to an fopen resource
 | 
			
		||||
    $request = $client->get('http://test.com', array(), array('save_to' => fopen('/path/to/file', 'w')));
 | 
			
		||||
 | 
			
		||||
HEAD requests
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
`HEAD requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4>`_ work exactly like GET requests except
 | 
			
		||||
that they do not actually download the response body (entity) of the response message. HEAD requests are useful for
 | 
			
		||||
retrieving meta information about an entity identified by a Request-URI.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client();
 | 
			
		||||
    $request = $client->head('http://www.amazon.com');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
    echo $response->getContentLength();
 | 
			
		||||
    // >>> Will output the Content-Length header value
 | 
			
		||||
 | 
			
		||||
DELETE requests
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
A `DELETE method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7>`_ requests that the origin server
 | 
			
		||||
delete the resource identified by the Request-URI.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client();
 | 
			
		||||
    $request = $client->delete('http://example.com');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
POST requests
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
While `POST requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5>`_ can be used for a number of
 | 
			
		||||
reasons, POST requests are often used when submitting HTML form data to a website. POST requests can include an entity
 | 
			
		||||
body in the HTTP request.
 | 
			
		||||
 | 
			
		||||
POST requests in Guzzle are sent with an ``application/x-www-form-urlencoded`` Content-Type header if POST fields are
 | 
			
		||||
present but no files are being sent in the POST. If files are specified in the POST request, then the Content-Type
 | 
			
		||||
header will become ``multipart/form-data``.
 | 
			
		||||
 | 
			
		||||
The ``post()`` method of a client object accepts four arguments: the URL, optional headers, post fields, and an array of
 | 
			
		||||
request options. To send files in the POST request, prepend the ``@`` symbol to the array value (just like you would if
 | 
			
		||||
you were using the PHP ``curl_setopt`` function).
 | 
			
		||||
 | 
			
		||||
Here's how to create a multipart/form-data POST request containing files and fields:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('http://httpbin.org/post', array(), array(
 | 
			
		||||
        'custom_field' => 'my custom value',
 | 
			
		||||
        'file_field'   => '@/path/to/file.xml'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    Remember to **always** sanitize user input when sending POST requests:
 | 
			
		||||
 | 
			
		||||
    .. code-block:: php
 | 
			
		||||
 | 
			
		||||
        // Prevent users from accessing sensitive files by sanitizing input
 | 
			
		||||
        $_POST = array('firstname' => '@/etc/passwd');
 | 
			
		||||
        $request = $client->post('http://www.example.com', array(), array (
 | 
			
		||||
            'firstname' => str_replace('@', '', $_POST['firstname'])
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
You can alternatively build up the contents of a POST request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('http://httpbin.org/post')
 | 
			
		||||
        ->setPostField('custom_field', 'my custom value')
 | 
			
		||||
        ->addPostFile('file', '/path/to/file.xml');
 | 
			
		||||
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
Raw POST data
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
POST requests can also contain raw POST data that is not related to HTML forms.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('http://httpbin.org/post', array(), 'this is the body');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
You can set the body of POST request using the ``setBody()`` method of the
 | 
			
		||||
``Guzzle\Http\Message\EntityEnclosingRequest`` object. This method accepts a string, a resource returned from
 | 
			
		||||
``fopen``, or a ``Guzzle\Http\EntityBodyInterface`` object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('http://httpbin.org/post');
 | 
			
		||||
    // Set the body of the POST to stream the contents of /path/to/large_body.txt
 | 
			
		||||
    $request->setBody(fopen('/path/to/large_body.txt', 'r'));
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
PUT requests
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The `PUT method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6>`_ requests that the enclosed entity be
 | 
			
		||||
stored under the supplied Request-URI. PUT requests are similar to POST requests in that they both can send an entity
 | 
			
		||||
body in the request message.
 | 
			
		||||
 | 
			
		||||
The body of a PUT request (any any ``Guzzle\Http\Message\EntityEnclosingRequestInterface`` object) is always stored as
 | 
			
		||||
a ``Guzzle\Http\Message\EntityBodyInterface`` object. This allows a great deal of flexibility when sending data to a
 | 
			
		||||
remote server. For example, you can stream the contents of a stream returned by fopen, stream the contents of a
 | 
			
		||||
callback function, or simply send a string of data.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('http://httpbin.org/put', array(), 'this is the body');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
Just like with POST, PATH, and DELETE requests, you can set the body of a PUT request using the ``setBody()`` method.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('http://httpbin.org/put');
 | 
			
		||||
    $request->setBody(fopen('/path/to/large_body.txt', 'r'));
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
PATCH requests
 | 
			
		||||
~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
`PATCH requests <http://tools.ietf.org/html/rfc5789>`_ are used to modify a resource.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->patch('http://httpbin.org', array(), 'this is the body');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
OPTIONS requests
 | 
			
		||||
~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The `OPTIONS method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2>`_ represents a request for
 | 
			
		||||
information about the communication options available on the request/response chain identified by the Request-URI.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->options('http://httpbin.org');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
    // Check if the PUT method is supported by this resource
 | 
			
		||||
    var_export($response->isMethodAllows('PUT'));
 | 
			
		||||
 | 
			
		||||
Custom requests
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can create custom HTTP requests that use non-standard HTTP methods using the ``createRequest()`` method of a
 | 
			
		||||
client object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->createRequest('COPY', 'http://example.com/foo', array(
 | 
			
		||||
        'Destination' => 'http://example.com/bar',
 | 
			
		||||
        'Overwrite'   => 'T'
 | 
			
		||||
    ));
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
 | 
			
		||||
Query string parameters
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
Query string parameters of a request are owned by a request's ``Guzzle\Http\Query`` object that is accessible by
 | 
			
		||||
calling ``$request->getQuery()``. The Query class extends from ``Guzzle\Common\Collection`` and allows you to set one
 | 
			
		||||
or more query string parameters as key value pairs. You can set a parameter on a Query object using the
 | 
			
		||||
``set($key, $value)`` method or access the query string object like an associative array. Any previously specified
 | 
			
		||||
value for a key will be overwritten when using ``set()``. Use ``add($key, $value)`` to add a value to query string
 | 
			
		||||
object, and in the event of a collision with an existing value at a specific key, the value will be converted to an
 | 
			
		||||
array that contains all of the previously set values.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = new Guzzle\Http\Message\Request('GET', 'http://www.example.com?foo=bar&abc=123');
 | 
			
		||||
 | 
			
		||||
    $query = $request->getQuery();
 | 
			
		||||
    echo "{$query}\n";
 | 
			
		||||
    // >>> foo=bar&abc=123
 | 
			
		||||
 | 
			
		||||
    $query->remove('abc');
 | 
			
		||||
    echo "{$query}\n";
 | 
			
		||||
    // >>> foo=bar
 | 
			
		||||
 | 
			
		||||
    $query->set('foo', 'baz');
 | 
			
		||||
    echo "{$query}\n";
 | 
			
		||||
    // >>> foo=baz
 | 
			
		||||
 | 
			
		||||
    $query->add('foo', 'bar');
 | 
			
		||||
    echo "{$query}\n";
 | 
			
		||||
    // >>> foo%5B0%5D=baz&foo%5B1%5D=bar
 | 
			
		||||
 | 
			
		||||
Whoah! What happened there? When ``foo=bar`` was added to the existing ``foo=baz`` query string parameter, the
 | 
			
		||||
aggregator associated with the Query object was used to help convert multi-value query string parameters into a string.
 | 
			
		||||
Let's disable URL-encoding to better see what's happening.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $query->useUrlEncoding(false);
 | 
			
		||||
    echo "{$query}\n";
 | 
			
		||||
    // >>> foo[0]=baz&foo[1]=bar
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    URL encoding can be disabled by passing false, enabled by passing true, set to use RFC 1738 by passing
 | 
			
		||||
    ``Query::FORM_URLENCODED`` (internally uses PHP's ``urlencode`` function), or set to RFC 3986 by passing
 | 
			
		||||
    ``Query::RFC_3986`` (this is the default and internally uses PHP's ``rawurlencode`` function).
 | 
			
		||||
 | 
			
		||||
As you can see, the multiple values were converted into query string parameters following the default PHP convention of
 | 
			
		||||
adding numerically indexed square bracket suffixes to each key (``foo[0]=baz&foo[1]=bar``). The strategy used to convert
 | 
			
		||||
multi-value parameters into a string can be customized using the ``setAggregator()`` method of the Query class. Guzzle
 | 
			
		||||
ships with the following query string aggregators by default:
 | 
			
		||||
 | 
			
		||||
1. ``Guzzle\Http\QueryAggregator\PhpAggregator``: Aggregates using PHP style brackets (e.g. ``foo[0]=baz&foo[1]=bar``)
 | 
			
		||||
2. ``Guzzle\Http\QueryAggregator\DuplicateAggregator``: Performs no aggregation and allows for key value pairs to be
 | 
			
		||||
   repeated in a URL (e.g. ``foo=baz&foo=bar``)
 | 
			
		||||
3. ``Guzzle\Http\QueryAggregator\CommaAggregator``: Aggregates using commas (e.g. ``foo=baz,bar``)
 | 
			
		||||
 | 
			
		||||
.. _http-message-headers:
 | 
			
		||||
 | 
			
		||||
HTTP Message Headers
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
HTTP message headers are case insensitive, multiple occurrences of any header can be present in an HTTP message
 | 
			
		||||
(whether it's valid or not), and some servers require specific casing of particular headers. Because of this, request
 | 
			
		||||
and response headers are stored in ``Guzzle\Http\Message\Header`` objects. The Header object can be cast as a string,
 | 
			
		||||
counted, or iterated to retrieve each value from the header. Casting a Header object to a string will return all of
 | 
			
		||||
the header values concatenated together using a glue string (typically ", ").
 | 
			
		||||
 | 
			
		||||
A request (and response) object have several methods that allow you to retrieve and modify headers.
 | 
			
		||||
 | 
			
		||||
* ``getHeaders()``: Get all of the headers of a message as a ``Guzzle\Http\Message\Header\HeaderCollection`` object.
 | 
			
		||||
* ``getHeader($header)``: Get a specific header from a message. If the header exists, you'll get a
 | 
			
		||||
  ``Guzzle\Http\Message\Header`` object. If the header does not exist, this methods returns ``null``.
 | 
			
		||||
* ``hasHeader($header)``: Returns true or false based on if the message has a particular header.
 | 
			
		||||
* ``setHeader($header, $value)``: Set a header value and overwrite any previously set value for this header.
 | 
			
		||||
* ``addHeader($header, $value)``: Add a header with a particular name. If a previous value was already set by the same,
 | 
			
		||||
  then the header will contain multiple values.
 | 
			
		||||
* ``removeHeader($header)``: Remove a header by name from the message.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = new Request('GET', 'http://httpbin.com/cookies');
 | 
			
		||||
    // addHeader will set and append to any existing header values
 | 
			
		||||
    $request->addHeader('Foo', 'bar');
 | 
			
		||||
    $request->addHeader('foo', 'baz');
 | 
			
		||||
    // setHeader overwrites any existing values
 | 
			
		||||
    $request->setHeader('Test', '123');
 | 
			
		||||
 | 
			
		||||
    // Request headers can be cast as a string
 | 
			
		||||
    echo $request->getHeader('Foo');
 | 
			
		||||
    // >>> bar, baz
 | 
			
		||||
    echo $request->getHeader('Test');
 | 
			
		||||
    // >>> 123
 | 
			
		||||
 | 
			
		||||
    // You can count the number of headers of a particular case insensitive name
 | 
			
		||||
    echo count($request->getHeader('foO'));
 | 
			
		||||
    // >>> 2
 | 
			
		||||
 | 
			
		||||
    // You can iterate over Header objects
 | 
			
		||||
    foreach ($request->getHeader('foo') as $header) {
 | 
			
		||||
        echo $header . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // You can get all of the request headers as a Guzzle\Http\Message\Header\HeaderCollection object
 | 
			
		||||
    $headers = $request->getHeaders();
 | 
			
		||||
 | 
			
		||||
    // Missing headers return NULL
 | 
			
		||||
    var_export($request->getHeader('Missing'));
 | 
			
		||||
    // >>> null
 | 
			
		||||
 | 
			
		||||
    // You can see all of the different variations of a header by calling raw() on the Header
 | 
			
		||||
    var_export($request->getHeader('foo')->raw());
 | 
			
		||||
 | 
			
		||||
Setting the body of a request
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
Requests that can send a body (e.g. PUT, POST, DELETE, PATCH) are instances of
 | 
			
		||||
``Guzzle\Http\Message\EntityEnclosingRequestInterface``. Entity enclosing requests contain several methods that allow
 | 
			
		||||
you to specify the body to send with a request.
 | 
			
		||||
 | 
			
		||||
Use the ``setBody()`` method of a request to set the body that will be sent with a request. This method accepts a
 | 
			
		||||
string, a resource returned by ``fopen()``, an array, or an instance of ``Guzzle\Http\EntityBodyInterface``. The body
 | 
			
		||||
will then be streamed from the underlying ``EntityBodyInterface`` object owned by the request. When setting the body
 | 
			
		||||
of the request, you can optionally specify a Content-Type header and whether or not to force the request to use
 | 
			
		||||
chunked Transfer-Encoding.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('/user.json');
 | 
			
		||||
    $request->setBody('{"foo":"baz"}', 'application/json');
 | 
			
		||||
 | 
			
		||||
Content-Type header
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Guzzle will automatically add a Content-Type header to a request if the Content-Type can be guessed based on the file
 | 
			
		||||
extension of the payload being sent or the file extension present in the path of a request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('/user.json', array(), '{"foo":"bar"}');
 | 
			
		||||
    // The Content-Type was guessed based on the path of the request
 | 
			
		||||
    echo $request->getHeader('Content-Type');
 | 
			
		||||
    // >>> application/json
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('/user.json');
 | 
			
		||||
    $request->setBody(fopen('/tmp/user_data.json', 'r'));
 | 
			
		||||
    // The Content-Type was guessed based on the path of the entity body
 | 
			
		||||
    echo $request->getHeader('Content-Type');
 | 
			
		||||
    // >>> application/json
 | 
			
		||||
 | 
			
		||||
Transfer-Encoding: chunked header
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When sending HTTP requests that contain a payload, you must let the remote server know how to determine when the entire
 | 
			
		||||
message has been sent. This usually is done by supplying a ``Content-Length`` header that tells the origin server the
 | 
			
		||||
size of the body that is to be sent. In some cases, the size of the payload being sent in a request cannot be known
 | 
			
		||||
before initiating the transfer. In these cases (when using HTTP/1.1), you can use the ``Transfer-Encoding: chunked``
 | 
			
		||||
header.
 | 
			
		||||
 | 
			
		||||
If the Content-Length cannot be determined (i.e. using a PHP ``http://`` stream), then Guzzle will automatically add
 | 
			
		||||
the ``Transfer-Encoding: chunked`` header to the request.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->put('/user.json');
 | 
			
		||||
    $request->setBody(fopen('http://httpbin.org/get', 'r'));
 | 
			
		||||
 | 
			
		||||
    // The Content-Length could not be determined
 | 
			
		||||
    echo $request->getHeader('Transfer-Encoding');
 | 
			
		||||
    // >>> chunked
 | 
			
		||||
 | 
			
		||||
See :doc:`/http-client/entity-bodies` for more information on entity bodies.
 | 
			
		||||
 | 
			
		||||
Expect: 100-Continue header
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ``Expect: 100-Continue`` header is used to help a client prevent sending a large payload to a server that will
 | 
			
		||||
reject the request. This allows clients to fail fast rather than waste bandwidth sending an erroneous payload. Guzzle
 | 
			
		||||
will automatically add the ``Expect: 100-Continue`` header to a request when the size of the payload exceeds 1MB or if
 | 
			
		||||
the body of the request is not seekable (this helps to prevent errors when a non-seekable body request is redirected).
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    If you find that your larger requests are taking too long to complete, you should first check if the
 | 
			
		||||
    ``Expect: 100-Continue`` header is being sent with the request. Some servers do not respond well to this header,
 | 
			
		||||
    which causes cURL to sleep for `1 second <http://curl.haxx.se/mail/lib-2010-01/0182.html>`_.
 | 
			
		||||
 | 
			
		||||
POST fields and files
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Any entity enclosing request can send POST style fields and files. This includes POST, PUT, PATCH, and DELETE requests.
 | 
			
		||||
Any request that has set POST fields or files will use cURL's POST message functionality.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('/post');
 | 
			
		||||
    // Set an overwrite any previously specified value
 | 
			
		||||
    $request->setPostField('foo', 'bar');
 | 
			
		||||
    // Append a value to any existing values
 | 
			
		||||
    $request->getPostFields()->add('foo', 'baz');
 | 
			
		||||
    // Remove a POST field by name
 | 
			
		||||
    $request->removePostField('fizz');
 | 
			
		||||
 | 
			
		||||
    // Add a file to upload (forces multipart/form-data)
 | 
			
		||||
    $request->addPostFile('my_file', '/path/to/file', 'plain/text');
 | 
			
		||||
    // Remove a POST file by POST key name
 | 
			
		||||
    $request->removePostFile('my_other_file');
 | 
			
		||||
 | 
			
		||||
.. tip::
 | 
			
		||||
 | 
			
		||||
    Adding a large number of POST fields to a POST request is faster if you use the ``addPostFields()`` method so that
 | 
			
		||||
    you can add and process multiple fields with a single call. Adding multiple POST files is also faster using
 | 
			
		||||
    ``addPostFiles()``.
 | 
			
		||||
 | 
			
		||||
Working with cookies
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Cookies can be modified and retrieved from a request using the following methods:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request->addCookie($name, $value);
 | 
			
		||||
    $request->removeCookie($name);
 | 
			
		||||
    $value = $request->getCookie($name);
 | 
			
		||||
    $valueArray = $request->getCookies();
 | 
			
		||||
 | 
			
		||||
Use the :doc:`cookie plugin </plugins/cookie-plugin>` if you need to reuse cookies between requests.
 | 
			
		||||
 | 
			
		||||
.. _request-set-response-body:
 | 
			
		||||
 | 
			
		||||
Changing where a response is downloaded
 | 
			
		||||
----------------------------------------
 | 
			
		||||
 | 
			
		||||
When a request is sent, the body of the response will be stored in a PHP temp stream by default. You can change the
 | 
			
		||||
location in which the response will be downloaded using ``$request->setResponseBody($body)`` or the ``save_to`` request
 | 
			
		||||
option. This can be useful for downloading the contents of a URL to a specific file.
 | 
			
		||||
 | 
			
		||||
Here's an example of using request options:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $this->client->get('http://example.com/large.mov', array(), array(
 | 
			
		||||
        'save_to' => '/tmp/large_file.mov'
 | 
			
		||||
    ));
 | 
			
		||||
    $request->send();
 | 
			
		||||
    var_export(file_exists('/tmp/large_file.mov'));
 | 
			
		||||
    // >>> true
 | 
			
		||||
 | 
			
		||||
Here's an example of using ``setResponseBody()``:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $body = fopen('/tmp/large_file.mov', 'w');
 | 
			
		||||
    $request = $this->client->get('http://example.com/large.mov');
 | 
			
		||||
    $request->setResponseBody($body);
 | 
			
		||||
 | 
			
		||||
    // You can more easily specify the name of a file to save the contents
 | 
			
		||||
    // of the response to by passing a string to ``setResponseBody()``.
 | 
			
		||||
 | 
			
		||||
    $request = $this->client->get('http://example.com/large.mov');
 | 
			
		||||
    $request->setResponseBody('/tmp/large_file.mov');
 | 
			
		||||
 | 
			
		||||
Custom cURL options
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Most of the functionality implemented in the libcurl bindings has been simplified and abstracted by Guzzle. Developers
 | 
			
		||||
who need access to `cURL specific functionality <http://www.php.net/curl_setopt>`_ can still add cURL handle
 | 
			
		||||
specific behavior to Guzzle HTTP requests by modifying the cURL options collection of a request:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request->getCurlOptions()->set(CURLOPT_LOW_SPEED_LIMIT, 200);
 | 
			
		||||
 | 
			
		||||
Other special options that can be set in the ``curl.options`` array include:
 | 
			
		||||
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| debug                   | Adds verbose cURL output to a temp stream owned by the cURL handle object       |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
| progress                | Instructs cURL to emit events when IO events occur. This allows you to be       |
 | 
			
		||||
|                         | notified when bytes are transferred over the wire by subscribing to a request's |
 | 
			
		||||
|                         | ``curl.callback.read``, ``curl.callback.write``, and ``curl.callback.progress`` |
 | 
			
		||||
|                         | events.                                                                         |
 | 
			
		||||
+-------------------------+---------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Request options
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Requests options can be specified when creating a request or in the ``request.options`` parameter of a client. These
 | 
			
		||||
options can control various aspects of a request including: headers to send, query string data, where the response
 | 
			
		||||
should be downloaded, proxies, auth, etc.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get($url, $headers, array('proxy' => 'http://proxy.com'));
 | 
			
		||||
 | 
			
		||||
See :ref:`Request options <request-options>` for more information.
 | 
			
		||||
 | 
			
		||||
Working with errors
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
HTTP errors
 | 
			
		||||
~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Requests that receive a 4xx or 5xx response will throw a ``Guzzle\Http\Exception\BadResponseException``. More
 | 
			
		||||
specifically, 4xx errors throw a ``Guzzle\Http\Exception\ClientErrorResponseException``, and 5xx errors throw a
 | 
			
		||||
``Guzzle\Http\Exception\ServerErrorResponseException``. You can catch the specific exceptions or just catch the
 | 
			
		||||
BadResponseException to deal with either type of error. Here's an example of catching a generic BadResponseException:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        $response = $client->get('/not_found.xml')->send();
 | 
			
		||||
    } catch (Guzzle\Http\Exception\BadResponseException $e) {
 | 
			
		||||
        echo 'Uh oh! ' . $e->getMessage();
 | 
			
		||||
        echo 'HTTP request URL: ' . $e->getRequest()->getUrl() . "\n";
 | 
			
		||||
        echo 'HTTP request: ' . $e->getRequest() . "\n";
 | 
			
		||||
        echo 'HTTP response status: ' . $e->getResponse()->getStatusCode() . "\n";
 | 
			
		||||
        echo 'HTTP response: ' . $e->getResponse() . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Throwing an exception when a 4xx or 5xx response is encountered is the default behavior of Guzzle requests. This
 | 
			
		||||
behavior can be overridden by adding an event listener with a higher priority than -255 that stops event propagation.
 | 
			
		||||
You can subscribe to ``request.error`` to receive notifications any time an unsuccessful response is received.
 | 
			
		||||
 | 
			
		||||
You can change the response that will be associated with the request by calling ``setResponse()`` on the
 | 
			
		||||
``$event['request']`` object passed into your listener, or by changing the ``$event['response']`` value of the
 | 
			
		||||
``Guzzle\Common\Event`` object that is passed to your listener. Transparently changing the response associated with a
 | 
			
		||||
request by modifying the event allows you to retry failed requests without complicating the code that uses the client.
 | 
			
		||||
This might be useful for sending requests to a web service that has expiring auth tokens. When a response shows that
 | 
			
		||||
your token has expired, you can get a new token, retry the request with the new token, and return the successful
 | 
			
		||||
response to the user.
 | 
			
		||||
 | 
			
		||||
Here's an example of retrying a request using updated authorization credentials when a 401 response is received,
 | 
			
		||||
overriding the response of the original request with the new response, and still allowing the default exception
 | 
			
		||||
behavior to be called when other non-200 response status codes are encountered:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Add custom error handling to any request created by this client
 | 
			
		||||
    $client->getEventDispatcher()->addListener('request.error', function(Event $event) {
 | 
			
		||||
 | 
			
		||||
        if ($event['response']->getStatusCode() == 401) {
 | 
			
		||||
 | 
			
		||||
            $newRequest = $event['request']->clone();
 | 
			
		||||
            $newRequest->setHeader('X-Auth-Header', MyApplication::getNewAuthToken());
 | 
			
		||||
            $newResponse = $newRequest->send();
 | 
			
		||||
 | 
			
		||||
            // Set the response object of the request without firing more events
 | 
			
		||||
            $event['response'] = $newResponse;
 | 
			
		||||
 | 
			
		||||
            // You can also change the response and fire the normal chain of
 | 
			
		||||
            // events by calling $event['request']->setResponse($newResponse);
 | 
			
		||||
 | 
			
		||||
            // Stop other events from firing when you override 401 responses
 | 
			
		||||
            $event->stopPropagation();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
cURL errors
 | 
			
		||||
~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Connection problems and cURL specific errors can also occur when transferring requests using Guzzle. When Guzzle
 | 
			
		||||
encounters cURL specific errors while transferring a single request, a ``Guzzle\Http\Exception\CurlException`` is
 | 
			
		||||
thrown with an informative error message and access to the cURL error message.
 | 
			
		||||
 | 
			
		||||
A ``Guzzle\Http\Exception\MultiTransferException`` exception is thrown when a cURL specific error occurs while
 | 
			
		||||
transferring multiple requests in parallel. You can then iterate over all of the exceptions encountered during the
 | 
			
		||||
transfer.
 | 
			
		||||
 | 
			
		||||
Plugins and events
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Guzzle request objects expose various events that allow you to hook in custom logic. A request object owns a
 | 
			
		||||
``Symfony\Component\EventDispatcher\EventDispatcher`` object that can be accessed by calling
 | 
			
		||||
``$request->getEventDispatcher()``. You can use the event dispatcher to add listeners (a simple callback function) or
 | 
			
		||||
event subscribers (classes that listen to specific events of a dispatcher). You can add event subscribers to a request
 | 
			
		||||
directly by just calling ``$request->addSubscriber($mySubscriber);``.
 | 
			
		||||
 | 
			
		||||
.. _request-events:
 | 
			
		||||
 | 
			
		||||
Events emitted from a request
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
A ``Guzzle\Http\Message\Request`` and ``Guzzle\Http\Message\EntityEnclosingRequest`` object emit the following events:
 | 
			
		||||
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| Event name                   | Description                                | Event data                               |
 | 
			
		||||
+==============================+============================================+==========================================+
 | 
			
		||||
| request.before_send          | About to send request                      | * request: Request to be sent            |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.sent                 | Sent the request                           | * request: Request that was sent         |
 | 
			
		||||
|                              |                                            | * response: Received response            |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.complete             | Completed a full HTTP transaction          | * request: Request that was sent         |
 | 
			
		||||
|                              |                                            | * response: Received response            |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.success              | Completed a successful request             | * request: Request that was sent         |
 | 
			
		||||
|                              |                                            | * response: Received response            |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.error                | Completed an unsuccessful request          | * request: Request that was sent         |
 | 
			
		||||
|                              |                                            | * response: Received response            |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.exception            | An unsuccessful response was               | * request: Request                       |
 | 
			
		||||
|                              | received.                                  | * response: Received response            |
 | 
			
		||||
|                              |                                            | * exception: BadResponseException        |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| request.receive.status_line  | Received the start of a response           | * line: Full response start line         |
 | 
			
		||||
|                              |                                            | * status_code: Status code               |
 | 
			
		||||
|                              |                                            | * reason_phrase: Reason phrase           |
 | 
			
		||||
|                              |                                            | * previous_response: (e.g. redirect)     |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| curl.callback.progress       | cURL progress event (only dispatched when  | * handle: CurlHandle                     |
 | 
			
		||||
|                              | ``emit_io`` is set on a request's curl     | * download_size: Total download size     |
 | 
			
		||||
|                              | options)                                   | * downloaded: Bytes downloaded           |
 | 
			
		||||
|                              |                                            | * upload_size: Total upload bytes        |
 | 
			
		||||
|                              |                                            | * uploaded: Bytes uploaded               |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| curl.callback.write          | cURL event called when data is written to  | * request: Request                       |
 | 
			
		||||
|                              | an outgoing stream                         | * write: Data being written              |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| curl.callback.read           | cURL event called when data is written to  | * request: Request                       |
 | 
			
		||||
|                              | an incoming stream                         | * read: Data being read                  |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
 | 
			
		||||
Creating a request event listener
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Here's an example that listens to the ``request.complete`` event of a request and prints the request and response.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('http://www.google.com');
 | 
			
		||||
 | 
			
		||||
    // Echo out the response that was received
 | 
			
		||||
    $request->getEventDispatcher()->addListener('request.complete', function (Event $e) {
 | 
			
		||||
        echo $e['request'] . "\n\n";
 | 
			
		||||
        echo $e['response'];
 | 
			
		||||
    });
 | 
			
		||||
							
								
								
									
										141
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/response.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/response.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
======================
 | 
			
		||||
Using Response objects
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
Sending a request will return a ``Guzzle\Http\Message\Response`` object. You can view the raw  HTTP response message by
 | 
			
		||||
casting the Response object to a string. Casting the response to a string will return the entity body of the response
 | 
			
		||||
as a string too, so this might be an expensive operation if the entity body is stored in a file or network stream. If
 | 
			
		||||
you only want to see the response headers, you can call ``getRawHeaders()``.
 | 
			
		||||
 | 
			
		||||
Response status line
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
The different parts of a response's `status line <http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1>`_
 | 
			
		||||
(the first line of the response HTTP message) are easily retrievable.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $response = $client->get('http://www.amazon.com')->send();
 | 
			
		||||
 | 
			
		||||
    echo $response->getStatusCode();      // >>> 200
 | 
			
		||||
    echo $response->getReasonPhrase();    // >>> OK
 | 
			
		||||
    echo $response->getProtocol();        // >>> HTTP
 | 
			
		||||
    echo $response->getProtocolVersion(); // >>> 1.1
 | 
			
		||||
 | 
			
		||||
You can determine the type of the response using several helper methods:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $response->isSuccessful(); // true
 | 
			
		||||
    $response->isInformational();
 | 
			
		||||
    $response->isRedirect();
 | 
			
		||||
    $response->isClientError();
 | 
			
		||||
    $response->isServerError();
 | 
			
		||||
 | 
			
		||||
Response headers
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
The Response object contains helper methods for retrieving common response headers. These helper methods normalize the
 | 
			
		||||
variations of HTTP response headers.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $response->getCacheControl();
 | 
			
		||||
    $response->getContentType();
 | 
			
		||||
    $response->getContentLength();
 | 
			
		||||
    $response->getContentEncoding();
 | 
			
		||||
    $response->getContentMd5();
 | 
			
		||||
    $response->getEtag();
 | 
			
		||||
    // etc... There are methods for every known response header
 | 
			
		||||
 | 
			
		||||
You can interact with the Response headers using the same exact methods used to interact with Request headers. See
 | 
			
		||||
:ref:`http-message-headers` for more information.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    echo $response->getHeader('Content-Type');
 | 
			
		||||
    echo $response->getHeader('Content-Length');
 | 
			
		||||
    echo $response->getHeaders()['Content-Type']; // PHP 5.4
 | 
			
		||||
 | 
			
		||||
Response body
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
The entity body object of a response can be retrieved by calling ``$response->getBody()``. The response EntityBody can
 | 
			
		||||
be cast to a string, or you can pass ``true`` to this method to retrieve the body as a string.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('http://www.amazon.com');
 | 
			
		||||
    $response = $request->send();
 | 
			
		||||
    echo $response->getBody();
 | 
			
		||||
 | 
			
		||||
See :doc:`/http-client/entity-bodies` for more information on entity bodies.
 | 
			
		||||
 | 
			
		||||
JSON Responses
 | 
			
		||||
~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can easily parse and use a JSON response as an array using the ``json()`` method of a response. This method will
 | 
			
		||||
always return an array if the response is valid JSON or if the response body is empty. You will get an exception if you
 | 
			
		||||
call this method and the response is not valid JSON.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $data = $response->json();
 | 
			
		||||
    echo gettype($data);
 | 
			
		||||
    // >>> array
 | 
			
		||||
 | 
			
		||||
XML Responses
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can easily parse and use a XML response as SimpleXMLElement object using the ``xml()`` method of a response. This
 | 
			
		||||
method will always return a SimpleXMLElement object if the response is valid XML or if the response body is empty. You
 | 
			
		||||
will get an exception if you call this method and the response is not valid XML.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $xml = $response->xml();
 | 
			
		||||
    echo $xml->foo;
 | 
			
		||||
    // >>> Bar!
 | 
			
		||||
 | 
			
		||||
Streaming responses
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Some web services provide streaming APIs that allow a client to keep a HTTP request open for an extended period of
 | 
			
		||||
time while polling and reading. Guzzle provides a simple way to convert HTTP request messages into
 | 
			
		||||
``Guzzle\Stream\Stream`` objects so that you can send the initial headers of a request, read the response headers, and
 | 
			
		||||
pull in the response body manually as needed.
 | 
			
		||||
 | 
			
		||||
Here's an example using the Twitter Streaming API to track the keyword "bieber":
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Stream\PhpStreamRequestFactory;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('https://stream.twitter.com/1');
 | 
			
		||||
 | 
			
		||||
    $request = $client->post('statuses/filter.json', null, array(
 | 
			
		||||
        'track' => 'bieber'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    $request->setAuth('myusername', 'mypassword');
 | 
			
		||||
 | 
			
		||||
    $factory = new PhpStreamRequestFactory();
 | 
			
		||||
    $stream = $factory->fromRequest($request);
 | 
			
		||||
 | 
			
		||||
    // Read until the stream is closed
 | 
			
		||||
    while (!$stream->feof()) {
 | 
			
		||||
        // Read a line from the stream
 | 
			
		||||
        $line = $stream->readLine();
 | 
			
		||||
        // JSON decode the line of data
 | 
			
		||||
        $data = json_decode($line, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
You can use the ``stream`` request option when using a static client to more easily create a streaming response.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $stream = Guzzle::get('http://guzzlephp.org', array('stream' => true));
 | 
			
		||||
    while (!$stream->feof()) {
 | 
			
		||||
        echo $stream->readLine();
 | 
			
		||||
    }
 | 
			
		||||
							
								
								
									
										52
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/uri-templates.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/uri-templates.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
=============
 | 
			
		||||
URI templates
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
The ``$uri`` passed to one of the client's request creational methods or the base URL of a client can utilize URI
 | 
			
		||||
templates. Guzzle supports the entire `URI templates RFC <http://tools.ietf.org/html/rfc6570>`_. URI templates add a
 | 
			
		||||
special syntax to URIs that replace template place holders with user defined variables.
 | 
			
		||||
 | 
			
		||||
Every request created by a Guzzle HTTP client passes through a URI template so that URI template expressions are
 | 
			
		||||
automatically expanded:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client('https://example.com/', array('a' => 'hi'));
 | 
			
		||||
    $request = $client->get('/{a}');
 | 
			
		||||
 | 
			
		||||
Because of URI template expansion, the URL of the above request will become ``https://example.com/hi``. Notice that
 | 
			
		||||
the template was expanded using configuration variables of the client. You can pass in custom URI template variables
 | 
			
		||||
by passing the URI of your request as an array where the first index of the array is the URI template and the second
 | 
			
		||||
index of the array are template variables that are merged into the client's configuration variables.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get(array('/test{?a,b}', array('b' => 'there')));
 | 
			
		||||
 | 
			
		||||
The URL for this request will become ``https://test.com?a=hi&b=there``. URI templates aren't limited to just simple
 | 
			
		||||
variable replacements;  URI templates can provide an enormous amount of flexibility when creating request URIs.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $client->get(array('http://example.com{+path}{/segments*}{?query,data*}', array(
 | 
			
		||||
        'path'     => '/foo/bar',
 | 
			
		||||
        'segments' => array('one', 'two'),
 | 
			
		||||
        'query'    => 'test',
 | 
			
		||||
        'data'     => array(
 | 
			
		||||
            'more' => 'value'
 | 
			
		||||
        )
 | 
			
		||||
    )));
 | 
			
		||||
 | 
			
		||||
The resulting URL would become ``http://example.com/foo/bar/one/two?query=test&more=value``.
 | 
			
		||||
 | 
			
		||||
By default, URI template expressions are enclosed in an opening and closing brace (e.g. ``{var}``). If you are working
 | 
			
		||||
with a web service that actually uses braces (e.g. Solr), then you can specify a custom regular expression to use to
 | 
			
		||||
match URI template expressions.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client->getUriTemplate()->setRegex('/\<\$(.+)\>/');
 | 
			
		||||
    $client->get('/<$a>');
 | 
			
		||||
 | 
			
		||||
You can learn about all of the different features of URI templates by reading the
 | 
			
		||||
`URI templates RFC <http://tools.ietf.org/html/rfc6570>`_.
 | 
			
		||||
							
								
								
									
										5
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/index.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/index.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
.. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :hidden:
 | 
			
		||||
 | 
			
		||||
    docs.rst
 | 
			
		||||
							
								
								
									
										97
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
================
 | 
			
		||||
Guzzle iterators
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
Guzzle provides several SPL iterators that can be used with other SPL iterators, including Guzzle resource iterators.
 | 
			
		||||
Guzzle's ``guzzle/iterator`` component can also be used independently of the rest of Guzzle through Packagist and
 | 
			
		||||
Composer: https://packagist.org/packages/guzzle/iterator
 | 
			
		||||
 | 
			
		||||
ChunkedIterator
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Pulls out multiple values from an inner iterator and yields and array of values for each outer iteration -- essentially
 | 
			
		||||
pulling out chunks of values from the inner iterator.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Iterator\ChunkedIterator;
 | 
			
		||||
 | 
			
		||||
    $inner = new ArrayIterator(range(0, 8));
 | 
			
		||||
    $chunkedIterator = new ChunkedIterator($inner, 2);
 | 
			
		||||
 | 
			
		||||
    foreach ($chunkedIterator as $chunk) {
 | 
			
		||||
        echo implode(', ', $chunk) . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // >>> 0, 1
 | 
			
		||||
    // >>> 2, 3
 | 
			
		||||
    // >>> 4, 5
 | 
			
		||||
    // >>> 6, 7
 | 
			
		||||
    // >>> 8
 | 
			
		||||
 | 
			
		||||
FilterIterator
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
This iterator is used to filter values out of the inner iterator. This iterator can be used when PHP 5.4's
 | 
			
		||||
CallbackFilterIterator is not available.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Iterator\FilterIterator;
 | 
			
		||||
 | 
			
		||||
    $inner = new ArrayIterator(range(1, 10));
 | 
			
		||||
    $filterIterator = new FilterIterator($inner, function ($value) {
 | 
			
		||||
        return $value % 2;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    foreach ($filterIterator as $value) {
 | 
			
		||||
        echo $value . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // >>> 2
 | 
			
		||||
    // >>> 4
 | 
			
		||||
    // >>> 6
 | 
			
		||||
    // >>> 8
 | 
			
		||||
    // >>> 10
 | 
			
		||||
 | 
			
		||||
MapIterator
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
This iterator modifies the values of the inner iterator before yielding.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Iterator\MapIterator;
 | 
			
		||||
 | 
			
		||||
    $inner = new ArrayIterator(range(0, 3));
 | 
			
		||||
 | 
			
		||||
    $mapIterator = new MapIterator($inner, function ($value) {
 | 
			
		||||
        return $value * 10;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    foreach ($mapIterator as $value) {
 | 
			
		||||
        echo $value . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // >>> 0
 | 
			
		||||
    // >>> 10
 | 
			
		||||
    // >>> 20
 | 
			
		||||
    // >>> 30
 | 
			
		||||
 | 
			
		||||
MethodProxyIterator
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
This decorator is useful when you need to expose a specific method from an inner iterator that might be wrapper
 | 
			
		||||
by one or more iterator decorators. This decorator proxies missing method calls to each inner iterator until one
 | 
			
		||||
of the inner iterators can fulfill the call.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Iterator\MethodProxyIterator;
 | 
			
		||||
 | 
			
		||||
    $inner = new \ArrayIterator();
 | 
			
		||||
    $proxy = new MethodProxyIterator($inner);
 | 
			
		||||
 | 
			
		||||
    // Proxy method calls to the ArrayIterator
 | 
			
		||||
    $proxy->append('a');
 | 
			
		||||
    $proxy->append('b');
 | 
			
		||||
							
								
								
									
										149
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/resource-iterators.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/resource-iterators.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
==================
 | 
			
		||||
Resource iterators
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
Web services often implement pagination in their responses which requires the end-user to issue a series of consecutive
 | 
			
		||||
requests in order to fetch all of the data they asked for. Users of your web service client should not be responsible
 | 
			
		||||
for implementing the logic involved in iterating through pages of results. Guzzle provides a simple resource iterator
 | 
			
		||||
foundation to make it easier on web service client developers to offer a useful abstraction layer.
 | 
			
		||||
 | 
			
		||||
Getting an iterator from a client
 | 
			
		||||
---------------------------------
 | 
			
		||||
 | 
			
		||||
    ResourceIteratorInterface Guzzle\Service\Client::getIterator($command [, array $commandOptions, array $iteratorOptions ])
 | 
			
		||||
 | 
			
		||||
The ``getIterator`` method of a ``Guzzle\Service\ClientInterface`` object provides a convenient interface for
 | 
			
		||||
instantiating a resource iterator for a specific command. This method implicitly uses a
 | 
			
		||||
``Guzzle\Service\Resource\ResourceIteratorFactoryInterface`` object to create resource iterators. Pass an
 | 
			
		||||
instantiated command object or the name of a command in the first argument. When passing the name of a command, the
 | 
			
		||||
command factory of the client will create the command by name using the ``$commandOptions`` array. The third argument
 | 
			
		||||
may be used to pass an array of options to the constructor of the instantiated ``ResourceIteratorInterface`` object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $iterator = $client->getIterator('get_users');
 | 
			
		||||
 | 
			
		||||
    foreach ($iterator as $user) {
 | 
			
		||||
        echo $user['name'] . ' age ' . $user['age'] . PHP_EOL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
The above code sample might execute a single request or a thousand requests. As a consumer of a web service, I don't
 | 
			
		||||
care. I just want to iterate over all of the users.
 | 
			
		||||
 | 
			
		||||
Iterator options
 | 
			
		||||
~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The two universal options that iterators should support are ``limit`` and ``page_size``. Using the ``limit`` option
 | 
			
		||||
tells the resource iterator to attempt to limit the total number of iterated resources to a specific amount. Keep in
 | 
			
		||||
mind that this is not always possible due to limitations that may be inherent to a web service. The ``page_size``
 | 
			
		||||
option is used to tell a resource iterator how many resources to request per page of results. Much like the ``limit``
 | 
			
		||||
option, you can not rely on getting back exactly the number of resources your specify in the ``page_size`` option.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    The ``limit`` and ``page_size`` options can also be specified on an iterator using the ``setLimit($limit)`` and
 | 
			
		||||
    ``setPageSize($pageSize)`` methods.
 | 
			
		||||
 | 
			
		||||
Resolving iterator class names
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The default resource iterator factory of a client object expects that your iterators are stored under the ``Model``
 | 
			
		||||
folder of your client and that an iterator is names after the CamelCase name of a command followed by the word
 | 
			
		||||
"Iterator". For example, if you wanted to create an iterator for the ``get_users`` command, then your iterator class
 | 
			
		||||
would be ``Model\GetUsersIterator`` and would be stored in ``Model/GetUsersIterator.php``.
 | 
			
		||||
 | 
			
		||||
Creating an iterator
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
While not required, resource iterators in Guzzle typically iterate using a ``Guzzle\Service\Command\CommandInterface``
 | 
			
		||||
object. ``Guzzle\Service\Resource\ResourceIterator``, the default iterator implementation that you should extend,
 | 
			
		||||
accepts a command object and array of iterator options in its constructor. The command object passed to the resource
 | 
			
		||||
iterator is expected to be ready to execute and not previously executed. The resource iterator keeps a reference of
 | 
			
		||||
this command and clones the original command each time a subsequent request needs to be made to fetch more data.
 | 
			
		||||
 | 
			
		||||
Implement the sendRequest method
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The most important thing (and usually the only thing) you need to do when creating a resource iterator is to implement
 | 
			
		||||
the ``sendRequest()`` method of the resource iterator. The ``sendRequest()`` method is called when you begin
 | 
			
		||||
iterating or if there are no resources left to iterate and it you expect to retrieve more resources by making a
 | 
			
		||||
subsequent request. The ``$this->command`` property of the resource iterator is updated with a cloned copy of the
 | 
			
		||||
original command object passed into the constructor of the iterator. Use this command object to issue your subsequent
 | 
			
		||||
requests.
 | 
			
		||||
 | 
			
		||||
The ``sendRequest()`` method must return an array of the resources you retrieved from making the subsequent call.
 | 
			
		||||
Returning an empty array will stop the iteration. If you suspect that your web service client will occasionally return
 | 
			
		||||
an empty result set but still requires further iteration, then you must implement a sort of loop in your
 | 
			
		||||
``sendRequest()`` method that will continue to issue subsequent requests until your reach the end of the paginated
 | 
			
		||||
result set or until additional resources are retrieved from the web service.
 | 
			
		||||
 | 
			
		||||
Update the nextToken property
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Beyond fetching more results, the ``sendRequest()`` method is responsible for updating the ``$this->nextToken``
 | 
			
		||||
property of the iterator. Setting this property to anything other than null tells the iterator that issuing a
 | 
			
		||||
subsequent request using the nextToken value will probably return more results. You must continually update this
 | 
			
		||||
value in your ``sendRequest()`` method as each response is received from the web service.
 | 
			
		||||
 | 
			
		||||
Example iterator
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
Let's say you want to implement a resource iterator for the ``get_users`` command of your web service. The
 | 
			
		||||
``get_users`` command receives a response that contains a list of users, and if there are more pages of results to
 | 
			
		||||
retrieve, returns a value called ``next_user``. This return value is known as the **next token** and should be used to
 | 
			
		||||
issue subsequent requests.
 | 
			
		||||
 | 
			
		||||
Assume the response to a ``get_users`` command returns JSON data that looks like this:
 | 
			
		||||
 | 
			
		||||
.. code-block:: javascript
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "users": [
 | 
			
		||||
            { "name": "Craig Johnson", "age": 10 },
 | 
			
		||||
            { "name": "Tom Barker", "age": 20 },
 | 
			
		||||
            { "name": "Bob Mitchell", "age": 74 }
 | 
			
		||||
        ],
 | 
			
		||||
        "next_user": "Michael Dowling"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Assume that because there is a ``next_user`` value, there will be more users if a subsequent request is issued. If the
 | 
			
		||||
``next_user`` value is missing or null, then we know there are no more results to fetch. Let's implement a resource
 | 
			
		||||
iterator for this command.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    namespace MyService\Model;
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Resource\ResourceIterator;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Iterate over a get_users command
 | 
			
		||||
     */
 | 
			
		||||
    class GetUsersIterator extends ResourceIterator
 | 
			
		||||
    {
 | 
			
		||||
        protected function sendRequest()
 | 
			
		||||
        {
 | 
			
		||||
            // If a next token is set, then add it to the command
 | 
			
		||||
            if ($this->nextToken) {
 | 
			
		||||
                $this->command->set('next_user', $this->nextToken);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Execute the command and parse the result
 | 
			
		||||
            $result = $this->command->execute();
 | 
			
		||||
 | 
			
		||||
            // Parse the next token
 | 
			
		||||
            $this->nextToken = isset($result['next_user']) ? $result['next_user'] : false;
 | 
			
		||||
 | 
			
		||||
            return $result['users'];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
As you can see, it's pretty simple to implement an iterator. There are a few things that you should notice from this
 | 
			
		||||
example:
 | 
			
		||||
 | 
			
		||||
1. You do not need to create a new command in the ``sendRequest()`` method. A new command object is cloned from the
 | 
			
		||||
   original command passed into the constructor of the iterator before the ``sendRequest()`` method is called.
 | 
			
		||||
   Remember that the resource iterator expects a command that has not been executed.
 | 
			
		||||
2. When the ``sendRequest()`` method is first called, you will not have a ``$this->nextToken`` value, so always check
 | 
			
		||||
   before setting it on a command. Notice that the next token is being updated each time a request is sent.
 | 
			
		||||
3. After fetching more resources from the service, always return an array of resources.
 | 
			
		||||
							
								
								
									
										18
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/async-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/async-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
============
 | 
			
		||||
Async plugin
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
The AsyncPlugin allows you to send requests that do not wait on a response. This is handled through cURL by utilizing
 | 
			
		||||
the progress event. When a request has sent all of its data to the remote server, Guzzle adds a 1ms timeout on the
 | 
			
		||||
request and instructs cURL to not download the body of the response. The async plugin then catches the exception and
 | 
			
		||||
adds a mock response to the request, along with an X-Guzzle-Async header to let you know that the response was not
 | 
			
		||||
fully downloaded.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Async\AsyncPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.example.com');
 | 
			
		||||
    $client->addSubscriber(new AsyncPlugin());
 | 
			
		||||
    $response = $client->get()->send();
 | 
			
		||||
							
								
								
									
										22
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/backoff-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/backoff-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
====================
 | 
			
		||||
Backoff retry plugin
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
The ``Guzzle\Plugin\Backoff\BackoffPlugin`` automatically retries failed HTTP requests using custom backoff strategies:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Backoff\BackoffPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
    // Use a static factory method to get a backoff plugin using the exponential backoff strategy
 | 
			
		||||
    $backoffPlugin = BackoffPlugin::getExponentialBackoff();
 | 
			
		||||
 | 
			
		||||
    // Add the backoff plugin to the client object
 | 
			
		||||
    $client->addSubscriber($backoffPlugin);
 | 
			
		||||
 | 
			
		||||
The BackoffPlugin's constructor accepts a ``Guzzle\Plugin\Backoff\BackoffStrategyInterface`` object that is used to
 | 
			
		||||
determine when a retry should be issued and how long to delay between retries. The above code example shows how to
 | 
			
		||||
attach a BackoffPlugin to a client that is pre-configured to retry failed 500 and 503 responses using truncated
 | 
			
		||||
exponential backoff (emulating the behavior of Guzzle 2's ExponentialBackoffPlugin).
 | 
			
		||||
							
								
								
									
										169
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cache-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cache-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
=================
 | 
			
		||||
HTTP Cache plugin
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
Guzzle can leverage HTTP's caching specifications using the ``Guzzle\Plugin\Cache\CachePlugin``. The CachePlugin
 | 
			
		||||
provides a private transparent proxy cache that caches HTTP responses. The caching logic, based on
 | 
			
		||||
`RFC 2616 <http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html>`_, uses HTTP headers to control caching behavior,
 | 
			
		||||
cache lifetime, and supports Vary, ETag, and Last-Modified based revalidation:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Doctrine\Common\Cache\FilesystemCache;
 | 
			
		||||
    use Guzzle\Cache\DoctrineCacheAdapter;
 | 
			
		||||
    use Guzzle\Plugin\Cache\CachePlugin;
 | 
			
		||||
    use Guzzle\Plugin\Cache\DefaultCacheStorage;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    $cachePlugin = new CachePlugin(array(
 | 
			
		||||
        'storage' => new DefaultCacheStorage(
 | 
			
		||||
            new DoctrineCacheAdapter(
 | 
			
		||||
                new FilesystemCache('/path/to/cache/files')
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    // Add the cache plugin to the client object
 | 
			
		||||
    $client->addSubscriber($cachePlugin);
 | 
			
		||||
    $client->get('http://www.wikipedia.org/')->send();
 | 
			
		||||
 | 
			
		||||
    // The next request will revalidate against the origin server to see if it
 | 
			
		||||
    // has been modified. If a 304 response is received the response will be
 | 
			
		||||
    // served from cache
 | 
			
		||||
    $client->get('http://www.wikipedia.org/')->send();
 | 
			
		||||
 | 
			
		||||
The cache plugin intercepts GET and HEAD requests before they are actually transferred to the origin server. The cache
 | 
			
		||||
plugin then generates a hash key based on the request method and URL, and checks to see if a response exists in the cache. If
 | 
			
		||||
a response exists in the cache, the cache adapter then checks to make sure that the caching rules associated with the response
 | 
			
		||||
satisfy the request, and ensures that response still fresh. If the response is acceptable for the request any required
 | 
			
		||||
revalidation, then the cached response is served instead of contacting the origin server.
 | 
			
		||||
 | 
			
		||||
Vary
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
Cache keys are derived from a request method and a request URL. Multiple responses can map to the same cache key and
 | 
			
		||||
stored in Guzzle's underlying cache storage object. You should use the ``Vary`` HTTP header to tell the cache storage
 | 
			
		||||
object that the cache response must have been cached for a request that matches the headers specified in the Vary header
 | 
			
		||||
of the request. This allows you to have specific cache entries for the same request URL but variations in a request's
 | 
			
		||||
headers determine which cache entry is served. Please see the http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
 | 
			
		||||
for more information.
 | 
			
		||||
 | 
			
		||||
Cache options
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
There are several options you can add to requests or clients to modify the behavior of the cache plugin.
 | 
			
		||||
 | 
			
		||||
Override cache TTL
 | 
			
		||||
~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can override the number of seconds a cacheable response is stored in the cache by setting the
 | 
			
		||||
``cache.override_ttl`` parameter on the params object of a request:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // If the response to the request is cacheable, then the response will be cached for 100 seconds
 | 
			
		||||
    $request->getParams()->set('cache.override_ttl', 100);
 | 
			
		||||
 | 
			
		||||
If a response doesn't specify any freshness policy, it will be kept in cache for 3600 seconds by default.
 | 
			
		||||
 | 
			
		||||
Custom caching decision
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If the service you are interacting with does not return caching headers or returns responses that are normally
 | 
			
		||||
something that would not be cached, you can set a custom ``can_cache`` object on the constructor of the CachePlugin
 | 
			
		||||
and provide a ``Guzzle\Plugin\Cache\CanCacheInterface`` object. You can use the
 | 
			
		||||
``Guzzle\Plugin\Cache\CallbackCanCacheStrategy`` to easily make a caching decision based on an HTTP request and
 | 
			
		||||
response.
 | 
			
		||||
 | 
			
		||||
Revalidation options
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can change the revalidation behavior of a request using the ``cache.revalidate`` parameter. Setting this
 | 
			
		||||
parameter to ``never`` will ensure that a revalidation request is never sent, and the response is always served from
 | 
			
		||||
the origin server. Setting this parameter to ``skip`` will never revalidate and uses the response stored in the cache.
 | 
			
		||||
 | 
			
		||||
Normalizing requests for caching
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Use the ``cache.key_filter`` parameter if you wish to strip certain query string parameters from your
 | 
			
		||||
request before creating a unique hash for the request. This parameter can be useful if your requests have query
 | 
			
		||||
string values that cause each request URL to be unique (thus preventing a cache hit). The ``cache.key_filter``
 | 
			
		||||
format is simply a comma separated list of query string values to remove from the URL when creating a cache key.
 | 
			
		||||
For example, here we are saying that the ``a`` and ``q`` query string variables should be ignored when generating a
 | 
			
		||||
cache key for the request:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request->getParams()->set('cache.key_filter', 'a, q');
 | 
			
		||||
 | 
			
		||||
Other options
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
There are many other options available to the CachePlugin that can meet almost any caching requirement, including
 | 
			
		||||
custom revalidation implementations, custom cache key generators, custom caching decision strategies, and custom
 | 
			
		||||
cache storage objects. Take a look the constructor of ``Guzzle\Plugin\Cache\CachePlugin`` for more information.
 | 
			
		||||
 | 
			
		||||
Setting Client-wide cache settings
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can specify cache settings for every request created by a client by adding cache settings to the configuration
 | 
			
		||||
options of a client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Http\Client('http://www.test.com', array(
 | 
			
		||||
        'request.params' => array(
 | 
			
		||||
            'cache.override_ttl' => 3600,
 | 
			
		||||
            'params.cache.revalidate' => 'never'
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    echo $client->get('/')->getParams()->get('cache.override_ttl');
 | 
			
		||||
    // >>> 3600
 | 
			
		||||
 | 
			
		||||
    echo $client->get('/')->getParams()->get('cache.revalidate');
 | 
			
		||||
    // >>> never
 | 
			
		||||
 | 
			
		||||
Cache revalidation
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
If the cache plugin determines that a response to a GET request needs revalidation, a conditional GET is transferred
 | 
			
		||||
to the origin server. If the origin server returns a 304 response, then a response containing the merged headers of
 | 
			
		||||
the cached response with the new response and the entity body of the cached response is returned. Custom revalidation
 | 
			
		||||
strategies can be injected into a CachePlugin if needed.
 | 
			
		||||
 | 
			
		||||
Cache adapters
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
Guzzle doesn't try to reinvent the wheel when it comes to caching or logging. Plenty of other frameworks have
 | 
			
		||||
excellent solutions in place that you are probably already using in your applications. Guzzle uses adapters for
 | 
			
		||||
caching and logging. The cache plugin requires a cache adapter so that is can store responses in a cache. Guzzle
 | 
			
		||||
currently supports cache adapters for `Doctrine 2.0 <http://www.doctrine-project.org/>`_ and the
 | 
			
		||||
`Zend Framework <http://framework.zend.com>`_.
 | 
			
		||||
 | 
			
		||||
Doctrine cache adapter
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Doctrine\Common\Cache\ArrayCache;
 | 
			
		||||
    use Guzzle\Cache\DoctrineCacheAdapter;
 | 
			
		||||
    use Guzzle\Plugin\Cache\CachePlugin;
 | 
			
		||||
 | 
			
		||||
    $backend = new ArrayCache();
 | 
			
		||||
    $adapter = new DoctrineCacheAdapter($backend);
 | 
			
		||||
    $cache = new CachePlugin($adapter);
 | 
			
		||||
 | 
			
		||||
Zend Framework cache adapter
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Cache\ZendCacheAdapter;
 | 
			
		||||
    use Zend\Cache\Backend\TestBackend;
 | 
			
		||||
 | 
			
		||||
    $backend = new TestBackend();
 | 
			
		||||
    $adapter = new ZendCacheAdapter($backend);
 | 
			
		||||
    $cache = new CachePlugin($adapter);
 | 
			
		||||
							
								
								
									
										33
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cookie-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cookie-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
=============
 | 
			
		||||
Cookie plugin
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
Some web services require a Cookie in order to maintain a session. The ``Guzzle\Plugin\Cookie\CookiePlugin`` will add
 | 
			
		||||
cookies to requests and parse cookies from responses using a CookieJar object:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Cookie\CookiePlugin;
 | 
			
		||||
    use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
 | 
			
		||||
 | 
			
		||||
    $cookiePlugin = new CookiePlugin(new ArrayCookieJar());
 | 
			
		||||
 | 
			
		||||
    // Add the cookie plugin to a client
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
    $client->addSubscriber($cookiePlugin);
 | 
			
		||||
 | 
			
		||||
    // Send the request with no cookies and parse the returned cookies
 | 
			
		||||
    $client->get('http://www.yahoo.com/')->send();
 | 
			
		||||
 | 
			
		||||
    // Send the request again, noticing that cookies are being sent
 | 
			
		||||
    $request = $client->get('http://www.yahoo.com/');
 | 
			
		||||
    $request->send();
 | 
			
		||||
 | 
			
		||||
    echo $request;
 | 
			
		||||
 | 
			
		||||
You can disable cookies per-request by setting the ``cookies.disable`` value to true on a request's params object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request->getParams()->set('cookies.disable', true);
 | 
			
		||||
							
								
								
									
										93
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/creating-plugins.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/creating-plugins.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
================
 | 
			
		||||
Creating plugins
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
.. highlight:: php
 | 
			
		||||
 | 
			
		||||
Guzzle is extremely extensible because of the behavioral modifications that can be added to requests, clients, and
 | 
			
		||||
commands using an event system. Before and after the majority of actions are taken in the library, an event is emitted
 | 
			
		||||
with the name of the event and context surrounding the event. Observers can subscribe to a subject and modify the
 | 
			
		||||
subject based on the events received. Guzzle's event system utilizes the Symfony2 EventDispatcher and is the backbone
 | 
			
		||||
of its plugin architecture.
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
Plugins must implement the ``Symfony\Component\EventDispatcher\EventSubscriberInterface`` interface. The
 | 
			
		||||
``EventSubscriberInterface`` requires that your class implements a static method, ``getSubscribedEvents()``, that
 | 
			
		||||
returns an associative array mapping events to methods on the object. See the
 | 
			
		||||
`Symfony2 documentation <http://symfony.com/doc/2.0/book/internals.html#the-event-dispatcher>`_ for more information.
 | 
			
		||||
 | 
			
		||||
Plugins can be attached to any subject, or object in Guzzle that implements that
 | 
			
		||||
``Guzzle\Common\HasDispatcherInterface``.
 | 
			
		||||
 | 
			
		||||
Subscribing to a subject
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can subscribe an instantiated observer to an event by calling ``addSubscriber`` on a subject.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $testPlugin = new TestPlugin();
 | 
			
		||||
    $client->addSubscriber($testPlugin);
 | 
			
		||||
 | 
			
		||||
You can also subscribe to only specific events using a closure::
 | 
			
		||||
 | 
			
		||||
    $client->getEventDispatcher()->addListener('request.create', function(Event $event) {
 | 
			
		||||
        echo $event->getName();
 | 
			
		||||
        echo $event['request'];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
``Guzzle\Common\Event`` objects are passed to notified functions. The Event object has a ``getName()`` method which
 | 
			
		||||
return the name of the emitted event and may contain contextual information that can be accessed like an array.
 | 
			
		||||
 | 
			
		||||
Knowing what events to listen to
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Any class that implements the ``Guzzle\Common\HasDispatcherInterface`` must implement a static method,
 | 
			
		||||
``getAllEvents()``, that returns an array of the events that are emitted from the object.  You can browse the source
 | 
			
		||||
to see each event, or you can call the static method directly in your code to get a list of available events.
 | 
			
		||||
 | 
			
		||||
Event hooks
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
* :ref:`client-events`
 | 
			
		||||
* :ref:`service-client-events`
 | 
			
		||||
* :ref:`request-events`
 | 
			
		||||
* ``Guzzle\Http\Curl\CurlMulti``:
 | 
			
		||||
* :ref:`service-builder-events`
 | 
			
		||||
 | 
			
		||||
Examples of the event system
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
Simple Echo plugin
 | 
			
		||||
~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
This simple plugin prints a string containing the request that is about to be sent by listening to the
 | 
			
		||||
``request.before_send`` event::
 | 
			
		||||
 | 
			
		||||
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 | 
			
		||||
 | 
			
		||||
    class EchoPlugin implements EventSubscriberInterface
 | 
			
		||||
    {
 | 
			
		||||
        public static function getSubscribedEvents()
 | 
			
		||||
        {
 | 
			
		||||
            return array('request.before_send' => 'onBeforeSend');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public function onBeforeSend(Guzzle\Common\Event $event)
 | 
			
		||||
        {
 | 
			
		||||
            echo 'About to send a request: ' . $event['request'] . "\n";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Service\Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    // Create the plugin and add it as an event subscriber
 | 
			
		||||
    $plugin = new EchoPlugin();
 | 
			
		||||
    $client->addSubscriber($plugin);
 | 
			
		||||
 | 
			
		||||
    // Send a request and notice that the request is printed to the screen
 | 
			
		||||
    $client->get('/')->send();
 | 
			
		||||
 | 
			
		||||
Running the above code will print a string containing the HTTP request that is about to be sent.
 | 
			
		||||
							
								
								
									
										32
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/curl-auth-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/curl-auth-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
==========================
 | 
			
		||||
cURL authentication plugin
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
    The CurlAuthPlugin is deprecated. You should use the `auth` parameter of a client to add authorization headers to
 | 
			
		||||
    every request created by a client.
 | 
			
		||||
 | 
			
		||||
    .. code-block:: php
 | 
			
		||||
 | 
			
		||||
        $client->setDefaultOption('auth', array('username', 'password', 'Basic|Digest|NTLM|Any'));
 | 
			
		||||
 | 
			
		||||
If your web service client requires basic authorization, then you can use the CurlAuthPlugin to easily add an
 | 
			
		||||
Authorization header to each request sent by the client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\CurlAuth\CurlAuthPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    // Add the auth plugin to the client object
 | 
			
		||||
    $authPlugin = new CurlAuthPlugin('username', 'password');
 | 
			
		||||
    $client->addSubscriber($authPlugin);
 | 
			
		||||
 | 
			
		||||
    $response = $client->get('projects/1/people')->send();
 | 
			
		||||
    $xml = new SimpleXMLElement($response->getBody(true));
 | 
			
		||||
    foreach ($xml->person as $person) {
 | 
			
		||||
        echo $person->email . "\n";
 | 
			
		||||
    }
 | 
			
		||||
							
								
								
									
										24
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/history-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/history-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
==============
 | 
			
		||||
History plugin
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
The history plugin tracks all of the requests and responses sent through a request or client. This plugin can be
 | 
			
		||||
useful for crawling or unit testing. By default, the history plugin stores up to 10 requests and responses.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\History\HistoryPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    // Add the history plugin to the client object
 | 
			
		||||
    $history = new HistoryPlugin();
 | 
			
		||||
    $history->setLimit(5);
 | 
			
		||||
    $client->addSubscriber($history);
 | 
			
		||||
 | 
			
		||||
    $client->get('http://www.yahoo.com/')->send();
 | 
			
		||||
 | 
			
		||||
    echo $history->getLastRequest();
 | 
			
		||||
    echo $history->getLastResponse();
 | 
			
		||||
    echo count($history);
 | 
			
		||||
							
								
								
									
										69
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/log-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/log-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
==========
 | 
			
		||||
Log plugin
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Use the ``Guzzle\Plugin\Log\LogPlugin`` to view all data sent over the wire, including entity bodies and redirects.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Log\Zf1LogAdapter;
 | 
			
		||||
    use Guzzle\Plugin\Log\LogPlugin;
 | 
			
		||||
    use Guzzle\Log\MessageFormatter;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    $adapter = new Zf1LogAdapter(
 | 
			
		||||
        new \Zend_Log(new \Zend_Log_Writer_Stream('php://output'))
 | 
			
		||||
    );
 | 
			
		||||
    $logPlugin = new LogPlugin($adapter, MessageFormatter::DEBUG_FORMAT);
 | 
			
		||||
 | 
			
		||||
    // Attach the plugin to the client, which will in turn be attached to all
 | 
			
		||||
    // requests generated by the client
 | 
			
		||||
    $client->addSubscriber($logPlugin);
 | 
			
		||||
 | 
			
		||||
    $response = $client->get('http://google.com')->send();
 | 
			
		||||
 | 
			
		||||
The code sample above wraps a ``Zend_Log`` object using a ``Guzzle\Log\Zf1LogAdapter``. After attaching the plugin to
 | 
			
		||||
the client, all data sent over the wire will be logged to stdout.
 | 
			
		||||
 | 
			
		||||
The first argument of the LogPlugin's constructor accepts a ``Guzzle\Log\LogAdapterInterface`` object. This object is
 | 
			
		||||
an adapter that allows you to use the logging capabilities of your favorite log implementation. The second argument of
 | 
			
		||||
the constructor accepts a ``Guzzle\Log\MessageFormatter`` or a log messaged format string. The format string uses
 | 
			
		||||
variable substitution and allows you to define the log data that is important to your application. The different
 | 
			
		||||
variables that can be injected are as follows:
 | 
			
		||||
 | 
			
		||||
================== ====================================================================================
 | 
			
		||||
Variable           Substitution
 | 
			
		||||
================== ====================================================================================
 | 
			
		||||
{request}          Full HTTP request message
 | 
			
		||||
{response}         Full HTTP response message
 | 
			
		||||
{ts}               Timestamp
 | 
			
		||||
{host}             Host of the request
 | 
			
		||||
{method}           Method of the request
 | 
			
		||||
{url}              URL of the request
 | 
			
		||||
{host}             Host of the request
 | 
			
		||||
{protocol}         Request protocol
 | 
			
		||||
{version}          Protocol version
 | 
			
		||||
{resource}         Resource of the request (path + query + fragment)
 | 
			
		||||
{port}             Port of the request
 | 
			
		||||
{hostname}         Hostname of the machine that sent the request
 | 
			
		||||
{code}             Status code of the response (if available)
 | 
			
		||||
{phrase}           Reason phrase of the response  (if available)
 | 
			
		||||
{curl_error}       Curl error message (if available)
 | 
			
		||||
{curl_code}        Curl error code (if available)
 | 
			
		||||
{curl_stderr}      Curl standard error (if available)
 | 
			
		||||
{connect_time}     Time in seconds it took to establish the connection (if available)
 | 
			
		||||
{total_time}       Total transaction time in seconds for last transfer (if available)
 | 
			
		||||
{req_header_*}     Replace `*` with the lowercased name of a request header to add to the message
 | 
			
		||||
{res_header_*}     Replace `*` with the lowercased name of a response header to add to the message
 | 
			
		||||
{req_body}         Request body
 | 
			
		||||
{res_body}         Response body
 | 
			
		||||
================== ====================================================================================
 | 
			
		||||
 | 
			
		||||
The LogPlugin has a helper method that can be used when debugging that will output the full HTTP request and
 | 
			
		||||
response of a transaction:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client->addSubscriber(LogPlugin::getDebugPlugin());
 | 
			
		||||
							
								
								
									
										29
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
====================
 | 
			
		||||
MD5 validator plugin
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
Entity bodies can sometimes be modified over the wire due to a faulty TCP transport or misbehaving proxy. If an HTTP
 | 
			
		||||
response contains a Content-MD5 header, then a MD5 hash of the entity body of a response can be compared against the
 | 
			
		||||
Content-MD5 header of the response to determine if the response was delivered intact. The
 | 
			
		||||
``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` will throw an ``UnexpectedValueException`` if the calculated MD5 hash does
 | 
			
		||||
not match the Content-MD5 header value:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Md5\Md5ValidatorPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    $md5Plugin = new Md5ValidatorPlugin();
 | 
			
		||||
 | 
			
		||||
    // Add the md5 plugin to the client object
 | 
			
		||||
    $client->addSubscriber($md5Plugin);
 | 
			
		||||
 | 
			
		||||
    $request = $client->get('http://www.yahoo.com/');
 | 
			
		||||
    $request->send();
 | 
			
		||||
 | 
			
		||||
Calculating the MD5 hash of a large entity body or an entity body that was transferred using a Content-Encoding is an
 | 
			
		||||
expensive operation. When working in high performance applications, you might consider skipping the MD5 hash
 | 
			
		||||
validation for entity bodies bigger than a certain size or Content-Encoded entity bodies
 | 
			
		||||
(see ``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` for more information).
 | 
			
		||||
							
								
								
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
===========
 | 
			
		||||
Mock plugin
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
The mock plugin is useful for testing Guzzle clients. The mock plugin allows you to queue an array of responses that
 | 
			
		||||
will satisfy requests sent from a client by consuming the request queue in FIFO order.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Mock\MockPlugin;
 | 
			
		||||
    use Guzzle\Http\Message\Response;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://www.test.com/');
 | 
			
		||||
 | 
			
		||||
    $mock = new MockPlugin();
 | 
			
		||||
    $mock->addResponse(new Response(200))
 | 
			
		||||
         ->addResponse(new Response(404));
 | 
			
		||||
 | 
			
		||||
    // Add the mock plugin to the client object
 | 
			
		||||
    $client->addSubscriber($mock);
 | 
			
		||||
 | 
			
		||||
    // The following request will receive a 200 response from the plugin
 | 
			
		||||
    $client->get('http://www.example.com/')->send();
 | 
			
		||||
 | 
			
		||||
    // The following request will receive a 404 response from the plugin
 | 
			
		||||
    $client->get('http://www.test.com/')->send();
 | 
			
		||||
							
								
								
									
										30
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/oauth-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/oauth-plugin.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
============
 | 
			
		||||
OAuth plugin
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
Guzzle ships with an OAuth 1.0 plugin that can sign requests using a consumer key, consumer secret, OAuth token,
 | 
			
		||||
and OAuth secret. Here's an example showing how to send an authenticated request to the Twitter REST API:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Http\Client;
 | 
			
		||||
    use Guzzle\Plugin\Oauth\OauthPlugin;
 | 
			
		||||
 | 
			
		||||
    $client = new Client('http://api.twitter.com/1');
 | 
			
		||||
    $oauth = new OauthPlugin(array(
 | 
			
		||||
        'consumer_key'    => 'my_key',
 | 
			
		||||
        'consumer_secret' => 'my_secret',
 | 
			
		||||
        'token'           => 'my_token',
 | 
			
		||||
        'token_secret'    => 'my_token_secret'
 | 
			
		||||
    ));
 | 
			
		||||
    $client->addSubscriber($oauth);
 | 
			
		||||
 | 
			
		||||
    $response = $client->get('statuses/public_timeline.json')->send();
 | 
			
		||||
 | 
			
		||||
If you need to use a custom signing method, you can pass a ``signature_method`` configuration option in the
 | 
			
		||||
constructor of the OAuth plugin. The ``signature_method`` option must be a callable variable that accepts a string to
 | 
			
		||||
sign and signing key and returns a signed string.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    You can omit the ``token`` and ``token_secret`` options to use two-legged OAuth.
 | 
			
		||||
							
								
								
									
										9
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-list.rst.inc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-list.rst.inc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
* :doc:`/plugins/async-plugin`
 | 
			
		||||
* :doc:`/plugins/backoff-plugin`
 | 
			
		||||
* :doc:`/plugins/cache-plugin`
 | 
			
		||||
* :doc:`/plugins/cookie-plugin`
 | 
			
		||||
* :doc:`/plugins/history-plugin`
 | 
			
		||||
* :doc:`/plugins/log-plugin`
 | 
			
		||||
* :doc:`/plugins/md5-validator-plugin`
 | 
			
		||||
* :doc:`/plugins/mock-plugin`
 | 
			
		||||
* :doc:`/plugins/oauth-plugin`
 | 
			
		||||
							
								
								
									
										59
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-overview.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-overview.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
======================
 | 
			
		||||
Plugin system overview
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
The workflow of sending a request and parsing a response is driven by Guzzle's event system, which is powered by the
 | 
			
		||||
`Symfony2 Event Dispatcher component <http://symfony.com/doc/current/components/event_dispatcher/introduction.html>`_.
 | 
			
		||||
 | 
			
		||||
Any object in Guzzle that emits events will implement the ``Guzzle\Common\HasEventDispatcher`` interface. You can add
 | 
			
		||||
event subscribers directly to these objects using the ``addSubscriber()`` method, or you can grab the
 | 
			
		||||
``Symfony\Component\EventDispatcher\EventDispatcher`` object owned by the object using ``getEventDispatcher()`` and
 | 
			
		||||
add a listener or event subscriber.
 | 
			
		||||
 | 
			
		||||
Adding event subscribers to clients
 | 
			
		||||
-----------------------------------
 | 
			
		||||
 | 
			
		||||
Any event subscriber or event listener attached to the EventDispatcher of a ``Guzzle\Http\Client`` or
 | 
			
		||||
``Guzzle\Service\Client`` object will automatically be attached to all request objects created by the client. This
 | 
			
		||||
allows you to attach, for example, a HistoryPlugin to a client object, and from that point on, every request sent
 | 
			
		||||
through that client will utilize the HistoryPlugin.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Plugin\History\HistoryPlugin;
 | 
			
		||||
    use Guzzle\Service\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client();
 | 
			
		||||
 | 
			
		||||
    // Create a history plugin and attach it to the client
 | 
			
		||||
    $history = new HistoryPlugin();
 | 
			
		||||
    $client->addSubscriber($history);
 | 
			
		||||
 | 
			
		||||
    // Create and send a request. This request will also utilize the HistoryPlugin
 | 
			
		||||
    $client->get('http://httpbin.org')->send();
 | 
			
		||||
 | 
			
		||||
    // Echo out the last sent request by the client
 | 
			
		||||
    echo $history->getLastRequest();
 | 
			
		||||
 | 
			
		||||
.. tip::
 | 
			
		||||
 | 
			
		||||
    :doc:`Create event subscribers <creating-plugins>`, or *plugins*, to implement reusable logic that can be
 | 
			
		||||
    shared across clients. Event subscribers are also easier to test than anonymous functions.
 | 
			
		||||
 | 
			
		||||
Pre-Built plugins
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Guzzle provides easy to use request plugins that add behavior to requests based on signal slot event notifications
 | 
			
		||||
powered by the Symfony2 Event Dispatcher component.
 | 
			
		||||
 | 
			
		||||
* :doc:`async-plugin`
 | 
			
		||||
* :doc:`backoff-plugin`
 | 
			
		||||
* :doc:`cache-plugin`
 | 
			
		||||
* :doc:`cookie-plugin`
 | 
			
		||||
* :doc:`curl-auth-plugin`
 | 
			
		||||
* :doc:`history-plugin`
 | 
			
		||||
* :doc:`log-plugin`
 | 
			
		||||
* :doc:`md5-validator-plugin`
 | 
			
		||||
* :doc:`mock-plugin`
 | 
			
		||||
* :doc:`oauth-plugin`
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/requirements.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/requirements.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Sphinx>=1.2b1
 | 
			
		||||
guzzle_sphinx_theme>=0.5.0
 | 
			
		||||
							
								
								
									
										201
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/testing/unit-testing.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/testing/unit-testing.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
===========================
 | 
			
		||||
Unit Testing Guzzle clients
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
Guzzle provides several tools that will enable you to easily unit test your web service clients.
 | 
			
		||||
 | 
			
		||||
* PHPUnit integration
 | 
			
		||||
* Mock responses
 | 
			
		||||
* node.js web server for integration testing
 | 
			
		||||
 | 
			
		||||
PHPUnit integration
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Guzzle is unit tested using `PHPUnit <http://www.phpunit.de/>`_.  Your web service client's unit tests should extend
 | 
			
		||||
``Guzzle\Tests\GuzzleTestCase`` so that you can take advantage of some of the built in helpers.
 | 
			
		||||
 | 
			
		||||
In order to unit test your client, a developer would need to copy phpunit.xml.dist to phpunit.xml and make any needed
 | 
			
		||||
modifications.  As a best practice and security measure for you and your contributors, it is recommended to add an
 | 
			
		||||
ignore statement to your SCM so that phpunit.xml is ignored.
 | 
			
		||||
 | 
			
		||||
Bootstrapping
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Your web service client should have a tests/ folder that contains a bootstrap.php file. The bootstrap.php file
 | 
			
		||||
responsible for autoloading and configuring a ``Guzzle\Service\Builder\ServiceBuilder`` that is used throughout your
 | 
			
		||||
unit tests for loading a configured client. You can add custom parameters to your phpunit.xml file that expects users
 | 
			
		||||
to provide the path to their configuration data.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    Guzzle\Tests\GuzzleTestCase::setServiceBuilder(Aws\Common\Aws::factory($_SERVER['CONFIG']));
 | 
			
		||||
 | 
			
		||||
    Guzzle\Tests\GuzzleTestCase::setServiceBuilder(Guzzle\Service\Builder\ServiceBuilder::factory(array(
 | 
			
		||||
        'test.unfuddle' => array(
 | 
			
		||||
            'class' => 'Guzzle.Unfuddle.UnfuddleClient',
 | 
			
		||||
            'params' => array(
 | 
			
		||||
                'username' => 'test_user',
 | 
			
		||||
                'password' => '****',
 | 
			
		||||
                'subdomain' => 'test'
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
    )));
 | 
			
		||||
 | 
			
		||||
The above code registers a service builder that can be used throughout your unit tests.  You would then be able to
 | 
			
		||||
retrieve an instantiated and configured Unfuddle client by calling ``$this->getServiceBuilder()->get('test.unfuddle)``.
 | 
			
		||||
The above code assumes that ``$_SERVER['CONFIG']`` contains the path to a file that stores service description
 | 
			
		||||
configuration.
 | 
			
		||||
 | 
			
		||||
Unit testing remote APIs
 | 
			
		||||
------------------------
 | 
			
		||||
 | 
			
		||||
Mock responses
 | 
			
		||||
~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
One of the benefits of unit testing is the ability to quickly determine if there are errors in your code.  If your
 | 
			
		||||
unit tests run slowly, then they become tedious and will likely be run less frequently.  Guzzle's philosophy on unit
 | 
			
		||||
testing web service clients is that no network access should be required to run the unit tests.  This means that
 | 
			
		||||
responses are served from mock responses or local servers.  By adhering to this principle, tests will run much faster
 | 
			
		||||
and will not require an external resource to be available.  The problem with this approach is that your mock responses
 | 
			
		||||
must first be gathered and then subsequently updated each time the remote API changes.
 | 
			
		||||
 | 
			
		||||
Integration testing over the internet
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can perform integration testing with a web service over the internet by making calls directly to the service. If
 | 
			
		||||
the web service you are requesting uses a complex signing algorithm or some other specific implementation, then you
 | 
			
		||||
may want to include at least one actual network test that can be run specifically through the command line using
 | 
			
		||||
`PHPUnit group annotations <http://www.phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group>`_.
 | 
			
		||||
 | 
			
		||||
@group internet annotation
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
When creating tests that require an internet connection, it is recommended that you add ``@group internet`` annotations
 | 
			
		||||
to your unit tests to specify which tests require network connectivity.
 | 
			
		||||
 | 
			
		||||
You can then `run PHPUnit tests <http://www.phpunit.de/manual/current/en/textui.html>`_ that exclude the @internet
 | 
			
		||||
group by running ``phpunit --exclude-group internet``.
 | 
			
		||||
 | 
			
		||||
API credentials
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
If API  credentials are required to run your integration tests, you must add ``<php>`` parameters to your
 | 
			
		||||
phpunit.xml.dist file and extract these parameters in your bootstrap.php file.
 | 
			
		||||
 | 
			
		||||
.. code-block:: xml
 | 
			
		||||
 | 
			
		||||
    <?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
    <phpunit bootstrap="./tests/bootstrap.php" colors="true">
 | 
			
		||||
        <php>
 | 
			
		||||
            <!-- Specify the path to a service configuration file -->
 | 
			
		||||
            <server name="CONFIG" value="test_services.json" />
 | 
			
		||||
            <!-- Or, specify each require parameter individually -->
 | 
			
		||||
            <server name="API_USER" value="change_me" />
 | 
			
		||||
            <server name="API_PASSWORD" value="****" />
 | 
			
		||||
        </php>
 | 
			
		||||
        <testsuites>
 | 
			
		||||
            <testsuite name="guzzle-service">
 | 
			
		||||
                <directory suffix="Test.php">./Tests</directory>
 | 
			
		||||
            </testsuite>
 | 
			
		||||
        </testsuites>
 | 
			
		||||
    </phpunit>
 | 
			
		||||
 | 
			
		||||
You can then extract the ``server`` variables in your bootstrap.php file by grabbing them from the ``$_SERVER``
 | 
			
		||||
superglobal: ``$apiUser = $_SERVER['API_USER'];``
 | 
			
		||||
 | 
			
		||||
Further reading
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
A good discussion on the topic of testing remote APIs can be found in Sebastian Bergmann's
 | 
			
		||||
`Real-World Solutions for Developing High-Quality PHP Frameworks and Applications <http://www.amazon.com/dp/0470872497>`_.
 | 
			
		||||
 | 
			
		||||
Queueing Mock responses
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
Mock responses can be used to test if requests are being generated correctly and responses and handled correctly by
 | 
			
		||||
your client.  Mock responses can be queued up for a client using the ``$this->setMockResponse($client, $path)`` method
 | 
			
		||||
of your test class.  Pass the client you are adding mock responses to and a single path or array of paths to mock
 | 
			
		||||
response files relative to the ``/tests/mock/ folder``.  This will queue one or more mock responses for your client by
 | 
			
		||||
creating a simple observer on the client.  Mock response files must contain a full HTTP response message:
 | 
			
		||||
 | 
			
		||||
.. code-block:: none
 | 
			
		||||
 | 
			
		||||
    HTTP/1.1 200 OK
 | 
			
		||||
    Date: Wed, 25 Nov 2009 12:00:00 GMT
 | 
			
		||||
    Connection: close
 | 
			
		||||
    Server: AmazonS3
 | 
			
		||||
    Content-Type: application/xml
 | 
			
		||||
 | 
			
		||||
    <?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
    <LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">EU</LocationConstraint>
 | 
			
		||||
 | 
			
		||||
After queuing mock responses for a client, you can get an array of the requests that were sent by the client that
 | 
			
		||||
were issued a mock response by calling ``$this->getMockedRequests()``.
 | 
			
		||||
 | 
			
		||||
You can also use the ``Guzzle\Plugin\Mock\MockPlugin`` object directly with your clients.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $plugin = new Guzzle\Plugin\Mock\MockPlugin();
 | 
			
		||||
    $plugin->addResponse(new Guzzle\Http\Message\Response(200));
 | 
			
		||||
    $client = new Guzzle\Http\Client();
 | 
			
		||||
    $client->addSubscriber($plugin);
 | 
			
		||||
 | 
			
		||||
    // The following request will get the mock response from the plugin in FIFO order
 | 
			
		||||
    $request = $client->get('http://www.test.com/');
 | 
			
		||||
    $request->send();
 | 
			
		||||
 | 
			
		||||
    // The MockPlugin maintains a list of requests that were mocked
 | 
			
		||||
    $this->assertContainsOnly($request, $plugin->getReceivedRequests());
 | 
			
		||||
 | 
			
		||||
node.js web server for integration testing
 | 
			
		||||
------------------------------------------
 | 
			
		||||
 | 
			
		||||
Using mock responses is usually enough when testing a web service client.  If your client needs to add custom cURL
 | 
			
		||||
options to requests, then you should use the node.js test web server to ensure that your HTTP request message is
 | 
			
		||||
being created correctly.
 | 
			
		||||
 | 
			
		||||
Guzzle is based around PHP's libcurl bindings.  cURL sometimes modifies an HTTP request message based on
 | 
			
		||||
``CURLOPT_*`` options.  Headers that are added to your request by cURL will not be accounted for if you inject mock
 | 
			
		||||
responses into your tests.  Additionally, some request entity bodies cannot be loaded by the client before transmitting
 | 
			
		||||
it to the sever (for example, when using a client as a sort of proxy and streaming content from a remote server). You
 | 
			
		||||
might also need to inspect the entity body of a ``multipart/form-data`` POST request.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    You can skip all of the tests that require the node.js test web server by excluding the ``server`` group:
 | 
			
		||||
    ``phpunit --exclude-group server``
 | 
			
		||||
 | 
			
		||||
Using the test server
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The node.js test server receives requests and returns queued responses.  The test server exposes a simple API that is
 | 
			
		||||
used to enqueue responses and inspect the requests that it has received.
 | 
			
		||||
 | 
			
		||||
Retrieve the server object by calling ``$this->getServer()``.  If the node.js server is not running, it will be
 | 
			
		||||
started as a forked process and an object that interfaces with the server will be returned.  (note: stopping the
 | 
			
		||||
server is handled internally by Guzzle.)
 | 
			
		||||
 | 
			
		||||
You can queue an HTTP response or an array of responses by calling ``$this->getServer()->enqueue()``:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
 | 
			
		||||
 | 
			
		||||
The above code queues a single 200 response with an empty body.  Responses are queued using a FIFO order; this
 | 
			
		||||
response will be returned by the server when it receives the first request and then removed from the queue. If a
 | 
			
		||||
request is received by a server with no queued responses, an exception will be thrown in your unit test.
 | 
			
		||||
 | 
			
		||||
You can inspect the requests that the server has retrieved by calling ``$this->getServer()->getReceivedRequests()``.
 | 
			
		||||
This method accepts an optional ``$hydrate`` parameter that specifies if you are retrieving an array of string HTTP
 | 
			
		||||
requests or an array of ``Guzzle\Http\RequestInterface`` subclassed objects.  "Hydrating" the requests will allow
 | 
			
		||||
greater flexibility in your unit tests so that you can  easily assert the state of the various parts of a request.
 | 
			
		||||
 | 
			
		||||
You will need to modify the base_url of your web service client in order to use it against the test server.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = $this->getServiceBuilder()->get('my_client');
 | 
			
		||||
    $client->setBaseUrl($this->getServer()->getUrl());
 | 
			
		||||
 | 
			
		||||
After running the above code, all calls made from the ``$client`` object will be sent to the test web server.
 | 
			
		||||
@@ -0,0 +1,619 @@
 | 
			
		||||
===========================
 | 
			
		||||
Guzzle service descriptions
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
Guzzle allows you to serialize HTTP requests and parse HTTP responses using a DSL called a service descriptions.
 | 
			
		||||
Service descriptions define web service APIs by documenting each operation, the operation's parameters, validation
 | 
			
		||||
options for each parameter, an operation's response, how the response is parsed, and any errors that can be raised for
 | 
			
		||||
an operation. Writing a service description for a web service allows you to more quickly consume a web service than
 | 
			
		||||
writing concrete commands for each web service operation.
 | 
			
		||||
 | 
			
		||||
Guzzle service descriptions can be representing using a PHP array or JSON document. Guzzle's service descriptions are
 | 
			
		||||
heavily inspired by `Swagger <http://swagger.wordnik.com/>`_.
 | 
			
		||||
 | 
			
		||||
Service description schema
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
A Guzzle Service description must match the following JSON schema document. This document can also serve as a guide when
 | 
			
		||||
implementing a Guzzle service description.
 | 
			
		||||
 | 
			
		||||
Download the schema here: :download:`Guzzle JSON schema document </_downloads/guzzle-schema-1.0.json>`
 | 
			
		||||
 | 
			
		||||
.. class:: overflow-height-500px
 | 
			
		||||
 | 
			
		||||
    .. literalinclude:: ../_downloads/guzzle-schema-1.0.json
 | 
			
		||||
        :language: json
 | 
			
		||||
 | 
			
		||||
Top-level attributes
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Service descriptions are comprised of the following top-level attributes:
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "name": "string",
 | 
			
		||||
        "apiVersion": "string|number",
 | 
			
		||||
        "baseUrl": "string",
 | 
			
		||||
        "description": "string",
 | 
			
		||||
        "operations": {},
 | 
			
		||||
        "models": {},
 | 
			
		||||
        "includes": ["string.php", "string.json"]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| Property Name                           | Value                   | Description                                                                                                           |
 | 
			
		||||
+=========================================+=========================+=======================================================================================================================+
 | 
			
		||||
| name                                    | string                  | Name of the web service                                                                                               |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| apiVersion                              | string|number           | Version identifier that the service description is compatible with                                                    |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| baseUrl or basePath                     | string                  | Base URL of the web service. Any relative URI specified in an operation will be merged with the baseUrl using the     |
 | 
			
		||||
|                                         |                         | process defined in RFC 2396. Some clients require custom logic to determine the baseUrl. In those cases, it is best   |
 | 
			
		||||
|                                         |                         | to not include a baseUrl in the service description, but rather allow the factory method of the client to configure   |
 | 
			
		||||
|                                         |                         | the client’s baseUrl.                                                                                                 |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| description                             | string                  | Short summary of the web service                                                                                      |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| operations                              | object containing       | Operations of the service. The key is the name of the operation and value is the attributes of the operation.         |
 | 
			
		||||
|                                         | :ref:`operation-schema` |                                                                                                                       |
 | 
			
		||||
|                                         |                         |                                                                                                                       |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| models                                  | object containing       | Schema models that can be referenced throughout the service description. Models can be used to define how an HTTP     |
 | 
			
		||||
|                                         | :ref:`model-schema`     | response is parsed into a ``Guzzle\Service\Resource\Model`` object when an operation uses a ``model`` ``responseType``|
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| includes                                | array of .js,           | Service description files to include and extend from (can be a .json, .js, or .php file)                              |
 | 
			
		||||
|                                         | .json, or .php          |                                                                                                                       |
 | 
			
		||||
|                                         | files.                  |                                                                                                                       |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| (any additional properties)             | mixed                   | Any additional properties specified as top-level attributes are allowed and will be treated as arbitrary data         |
 | 
			
		||||
+-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
.. _operation-schema:
 | 
			
		||||
 | 
			
		||||
Operations
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
Operations are the actions that can be taken on a service. Each operation is given a unique name and has a distinct
 | 
			
		||||
endpoint and HTTP method. If an API has a ``DELETE /users/:id`` operation, a satisfactory operation name might be
 | 
			
		||||
``DeleteUser`` with a parameter of ``id`` that is inserted into the URI.
 | 
			
		||||
 | 
			
		||||
.. class:: overflow-height-250px
 | 
			
		||||
 | 
			
		||||
    .. code-block:: json
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            "operations": {
 | 
			
		||||
                "operationName": {
 | 
			
		||||
                    "extends": "string",
 | 
			
		||||
                    "httpMethod": "GET|POST|PUT|DELETE|PATCH|string",
 | 
			
		||||
                    "uri": "string",
 | 
			
		||||
                    "summary": "string",
 | 
			
		||||
                    "class": "string",
 | 
			
		||||
                    "responseClass": "string",
 | 
			
		||||
                    "responseNotes": "string",
 | 
			
		||||
                    "type": "string",
 | 
			
		||||
                    "description": "string",
 | 
			
		||||
                    "responseType": "primitive|class|(model by name)|documentation|(string)",
 | 
			
		||||
                    "deprecated": false,
 | 
			
		||||
                    "errorResponses": [
 | 
			
		||||
                        {
 | 
			
		||||
                            "code": 500,
 | 
			
		||||
                            "reason": "Unexpected Error",
 | 
			
		||||
                            "class": "string"
 | 
			
		||||
                        }
 | 
			
		||||
                    ],
 | 
			
		||||
                    "data": {
 | 
			
		||||
                        "foo": "bar",
 | 
			
		||||
                        "baz": "bam"
 | 
			
		||||
                    },
 | 
			
		||||
                    "parameters": {}
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
.. csv-table::
 | 
			
		||||
   :header: "Property Name", "Value", "Description"
 | 
			
		||||
   :widths: 20, 15, 65
 | 
			
		||||
 | 
			
		||||
    "extends", "string", "Extend from another operation by name. The parent operation must be defined before the child."
 | 
			
		||||
    "httpMethod", "string", "HTTP method used with the operation (e.g. GET, POST, PUT, DELETE, PATCH, etc)"
 | 
			
		||||
    "uri", "string", "URI of the operation. The uri attribute can contain URI templates. The variables of the URI template are parameters of the operation with a location value of uri"
 | 
			
		||||
    "summary", "string", "Short summary of what the operation does"
 | 
			
		||||
    "class", "string", "Custom class to instantiate instead of the default Guzzle\\Service\\Command\\OperationCommand. Using this attribute allows you to define an operation using a service description, but allows more customized logic to be implemented in user-land code."
 | 
			
		||||
    "responseClass", "string", "Defined what is returned from the method. Can be a primitive, class name, or model name. You can specify the name of a class to return a more customized result from the operation (for example, a domain model object). When using the name of a PHP class, the class must implement ``Guzzle\Service\Command\ResponseClassInterface``."
 | 
			
		||||
    "responseNotes", "string", "A description of the response returned by the operation"
 | 
			
		||||
    "responseType", "string", "The type of response that the operation creates: one of primitive, class, model, or documentation. If not specified, this value will be automatically inferred based on whether or not there is a model matching the name, if a matching class name is found, or set to 'primitive' by default."
 | 
			
		||||
    "deprecated", "boolean", "Whether or not the operation is deprecated"
 | 
			
		||||
    "errorResponses", "array", "Errors that could occur while executing the operation. Each item of the array is an object that can contain a 'code' (HTTP response status code of the error), 'reason' (reason phrase or description of the error), and 'class' (an exception class that will be raised when this error is encountered)"
 | 
			
		||||
    "data", "object", "Any arbitrary data to associate with the operation"
 | 
			
		||||
    "parameters", "object containing :ref:`parameter-schema` objects", "Parameters of the operation. Parameters are used to define how input data is serialized into a HTTP request."
 | 
			
		||||
    "additionalParameters", "A single :ref:`parameter-schema` object", "Validation and serialization rules for any parameter supplied to the operation that was not explicitly defined."
 | 
			
		||||
 | 
			
		||||
additionalParameters
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When a webservice offers a large number of parameters that all are set in the same location (for example the query
 | 
			
		||||
string or a JSON document), defining each parameter individually can require a lot of time and repetition. Furthermore,
 | 
			
		||||
some web services allow for completely arbitrary parameters to be supplied for an operation. The
 | 
			
		||||
``additionalParameters`` attribute can be used to solve both of these issues.
 | 
			
		||||
 | 
			
		||||
As an example, we can define a Twitter API operation quite easily using ``additionalParameters``. The
 | 
			
		||||
GetMentions operation accepts a large number of query string parameters. Defining each of these parameters
 | 
			
		||||
is ideal because it provide much more introspection for the client and opens the possibility to use the description with
 | 
			
		||||
other tools (e.g. a documentation generator). However, you can very quickly provide a "catch-all" serialization rule
 | 
			
		||||
that will place any custom parameters supplied to an operation the generated request's query string parameters.
 | 
			
		||||
 | 
			
		||||
.. class:: overflow-height-250px
 | 
			
		||||
 | 
			
		||||
    .. code-block:: json
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Twitter",
 | 
			
		||||
            "apiVersion": "1.1",
 | 
			
		||||
            "baseUrl": "https://api.twitter.com/1.1",
 | 
			
		||||
            "operations": {
 | 
			
		||||
                "GetMentions": {
 | 
			
		||||
                    "httpMethod": "GET",
 | 
			
		||||
                    "uri": "statuses/mentions_timeline.json",
 | 
			
		||||
                    "responseClass": "GetMentionsOutput",
 | 
			
		||||
                    "additionalParameters": {
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "models": {
 | 
			
		||||
                "GetMentionsOutput": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "additionalProperties": {
 | 
			
		||||
                        "location": "json"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
responseClass
 | 
			
		||||
~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The ``responseClass`` attribute is used to define the return value of an operation (what is returned by calling the
 | 
			
		||||
``getResult()`` method of a command object). The value set in the responseClass attribute can be one of "primitive"
 | 
			
		||||
(meaning the result with be primitive type like a string), a class name meaning the result will be an instance of a
 | 
			
		||||
specific user-land class, or a model name meaning the result will be a ``Guzzle\Service\Resource\Model`` object that
 | 
			
		||||
uses a :ref:`model schema <model-schema>` to define how the HTTP response is parsed.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    Using a class name with a ``responseClass`` will only work if it is supported by the ``class`` that is instantiated
 | 
			
		||||
    for the operation. Keep this in mind when specifying a custom ``class`` attribute that points to a custom
 | 
			
		||||
    ``Guzzle\Service\Command\CommandInterface`` class. The default ``class``,
 | 
			
		||||
    ``Guzzle\Service\Command\OperationCommand``, does support setting custom ``class`` attributes.
 | 
			
		||||
 | 
			
		||||
You can specify the name of a class to return a more customized result from the operation (for example, a domain model
 | 
			
		||||
object). When using the name of a PHP class, the class must implement ``Guzzle\Service\Command\ResponseClassInterface``.
 | 
			
		||||
Here's a very simple example of implementing a custom responseClass object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "operations": {
 | 
			
		||||
            "test": {
 | 
			
		||||
                "responseClass": "MyApplication\\User"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    namespace MyApplication;
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Command\ResponseClassInterface;
 | 
			
		||||
    use Guzzle\Service\Command\OperationCommand;
 | 
			
		||||
 | 
			
		||||
    class User implements ResponseClassInterface
 | 
			
		||||
    {
 | 
			
		||||
        protected $name;
 | 
			
		||||
 | 
			
		||||
        public static function fromCommand(OperationCommand $command)
 | 
			
		||||
        {
 | 
			
		||||
            $response = $command->getResponse();
 | 
			
		||||
            $xml = $response->xml();
 | 
			
		||||
 | 
			
		||||
            return new self((string) $xml->name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public function __construct($name)
 | 
			
		||||
        {
 | 
			
		||||
            $this->name = $name;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
errorResponses
 | 
			
		||||
~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
``errorResponses`` is an array containing objects that define the errors that could occur while executing the
 | 
			
		||||
operation. Each item of the array is an object that can contain a 'code' (HTTP response status code of the error),
 | 
			
		||||
'reason' (reason phrase or description of the error), and 'class' (an exception class that will be raised when this
 | 
			
		||||
error is encountered).
 | 
			
		||||
 | 
			
		||||
ErrorResponsePlugin
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Error responses are by default only used for documentation. If you don't need very complex exception logic for your web
 | 
			
		||||
service errors, then you can use the ``Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin`` to automatically throw defined
 | 
			
		||||
exceptions when one of the ``errorResponse`` rules are matched. The error response plugin will listen for the
 | 
			
		||||
``request.complete`` event of a request created by a command object. Every response (including a successful response) is
 | 
			
		||||
checked against the list of error responses for an exact match using the following order of checks:
 | 
			
		||||
 | 
			
		||||
1. Does the errorResponse have a defined ``class``?
 | 
			
		||||
2. Is the errorResponse ``code`` equal to the status code of the response?
 | 
			
		||||
3. Is the errorResponse ``reason`` equal to the reason phrase of the response?
 | 
			
		||||
4. Throw the exception stored in the ``class`` attribute of the errorResponse.
 | 
			
		||||
 | 
			
		||||
The ``class`` attribute must point to a class that implements
 | 
			
		||||
``Guzzle\Plugin\ErrorResponse\ErrorResponseExceptionInterface``. This interface requires that an error response class
 | 
			
		||||
implements ``public static function fromCommand(CommandInterface $command, Response $response)``. This method must
 | 
			
		||||
return an object that extends from ``\Exception``. After an exception is returned, it is thrown by the plugin.
 | 
			
		||||
 | 
			
		||||
.. _parameter-schema:
 | 
			
		||||
 | 
			
		||||
Parameter schema
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
Parameters in both operations and models are represented using the
 | 
			
		||||
`JSON schema <http://tools.ietf.org/id/draft-zyp-json-schema-04.html>`_ syntax.
 | 
			
		||||
 | 
			
		||||
.. csv-table::
 | 
			
		||||
   :header: "Property Name", "Value", "Description"
 | 
			
		||||
   :widths: 20, 15, 65
 | 
			
		||||
 | 
			
		||||
    "name", "string", "Unique name of the parameter"
 | 
			
		||||
    "type", "string|array", "Type of variable (string, number, integer, boolean, object, array, numeric, null, any). Types are using for validation and determining the structure of a parameter. You can use a union type by providing an array of simple types. If one of the union types matches the provided value, then the value is valid."
 | 
			
		||||
    "instanceOf", "string", "When the type is an object, you can specify the class that the object must implement"
 | 
			
		||||
    "required", "boolean", "Whether or not the parameter is required"
 | 
			
		||||
    "default", "mixed", "Default value to use if no value is supplied"
 | 
			
		||||
    "static", "boolean", "Set to true to specify that the parameter value cannot be changed from the default setting"
 | 
			
		||||
    "description", "string", "Documentation of the parameter"
 | 
			
		||||
    "location", "string", "The location of a request used to apply a parameter. Custom locations can be registered with a command, but the defaults are uri, query, statusCode, reasonPhrase, header, body, json, xml, postField, postFile, responseBody"
 | 
			
		||||
    "sentAs", "string", "Specifies how the data being modeled is sent over the wire. For example, you may wish to include certain headers in a response model that have a normalized casing of FooBar, but the actual header is x-foo-bar. In this case, sentAs would be set to x-foo-bar."
 | 
			
		||||
    "filters", "array", "Array of functions to to run a parameter value through."
 | 
			
		||||
 | 
			
		||||
filters
 | 
			
		||||
~~~~~~~
 | 
			
		||||
 | 
			
		||||
Each value in the array must be a string containing the full class path to a static method or an array of complex
 | 
			
		||||
filter information. You can specify static methods of classes using the full namespace class name followed by
 | 
			
		||||
"::" (e.g. ``FooBar::baz()``). Some filters require arguments in order to properly filter a value. For complex filters,
 | 
			
		||||
use an object containing a ``method`` attribute pointing to a function, and an ``args`` attribute containing an
 | 
			
		||||
array of positional arguments to pass to the function. Arguments can contain keywords that are replaced when filtering
 | 
			
		||||
a value: ``@value`` is replaced with the value being filtered, and ``@api`` is replaced with the actual Parameter
 | 
			
		||||
object.
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "filters": [
 | 
			
		||||
            "strtolower",
 | 
			
		||||
            {
 | 
			
		||||
                "method": "MyClass::convertString",
 | 
			
		||||
                "args": [ "test", "@value", "@api" ]
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
The above example will filter a parameter using ``strtolower``. It will then call the ``convertString`` static method
 | 
			
		||||
of ``MyClass``, passing in "test", the actual value of the parameter, and a ``Guzzle\Service\Description\Parameter``
 | 
			
		||||
object.
 | 
			
		||||
 | 
			
		||||
Operation parameter location attributes
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
The location field of top-level parameters control how a parameter is serialized when generating a request.
 | 
			
		||||
 | 
			
		||||
uri location
 | 
			
		||||
^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are injected into the ``uri`` attribute of the operation using
 | 
			
		||||
`URI-template expansion <http://tools.ietf.org/html/rfc6570>`_.
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "operations": {
 | 
			
		||||
            "uriTest": {
 | 
			
		||||
                "uri": "/test/{testValue}",
 | 
			
		||||
                "parameters": {
 | 
			
		||||
                    "testValue": {
 | 
			
		||||
                        "location": "uri"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
query location
 | 
			
		||||
^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are injected into the query string of a request. Query values can be nested, which would result in a PHP
 | 
			
		||||
style nested query string. The name of a parameter is the default name of the query string parameter added to the
 | 
			
		||||
request. You can override this behavior by specifying the ``sentAs`` attribute on the parameter.
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "operations": {
 | 
			
		||||
            "queryTest": {
 | 
			
		||||
                "parameters": {
 | 
			
		||||
                    "testValue": {
 | 
			
		||||
                        "location": "query",
 | 
			
		||||
                        "sentAs": "test_value"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
header location
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are injected as headers on an HTTP request. The name of the parameter is used as the name of the header by
 | 
			
		||||
default. You can change the name of the header created by the parameter using the ``sentAs`` attribute.
 | 
			
		||||
 | 
			
		||||
Headers that are of type ``object`` will be added as multiple headers to a request using the key of the input array as
 | 
			
		||||
the header key. Setting a ``sentAs`` attribute along with a type ``object`` will use the value of ``sentAs`` as a
 | 
			
		||||
prefix for each header key.
 | 
			
		||||
 | 
			
		||||
body location
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are injected as the body of a request. The input of these parameters may be anything that can be cast to a
 | 
			
		||||
string or a ``Guzzle\Http\EntityBodyInterface`` object.
 | 
			
		||||
 | 
			
		||||
postField location
 | 
			
		||||
^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are inserted as POST fields in a request. Nested values may be supplied and will be represented using
 | 
			
		||||
PHP style nested query strings. The POST field name is the same as the parameter name by default. You can use the
 | 
			
		||||
``sentAs`` parameter to override the POST field name.
 | 
			
		||||
 | 
			
		||||
postFile location
 | 
			
		||||
^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are added as POST files. A postFile value may be a string pointing to a local filename or a
 | 
			
		||||
``Guzzle\Http\Message\PostFileInterface`` object. The name of the POST file will be the name of the parameter by
 | 
			
		||||
default. You can use a custom POST file name by using the ``sentAs`` attribute.
 | 
			
		||||
 | 
			
		||||
Supports "string" and "array" types.
 | 
			
		||||
 | 
			
		||||
json location
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are added to the body of a request as top level keys of a JSON document. Nested values may be specified,
 | 
			
		||||
with any number of nested ``Guzzle\Common\ToArrayInterface`` objects. When JSON parameters are specified, the
 | 
			
		||||
``Content-Type`` of the request will change to ``application/json`` if a ``Content-Type`` has not already been specified
 | 
			
		||||
on the request.
 | 
			
		||||
 | 
			
		||||
xml location
 | 
			
		||||
^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Parameters are added to the body of a request as top level nodes of an XML document. Nested values may be specified,
 | 
			
		||||
with any number of nested ``Guzzle\Common\ToArrayInterface`` objects. When XML parameters are specified, the
 | 
			
		||||
``Content-Type`` of the request will change to ``application/xml`` if a ``Content-Type`` has not already been specified
 | 
			
		||||
on the request.
 | 
			
		||||
 | 
			
		||||
responseBody location
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Specifies the EntityBody of a response. This can be used to download the response body to a file or a custom Guzzle
 | 
			
		||||
EntityBody object.
 | 
			
		||||
 | 
			
		||||
No location
 | 
			
		||||
^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
If a parameter has no location attribute, then the parameter is simply used as a data value.
 | 
			
		||||
 | 
			
		||||
Other locations
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Custom locations can be registered as new locations or override default locations if needed.
 | 
			
		||||
 | 
			
		||||
.. _model-schema:
 | 
			
		||||
 | 
			
		||||
Model Schema
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Models are used in service descriptions to provide generic JSON schema definitions that can be extended from or used in
 | 
			
		||||
``$ref`` attributes. Models can also be referenced in a ``responseClass`` attribute to provide valuable output to an
 | 
			
		||||
operation. Models are JSON schema documents and use the exact syntax and attributes used in parameters.
 | 
			
		||||
 | 
			
		||||
Response Models
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Response models describe how a response is parsed into a ``Guzzle\Service\Resource\Model`` object. Response models are
 | 
			
		||||
always modeled as JSON schema objects. When an HTTP response is parsed using a response model, the rules specified on
 | 
			
		||||
each property of a response model will translate 1:1 as keys in a PHP associative array. When a ``sentAs`` attribute is
 | 
			
		||||
found in response model parameters, the value retrieved from the HTTP response is retrieved using the ``sentAs``
 | 
			
		||||
parameter but stored in the response model using the name of the parameter.
 | 
			
		||||
 | 
			
		||||
The location field of top-level parameters in a response model tell response parsers how data is retrieved from a
 | 
			
		||||
response.
 | 
			
		||||
 | 
			
		||||
statusCode location
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves the status code of the response.
 | 
			
		||||
 | 
			
		||||
reasonPhrase location
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves the reason phrase of the response.
 | 
			
		||||
 | 
			
		||||
header location
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves a header from the HTTP response.
 | 
			
		||||
 | 
			
		||||
body location
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves the body of an HTTP response.
 | 
			
		||||
 | 
			
		||||
json location
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves a top-level parameter from a JSON document contained in an HTTP response.
 | 
			
		||||
 | 
			
		||||
You can use ``additionalProperties`` if the JSON document is wrapped in an outer array. This allows you to parse the
 | 
			
		||||
contents of each item in the array using the parsing rules defined in the ``additionalProperties`` schema.
 | 
			
		||||
 | 
			
		||||
xml location
 | 
			
		||||
^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Retrieves a top-level node value from an XML document contained in an HTTP response.
 | 
			
		||||
 | 
			
		||||
Other locations
 | 
			
		||||
^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Custom locations can be registered as new locations or override default locations if needed.
 | 
			
		||||
 | 
			
		||||
Example service description
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
Let's say you're interacting with a web service called 'Foo' that allows for the following routes and methods::
 | 
			
		||||
 | 
			
		||||
    GET/POST   /users
 | 
			
		||||
    GET/DELETE /users/:id
 | 
			
		||||
 | 
			
		||||
The following JSON service description implements this simple web service:
 | 
			
		||||
 | 
			
		||||
.. class:: overflow-height-500px
 | 
			
		||||
 | 
			
		||||
    .. code-block:: json
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Foo",
 | 
			
		||||
            "apiVersion": "2012-10-14",
 | 
			
		||||
            "baseUrl": "http://api.foo.com",
 | 
			
		||||
            "description": "Foo is an API that allows you to Baz Bar",
 | 
			
		||||
            "operations": {
 | 
			
		||||
                "GetUsers": {
 | 
			
		||||
                    "httpMethod": "GET",
 | 
			
		||||
                    "uri": "/users",
 | 
			
		||||
                    "summary": "Gets a list of users",
 | 
			
		||||
                    "responseClass": "GetUsersOutput"
 | 
			
		||||
                },
 | 
			
		||||
                "CreateUser": {
 | 
			
		||||
                    "httpMethod": "POST",
 | 
			
		||||
                    "uri": "/users",
 | 
			
		||||
                    "summary": "Creates a new user",
 | 
			
		||||
                    "responseClass": "CreateUserOutput",
 | 
			
		||||
                    "parameters": {
 | 
			
		||||
                        "name": {
 | 
			
		||||
                            "location": "json",
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        },
 | 
			
		||||
                        "age": {
 | 
			
		||||
                            "location": "json",
 | 
			
		||||
                            "type": "integer"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "GetUser": {
 | 
			
		||||
                    "httpMethod": "GET",
 | 
			
		||||
                    "uri": "/users/{id}",
 | 
			
		||||
                    "summary": "Retrieves a single user",
 | 
			
		||||
                    "responseClass": "GetUserOutput",
 | 
			
		||||
                    "parameters": {
 | 
			
		||||
                        "id": {
 | 
			
		||||
                            "location": "uri",
 | 
			
		||||
                            "description": "User to retrieve by ID",
 | 
			
		||||
                            "required": true
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "DeleteUser": {
 | 
			
		||||
                    "httpMethod": "DELETE",
 | 
			
		||||
                    "uri": "/users/{id}",
 | 
			
		||||
                    "summary": "Deletes a user",
 | 
			
		||||
                    "responseClass": "DeleteUserOutput",
 | 
			
		||||
                    "parameters": {
 | 
			
		||||
                        "id": {
 | 
			
		||||
                            "location": "uri",
 | 
			
		||||
                            "description": "User to delete by ID",
 | 
			
		||||
                            "required": true
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "models": {
 | 
			
		||||
                "GetUsersOutput": {
 | 
			
		||||
                    "type": "array",
 | 
			
		||||
                    "items": {
 | 
			
		||||
                        "type": "object",
 | 
			
		||||
                        "properties": {
 | 
			
		||||
                            "name": {
 | 
			
		||||
                                "location": "json",
 | 
			
		||||
                                "type": "string"
 | 
			
		||||
                            },
 | 
			
		||||
                            "age": {
 | 
			
		||||
                                "location": "json",
 | 
			
		||||
                                "type": "integer"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "CreateUserOutput": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                        "id": {
 | 
			
		||||
                            "location": "json",
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        },
 | 
			
		||||
                        "location": {
 | 
			
		||||
                            "location": "header",
 | 
			
		||||
                            "sentAs": "Location",
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "GetUserOutput": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                        "name": {
 | 
			
		||||
                            "location": "json",
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        },
 | 
			
		||||
                        "age": {
 | 
			
		||||
                            "location": "json",
 | 
			
		||||
                            "type": "integer"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "DeleteUserOutput": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                        "status": {
 | 
			
		||||
                            "location": "statusCode",
 | 
			
		||||
                            "type": "integer"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
If you attach this service description to a client, you would completely configure the client to interact with the
 | 
			
		||||
Foo web service and provide valuable response models for each operation.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Description\ServiceDescription;
 | 
			
		||||
 | 
			
		||||
    $description = ServiceDescription::factory('/path/to/client.json');
 | 
			
		||||
    $client->setDescription($description);
 | 
			
		||||
 | 
			
		||||
    $command = $client->getCommand('DeleteUser', array('id' => 123));
 | 
			
		||||
    $responseModel = $client->execute($command);
 | 
			
		||||
    echo $responseModel['status'];
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    You can add the service description to your client's factory method or constructor.
 | 
			
		||||
@@ -0,0 +1,316 @@
 | 
			
		||||
=======================
 | 
			
		||||
Using a service builder
 | 
			
		||||
=======================
 | 
			
		||||
 | 
			
		||||
The best way to instantiate Guzzle web service clients is to let Guzzle handle building the clients for you using a
 | 
			
		||||
ServiceBuilder. A ServiceBuilder is responsible for creating concrete client objects based on configuration settings
 | 
			
		||||
and helps to manage credentials for different environments.
 | 
			
		||||
 | 
			
		||||
You don't have to use a service builder, but they help to decouple your application from concrete classes and help to
 | 
			
		||||
share configuration data across multiple clients. Consider the following example. Here we are creating two clients that
 | 
			
		||||
require the same API public key and secret key. The clients are created using their ``factory()`` methods.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use MyService\FooClient;
 | 
			
		||||
    use MyService\BarClient;
 | 
			
		||||
 | 
			
		||||
    $foo = FooClient::factory(array(
 | 
			
		||||
        'key'    => 'abc',
 | 
			
		||||
        'secret' => '123',
 | 
			
		||||
        'custom' => 'and above all'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    $bar = BarClient::factory(array(
 | 
			
		||||
        'key'    => 'abc',
 | 
			
		||||
        'secret' => '123',
 | 
			
		||||
        'custom' => 'listen to me'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
The redundant specification of the API keys can be removed using a service builder.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Builder\ServiceBuilder;
 | 
			
		||||
 | 
			
		||||
    $builder = ServiceBuilder::factory(array(
 | 
			
		||||
        'services' => array(
 | 
			
		||||
            'abstract_client' => array(
 | 
			
		||||
                'params' => array(
 | 
			
		||||
                    'key'    => 'abc',
 | 
			
		||||
                    'secret' => '123'
 | 
			
		||||
                )
 | 
			
		||||
            ),
 | 
			
		||||
            'foo' => array(
 | 
			
		||||
                'extends' => 'abstract_client',
 | 
			
		||||
                'class'   => 'MyService\FooClient',
 | 
			
		||||
                'params'  => array(
 | 
			
		||||
                    'custom' => 'and above all'
 | 
			
		||||
                )
 | 
			
		||||
            ),
 | 
			
		||||
            'bar' => array(
 | 
			
		||||
                'extends' => 'abstract_client',
 | 
			
		||||
                'class'   => 'MyService\FooClient',
 | 
			
		||||
                'params'  => array(
 | 
			
		||||
                    'custom' => 'listen to me'
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    $foo = $builder->get('foo');
 | 
			
		||||
    $bar = $builder->get('bar');
 | 
			
		||||
 | 
			
		||||
You can make managing your API keys even easier by saving the service builder configuration in a JSON format in a
 | 
			
		||||
.json file.
 | 
			
		||||
 | 
			
		||||
Creating a service builder
 | 
			
		||||
--------------------------
 | 
			
		||||
 | 
			
		||||
A ServiceBuilder can source information from an array, an PHP include file that returns an array, or a JSON file.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Builder\ServiceBuilder;
 | 
			
		||||
 | 
			
		||||
    // Source service definitions from a JSON file
 | 
			
		||||
    $builder = ServiceBuilder::factory('services.json');
 | 
			
		||||
 | 
			
		||||
Sourcing data from an array
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Data can be source from a PHP array. The array must contain an associative ``services`` array that maps the name of a
 | 
			
		||||
client to the configuration information used by the service builder to create the client. Clients are given names
 | 
			
		||||
which are used to identify how a client is retrieved from a service builder. This can be useful for using multiple
 | 
			
		||||
accounts for the same service or creating development clients vs. production clients.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $services = array(
 | 
			
		||||
        'includes' => array(
 | 
			
		||||
            '/path/to/other/services.json',
 | 
			
		||||
            '/path/to/other/php_services.php'
 | 
			
		||||
        ),
 | 
			
		||||
        'services' => array(
 | 
			
		||||
            'abstract.foo' => array(
 | 
			
		||||
                'params' => array(
 | 
			
		||||
                    'username' => 'foo',
 | 
			
		||||
                    'password' => 'bar'
 | 
			
		||||
                )
 | 
			
		||||
            ),
 | 
			
		||||
            'bar' => array(
 | 
			
		||||
                'extends' => 'abstract.foo',
 | 
			
		||||
                'class'   => 'MyClientClass',
 | 
			
		||||
                'params'  => array(
 | 
			
		||||
                    'other' => 'abc'
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
A service builder configuration array contains two top-level array keys:
 | 
			
		||||
 | 
			
		||||
+------------+---------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| Key        | Description                                                                                             |
 | 
			
		||||
+============+=========================================================================================================+
 | 
			
		||||
| includes   | Array of paths to JSON or PHP include files to include in the configuration.                            |
 | 
			
		||||
+------------+---------------------------------------------------------------------------------------------------------+
 | 
			
		||||
| services   | Associative array of defined services that can be created by the service builder. Each service can      |
 | 
			
		||||
|            | contain the following keys:                                                                             |
 | 
			
		||||
|            |                                                                                                         |
 | 
			
		||||
|            | +------------+----------------------------------------------------------------------------------------+ |
 | 
			
		||||
|            | | Key        | Description                                                                            | |
 | 
			
		||||
|            | +============+========================================================================================+ |
 | 
			
		||||
|            | | class      | The concrete class to instantiate that implements the                                  | |
 | 
			
		||||
|            | |            | ``Guzzle\Common\FromConfigInterface``.                                                 | |
 | 
			
		||||
|            | +------------+----------------------------------------------------------------------------------------+ |
 | 
			
		||||
|            | | extends    | The name of a previously defined service to extend from                                | |
 | 
			
		||||
|            | +------------+----------------------------------------------------------------------------------------+ |
 | 
			
		||||
|            | | params     | Associative array of parameters to pass to the factory method of the service it is     | |
 | 
			
		||||
|            | |            | instantiated                                                                           | |
 | 
			
		||||
|            | +------------+----------------------------------------------------------------------------------------+ |
 | 
			
		||||
|            | | alias      | An alias that can be used in addition to the array key for retrieving a client from    | |
 | 
			
		||||
|            | |            | the service builder.                                                                   | |
 | 
			
		||||
|            | +------------+----------------------------------------------------------------------------------------+ |
 | 
			
		||||
+------------+---------------------------------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
The first client defined, ``abstract.foo``, is used as a placeholder of shared configuration values. Any service
 | 
			
		||||
extending abstract.foo will inherit its params. As an example, this can be useful when clients share the same username
 | 
			
		||||
and password.
 | 
			
		||||
 | 
			
		||||
The next client, ``bar``, extends from ``abstract.foo`` using the ``extends`` attribute referencing the client from
 | 
			
		||||
which to extend. Additional parameters can be merged into the original service definition when extending a parent
 | 
			
		||||
service.
 | 
			
		||||
 | 
			
		||||
.. important::
 | 
			
		||||
 | 
			
		||||
    Each client that you intend to instantiate must specify a ``class`` attribute that references the full class name
 | 
			
		||||
    of the client being created. The class referenced in the ``class`` parameter must implement a static ``factory()``
 | 
			
		||||
    method that accepts an array or ``Guzzle\Common\Collection`` object and returns an instantiated object.
 | 
			
		||||
 | 
			
		||||
Sourcing from a PHP include
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can create service builder configurations using a PHP include file. This can be useful if you wish to take
 | 
			
		||||
advantage of an opcode cache like APC to speed up the process of loading and processing the configuration. The PHP
 | 
			
		||||
include file is the same format as an array, but you simply create a PHP script that returns an array and save the
 | 
			
		||||
file with the .php file extension.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    <?php return array('services' => '...');
 | 
			
		||||
    // Saved as config.php
 | 
			
		||||
 | 
			
		||||
This configuration file can then be used with a service builder.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $builder = ServiceBuilder::factory('/path/to/config.php');
 | 
			
		||||
 | 
			
		||||
Sourcing from a JSON document
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can use JSON documents to serialize your service descriptions. The JSON format uses the exact same structure as
 | 
			
		||||
the PHP array syntax, but it's just serialized using JSON.
 | 
			
		||||
 | 
			
		||||
.. code-block:: javascript
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "includes": ["/path/to/other/services.json", "/path/to/other/php_services.php"],
 | 
			
		||||
        "services": {
 | 
			
		||||
            "abstract.foo": {
 | 
			
		||||
                "params": {
 | 
			
		||||
                    "username": "foo",
 | 
			
		||||
                    "password": "bar"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "bar": {
 | 
			
		||||
                "extends": "abstract.foo",
 | 
			
		||||
                "class": "MyClientClass",
 | 
			
		||||
                "params": {
 | 
			
		||||
                    "other": "abc"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Referencing other clients in parameters
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
If one of your clients depends on another client as one of its parameters, you can reference that client by name by
 | 
			
		||||
enclosing the client's reference key in ``{}``.
 | 
			
		||||
 | 
			
		||||
.. code-block:: javascript
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "services": {
 | 
			
		||||
            "token": {
 | 
			
		||||
                "class": "My\Token\TokenFactory",
 | 
			
		||||
                "params": {
 | 
			
		||||
                    "access_key": "xyz"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "client": {
 | 
			
		||||
                "class": "My\Client",
 | 
			
		||||
                "params": {
 | 
			
		||||
                    "token_client": "{token}",
 | 
			
		||||
                    "version": "1.0"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
When ``client`` is constructed by the service builder, the service builder will first create the ``token`` service
 | 
			
		||||
and then inject the token service into ``client``'s factory method in the ``token_client`` parameter.
 | 
			
		||||
 | 
			
		||||
Retrieving clients from a service builder
 | 
			
		||||
-----------------------------------------
 | 
			
		||||
 | 
			
		||||
Clients are referenced using a customizable name you provide in your service definition. The ServiceBuilder is a sort
 | 
			
		||||
of multiton object-- it will only instantiate a client once and return that client for subsequent retrievals. Clients
 | 
			
		||||
are retrieved by name (the array key used in the configuration) or by the ``alias`` setting of a service.
 | 
			
		||||
 | 
			
		||||
Here's an example of retrieving a client from your ServiceBuilder:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = $builder->get('foo');
 | 
			
		||||
 | 
			
		||||
    // You can also use the ServiceBuilder object as an array
 | 
			
		||||
    $client = $builder['foo'];
 | 
			
		||||
 | 
			
		||||
Creating throwaway clients
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can get a "throwaway" client (a client that is not persisted by the ServiceBuilder) by passing ``true`` in the
 | 
			
		||||
second argument of ``ServiceBuilder::get()``. This allows you to create a client that will not be returned by other
 | 
			
		||||
parts of your code that use the service builder. Instead of passing ``true``, you can pass an array of configuration
 | 
			
		||||
settings that will override the configuration settings specified in the service builder.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Get a throwaway client and overwrite the "custom" setting of the client
 | 
			
		||||
    $foo = $builder->get('foo', array(
 | 
			
		||||
        'custom' => 'in this world there are rules'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Getting raw configuration settings
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
You can get the raw configuration settings provided to the service builder for a specific service using the
 | 
			
		||||
``getData($name)`` method of a service builder. This method will null if the service was not found in the service
 | 
			
		||||
builder or an array of configuration settings if the service was found.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $data = $builder->getData('foo');
 | 
			
		||||
    echo $data['key'] . "\n";
 | 
			
		||||
    echo $data['secret'] . "\n";
 | 
			
		||||
    echo $data['custom'] . "\n";
 | 
			
		||||
 | 
			
		||||
Adding a plugin to all clients
 | 
			
		||||
------------------------------
 | 
			
		||||
 | 
			
		||||
You can add a plugin to all clients created by a service builder using the ``addGlobalPlugin($plugin)`` method of a
 | 
			
		||||
service builder and passing a ``Symfony\Component\EventDispatcher\EventSubscriberInterface`` object. The service builder
 | 
			
		||||
will then attach each global plugin to every client as it is created. This allows you to, for example, add a LogPlugin
 | 
			
		||||
to every request created by a service builder for easy debugging.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Plugin\Log\LogPlugin;
 | 
			
		||||
 | 
			
		||||
    // Add a debug log plugin to every client as it is created
 | 
			
		||||
    $builder->addGlobalPlugin(LogPlugin::getDebugPlugin());
 | 
			
		||||
 | 
			
		||||
    $foo = $builder->get('foo');
 | 
			
		||||
    $foo->get('/')->send();
 | 
			
		||||
    // Should output all of the data sent over the wire
 | 
			
		||||
 | 
			
		||||
.. _service-builder-events:
 | 
			
		||||
 | 
			
		||||
Events emitted from a service builder
 | 
			
		||||
-------------------------------------
 | 
			
		||||
 | 
			
		||||
A ``Guzzle\Service\Builder\ServiceBuilder`` object emits the following events:
 | 
			
		||||
 | 
			
		||||
+-------------------------------+--------------------------------------------+-----------------------------------------+
 | 
			
		||||
| Event name                    | Description                                | Event data                              |
 | 
			
		||||
+===============================+============================================+=========================================+
 | 
			
		||||
| service_builder.create_client | Called when a client is created            | * client: The created client object     |
 | 
			
		||||
+-------------------------------+--------------------------------------------+-----------------------------------------+
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
    use Guzzle\Service\Builder\ServiceBuilder;
 | 
			
		||||
 | 
			
		||||
    $builder = ServiceBuilder::factory('/path/to/config.json');
 | 
			
		||||
 | 
			
		||||
    // Add an event listener to print out each client client as it is created
 | 
			
		||||
    $builder->getEventDispatcher()->addListener('service_builder.create_client', function (Event $e) {
 | 
			
		||||
        echo 'Client created: ' . get_class($e['client']) . "\n";
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $foo = $builder->get('foo');
 | 
			
		||||
    // Should output the class used for the "foo" client
 | 
			
		||||
							
								
								
									
										659
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/webservice-client.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										659
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/webservice-client.rst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,659 @@
 | 
			
		||||
======================
 | 
			
		||||
The web service client
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
The ``Guzzle\Service`` namespace contains various abstractions that help to make it easier to interact with a web
 | 
			
		||||
service API, including commands, service descriptions, and resource iterators.
 | 
			
		||||
 | 
			
		||||
In this chapter, we'll build a simple `Twitter API client <https://dev.twitter.com/docs/api/1.1>`_.
 | 
			
		||||
 | 
			
		||||
Creating a client
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
A class that extends from ``Guzzle\Service\Client`` or implements ``Guzzle\Service\ClientInterface`` must implement a
 | 
			
		||||
``factory()`` method in order to be used with a :doc:`service builder <using-the-service-builder>`.
 | 
			
		||||
 | 
			
		||||
Factory method
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
You can use the ``factory()`` method of a client directly if you do not need a service builder.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use mtdowling\TwitterClient;
 | 
			
		||||
 | 
			
		||||
    // Create a client and pass an array of configuration data
 | 
			
		||||
    $twitter = TwitterClient::factory(array(
 | 
			
		||||
        'consumer_key'    => '****',
 | 
			
		||||
        'consumer_secret' => '****',
 | 
			
		||||
        'token'           => '****',
 | 
			
		||||
        'token_secret'    => '****'
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    If you'd like to follow along, here's how to get your Twitter API credentials:
 | 
			
		||||
 | 
			
		||||
    1. Visit https://dev.twitter.com/apps
 | 
			
		||||
    2. Click on an application that you've created
 | 
			
		||||
    3. Click on the "OAuth tool" tab
 | 
			
		||||
    4. Copy all of the settings under "OAuth Settings"
 | 
			
		||||
 | 
			
		||||
Implementing a factory method
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
Creating a client and its factory method is pretty simple. You just need to implement ``Guzzle\Service\ClientInterface``
 | 
			
		||||
or extend from ``Guzzle\Service\Client``.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    namespace mtdowling;
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Collection;
 | 
			
		||||
    use Guzzle\Plugin\Oauth\OauthPlugin;
 | 
			
		||||
    use Guzzle\Service\Client;
 | 
			
		||||
    use Guzzle\Service\Description\ServiceDescription;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * A simple Twitter API client
 | 
			
		||||
     */
 | 
			
		||||
    class TwitterClient extends Client
 | 
			
		||||
    {
 | 
			
		||||
        public static function factory($config = array())
 | 
			
		||||
        {
 | 
			
		||||
            // Provide a hash of default client configuration options
 | 
			
		||||
            $default = array('base_url' => 'https://api.twitter.com/1.1');
 | 
			
		||||
 | 
			
		||||
            // The following values are required when creating the client
 | 
			
		||||
            $required = array(
 | 
			
		||||
                'base_url',
 | 
			
		||||
                'consumer_key',
 | 
			
		||||
                'consumer_secret',
 | 
			
		||||
                'token',
 | 
			
		||||
                'token_secret'
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            // Merge in default settings and validate the config
 | 
			
		||||
            $config = Collection::fromConfig($config, $default, $required);
 | 
			
		||||
 | 
			
		||||
            // Create a new Twitter client
 | 
			
		||||
            $client = new self($config->get('base_url'), $config);
 | 
			
		||||
 | 
			
		||||
            // Ensure that the OauthPlugin is attached to the client
 | 
			
		||||
            $client->addSubscriber(new OauthPlugin($config->toArray()));
 | 
			
		||||
 | 
			
		||||
            return $client;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Service Builder
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
A service builder is used to easily create web service clients, provides a simple configuration driven approach to
 | 
			
		||||
creating clients, and allows you to share configuration settings across multiple clients. You can find out more about
 | 
			
		||||
Guzzle's service builder in :doc:`using-the-service-builder`.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Builder\ServiceBuilder;
 | 
			
		||||
 | 
			
		||||
    // Create a service builder and provide client configuration data
 | 
			
		||||
    $builder = ServiceBuilder::factory('/path/to/client_config.json');
 | 
			
		||||
 | 
			
		||||
    // Get the client from the service builder by name
 | 
			
		||||
    $twitter = $builder->get('twitter');
 | 
			
		||||
 | 
			
		||||
The above example assumes you have JSON data similar to the following stored in "/path/to/client_config.json":
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "services": {
 | 
			
		||||
            "twitter": {
 | 
			
		||||
                "class": "mtdowling\\TwitterClient",
 | 
			
		||||
                "params": {
 | 
			
		||||
                    "consumer_key": "****",
 | 
			
		||||
                    "consumer_secret": "****",
 | 
			
		||||
                    "token": "****",
 | 
			
		||||
                    "token_secret": "****"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    A service builder becomes much more valuable when using multiple web service clients in a single application or
 | 
			
		||||
    if you need to utilize the same client with varying configuration settings (e.g. multiple accounts).
 | 
			
		||||
 | 
			
		||||
Commands
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
Commands are a concept in Guzzle that helps to hide the underlying implementation of an API by providing an easy to use
 | 
			
		||||
parameter driven object for each action of an API. A command is responsible for accepting an array of configuration
 | 
			
		||||
parameters, serializing an HTTP request, and parsing an HTTP response. Following the
 | 
			
		||||
`command pattern <http://en.wikipedia.org/wiki/Command_pattern>`_, commands in Guzzle offer a greater level of
 | 
			
		||||
flexibility when implementing and utilizing a web service client.
 | 
			
		||||
 | 
			
		||||
Executing commands
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
You must explicitly execute a command after creating a command using the ``getCommand()`` method. A command has an
 | 
			
		||||
``execute()`` method that may be called, or you can use the ``execute()`` method of a client object and pass in the
 | 
			
		||||
command object. Calling either of these execute methods will return the result value of the command. The result value is
 | 
			
		||||
the result of parsing the HTTP response with the ``process()`` method.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Get a command from the client and pass an array of parameters
 | 
			
		||||
    $command = $twitter->getCommand('getMentions', array(
 | 
			
		||||
        'count' => 5
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
    // Other parameters can be set on the command after it is created
 | 
			
		||||
    $command['trim_user'] = false;
 | 
			
		||||
 | 
			
		||||
    // Execute the command using the command object.
 | 
			
		||||
    // The result value contains an array of JSON data from the response
 | 
			
		||||
    $result = $command->execute();
 | 
			
		||||
 | 
			
		||||
    // You can retrieve the result of the command later too
 | 
			
		||||
    $result = $command->getResult().
 | 
			
		||||
 | 
			
		||||
Command object also contains methods that allow you to inspect the HTTP request and response that was utilized with
 | 
			
		||||
the command.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $request = $command->getRequest();
 | 
			
		||||
    $response = $command->getResponse();
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    The format and notation used to retrieve commands from a client can be customized by injecting a custom command
 | 
			
		||||
    factory, ``Guzzle\Service\Command\Factory\FactoryInterface``, on the client using ``$client->setCommandFactory()``.
 | 
			
		||||
 | 
			
		||||
Executing with magic methods
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When using method missing magic methods with a command, the command will be executed right away and the result of the
 | 
			
		||||
command is returned.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $jsonData = $twitter->getMentions(array(
 | 
			
		||||
        'count'     => 5,
 | 
			
		||||
        'trim_user' => true
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Creating commands
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Commands are created using either the ``getCommand()`` method of a client or a magic missing method of a client. Using
 | 
			
		||||
the ``getCommand()`` method allows you to create a command without executing it, allowing for customization of the
 | 
			
		||||
command or the request serialized by the command.
 | 
			
		||||
 | 
			
		||||
When a client attempts to create a command, it uses the client's ``Guzzle\Service\Command\Factory\FactoryInterface``.
 | 
			
		||||
By default, Guzzle will utilize a command factory that first looks for a concrete class for a particular command
 | 
			
		||||
(concrete commands) followed by a command defined by a service description (operation commands). We'll learn more about
 | 
			
		||||
concrete commands and operation commands later in this chapter.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Get a command from the twitter client.
 | 
			
		||||
    $command = $twitter->getCommand('getMentions');
 | 
			
		||||
    $result = $command->execute();
 | 
			
		||||
 | 
			
		||||
Unless you've skipped ahead, running the above code will throw an exception.
 | 
			
		||||
 | 
			
		||||
    PHP Fatal error:  Uncaught exception 'Guzzle\Common\Exception\InvalidArgumentException' with message
 | 
			
		||||
    'Command was not found matching getMentions'
 | 
			
		||||
 | 
			
		||||
This exception was thrown because the "getMentions" command has not yet been implemented. Let's implement one now.
 | 
			
		||||
 | 
			
		||||
Concrete commands
 | 
			
		||||
~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Commands can be created in one of two ways: create a concrete command class that extends
 | 
			
		||||
``Guzzle\Service\Command\AbstractCommand`` or
 | 
			
		||||
:doc:`create an OperationCommand based on a service description <guzzle-service-descriptions>`. The recommended
 | 
			
		||||
approach is to use a service description to define your web service, but you can use concrete commands when custom
 | 
			
		||||
logic must be implemented for marshaling or unmarshaling a HTTP message.
 | 
			
		||||
 | 
			
		||||
Commands are the method in which you abstract away the underlying format of the requests that need to be sent to take
 | 
			
		||||
action on a web service. Commands in Guzzle are meant to be built by executing a series of setter methods on a command
 | 
			
		||||
object. Commands are only validated right before they are executed. A ``Guzzle\Service\Client`` object is responsible
 | 
			
		||||
for executing commands. Commands created for your web service must implement
 | 
			
		||||
``Guzzle\Service\Command\CommandInterface``, but it's easier to extend the ``Guzzle\Service\Command\AbstractCommand``
 | 
			
		||||
class, implement the ``build()`` method, and optionally implement the ``process()`` method.
 | 
			
		||||
 | 
			
		||||
Serializing requests
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
The ``build()`` method of a command is responsible for using the arguments of the command to build and serialize a
 | 
			
		||||
HTTP request and set the request on the ``$request`` property of the command object. This step is usually taken care of
 | 
			
		||||
for you when using a service description driven command that uses the default
 | 
			
		||||
``Guzzle\Service\Command\OperationCommand``. You may wish to implement the process method yourself when you aren't
 | 
			
		||||
using a service description or need to implement more complex request serialization.
 | 
			
		||||
 | 
			
		||||
.. important::::
 | 
			
		||||
 | 
			
		||||
    When implementing a custom ``build()`` method, be sure to set the class property of ``$this->request`` to an
 | 
			
		||||
    instantiated and ready to send request.
 | 
			
		||||
 | 
			
		||||
The following example shows how to implement the ``getMentions``
 | 
			
		||||
`Twitter API <https://dev.twitter.com/docs/api/1.1/get/statuses/mentions_timeline>`_ method using a concrete command.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    namespace mtdowling\Twitter\Command;
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Command\AbstractCommand;
 | 
			
		||||
 | 
			
		||||
    class GetMentions extends AbstractCommand
 | 
			
		||||
    {
 | 
			
		||||
        protected function build()
 | 
			
		||||
        {
 | 
			
		||||
            // Create the request property of the command
 | 
			
		||||
            $this->request = $this->client->get('statuses/mentions_timeline.json');
 | 
			
		||||
 | 
			
		||||
            // Grab the query object of the request because we will use it for
 | 
			
		||||
            // serializing command parameters on the request
 | 
			
		||||
            $query = $this->request->getQuery();
 | 
			
		||||
 | 
			
		||||
            if ($this['count']) {
 | 
			
		||||
                $query->set('count', $this['count']);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this['since_id']) {
 | 
			
		||||
                $query->set('since_id', $this['since_id']);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this['max_id']) {
 | 
			
		||||
                $query->set('max_id', $this['max_id']);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this['trim_user'] !== null) {
 | 
			
		||||
                $query->set('trim_user', $this['trim_user'] ? 'true' : 'false');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this['contributor_details'] !== null) {
 | 
			
		||||
                $query->set('contributor_details', $this['contributor_details'] ? 'true' : 'false');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this['include_entities'] !== null) {
 | 
			
		||||
                $query->set('include_entities', $this['include_entities'] ? 'true' : 'false');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
By default, a client will attempt to find concrete command classes under the ``Command`` namespace of a client. First
 | 
			
		||||
the client will attempt to find an exact match for the name of the command to the name of the command class. If an
 | 
			
		||||
exact match is not found, the client will calculate a class name using inflection. This is calculated based on the
 | 
			
		||||
folder hierarchy of a command and converting the CamelCased named commands into snake_case. Here are some examples on
 | 
			
		||||
how the command names are calculated:
 | 
			
		||||
 | 
			
		||||
#. ``Foo\Command\JarJar`` **->** jar_jar
 | 
			
		||||
#. ``Foo\Command\Test`` **->** test
 | 
			
		||||
#. ``Foo\Command\People\GetCurrentPerson`` **->** people.get_current_person
 | 
			
		||||
 | 
			
		||||
Notice how any sub-namespace beneath ``Command`` is converted from ``\`` to ``.`` (a period). CamelCasing is converted
 | 
			
		||||
to lowercased snake_casing (e.g. JarJar == jar_jar).
 | 
			
		||||
 | 
			
		||||
Parsing responses
 | 
			
		||||
^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
The ``process()`` method of a command is responsible for converting an HTTP response into something more useful. For
 | 
			
		||||
example, a service description operation that has specified a model object in the ``responseClass`` attribute of the
 | 
			
		||||
operation will set a ``Guzzle\Service\Resource\Model`` object as the result of the command. This behavior can be
 | 
			
		||||
completely modified as needed-- even if you are using operations and responseClass models. Simply implement a custom
 | 
			
		||||
``process()`` method that sets the ``$this->result`` class property to whatever you choose. You can reuse parts of the
 | 
			
		||||
default Guzzle response parsing functionality or get inspiration from existing code by using
 | 
			
		||||
``Guzzle\Service\Command\OperationResponseParser`` and ``Guzzle\Service\Command\DefaultResponseParser`` classes.
 | 
			
		||||
 | 
			
		||||
If you do not implement a custom ``process()`` method and are not using a service description, then Guzzle will attempt
 | 
			
		||||
to guess how a response should be processed based on the Content-Type header of the response. Because the Twitter API
 | 
			
		||||
sets a ``Content-Type: application/json`` header on this response, we do not need to implement any custom response
 | 
			
		||||
parsing.
 | 
			
		||||
 | 
			
		||||
Operation commands
 | 
			
		||||
~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
Operation commands are commands in which the serialization of an HTTP request and the parsing of an HTTP response are
 | 
			
		||||
driven by a Guzzle service description. Because request serialization, validation, and response parsing are
 | 
			
		||||
described using a DSL, creating operation commands is a much faster process than writing concrete commands.
 | 
			
		||||
 | 
			
		||||
Creating operation commands for our Twitter client can remove a great deal of redundancy from the previous concrete
 | 
			
		||||
command, and allows for a deeper runtime introspection of the API. Here's an example service description we can use to
 | 
			
		||||
create the Twitter API client:
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "name": "Twitter",
 | 
			
		||||
        "apiVersion": "1.1",
 | 
			
		||||
        "baseUrl": "https://api.twitter.com/1.1",
 | 
			
		||||
        "description": "Twitter REST API client",
 | 
			
		||||
        "operations": {
 | 
			
		||||
            "GetMentions": {
 | 
			
		||||
                "httpMethod": "GET",
 | 
			
		||||
                "uri": "statuses/mentions_timeline.json",
 | 
			
		||||
                "summary": "Returns the 20 most recent mentions for the authenticating user.",
 | 
			
		||||
                "responseClass": "GetMentionsOutput",
 | 
			
		||||
                "parameters": {
 | 
			
		||||
                    "count": {
 | 
			
		||||
                        "description": "Specifies the number of tweets to try and retrieve",
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    "since_id": {
 | 
			
		||||
                        "description": "Returns results with an ID greater than the specified ID",
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    "max_id": {
 | 
			
		||||
                        "description": "Returns results with an ID less than or equal to the specified ID.",
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    "trim_user": {
 | 
			
		||||
                        "description": "Limits the amount of data returned for each user",
 | 
			
		||||
                        "type": "boolean",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    "contributor_details": {
 | 
			
		||||
                        "description": "Adds more data to contributor elements",
 | 
			
		||||
                        "type": "boolean",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    "include_entities": {
 | 
			
		||||
                        "description": "The entities node will be disincluded when set to false.",
 | 
			
		||||
                        "type": "boolean",
 | 
			
		||||
                        "location": "query"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "models": {
 | 
			
		||||
            "GetMentionsOutput": {
 | 
			
		||||
                "type": "object",
 | 
			
		||||
                "additionalProperties": {
 | 
			
		||||
                    "location": "json"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
If you're lazy, you can define the API in a less descriptive manner using ``additionalParameters``.
 | 
			
		||||
``additionalParameters`` define the serialization and validation rules of parameters that are not explicitly defined
 | 
			
		||||
in a service description.
 | 
			
		||||
 | 
			
		||||
.. code-block:: json
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "name": "Twitter",
 | 
			
		||||
        "apiVersion": "1.1",
 | 
			
		||||
        "baseUrl": "https://api.twitter.com/1.1",
 | 
			
		||||
        "description": "Twitter REST API client",
 | 
			
		||||
        "operations": {
 | 
			
		||||
            "GetMentions": {
 | 
			
		||||
                "httpMethod": "GET",
 | 
			
		||||
                "uri": "statuses/mentions_timeline.json",
 | 
			
		||||
                "summary": "Returns the 20 most recent mentions for the authenticating user.",
 | 
			
		||||
                "responseClass": "GetMentionsOutput",
 | 
			
		||||
                "additionalParameters": {
 | 
			
		||||
                    "location": "query"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "models": {
 | 
			
		||||
            "GetMentionsOutput": {
 | 
			
		||||
                "type": "object",
 | 
			
		||||
                "additionalProperties": {
 | 
			
		||||
                    "location": "json"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
You should attach the service description to the client at the end of the client's factory method:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // ...
 | 
			
		||||
    class TwitterClient extends Client
 | 
			
		||||
    {
 | 
			
		||||
        public static function factory($config = array())
 | 
			
		||||
        {
 | 
			
		||||
            // ... same code as before ...
 | 
			
		||||
 | 
			
		||||
            // Set the service description
 | 
			
		||||
            $client->setDescription(ServiceDescription::factory('path/to/twitter.json'));
 | 
			
		||||
 | 
			
		||||
            return $client;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
The client can now use operations defined in the service description instead of requiring you to create concrete
 | 
			
		||||
command classes. Feel free to delete the concrete command class we created earlier.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $jsonData = $twitter->getMentions(array(
 | 
			
		||||
        'count'     => 5,
 | 
			
		||||
        'trim_user' => true
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Executing commands in parallel
 | 
			
		||||
------------------------------
 | 
			
		||||
 | 
			
		||||
Much like HTTP requests, Guzzle allows you to send multiple commands in parallel. You can send commands in parallel by
 | 
			
		||||
passing an array of command objects to a client's ``execute()`` method. The client will serialize each request and
 | 
			
		||||
send them all in parallel. If an error is encountered during the transfer, then a
 | 
			
		||||
``Guzzle\Service\Exception\CommandTransferException`` is thrown, which allows you to retrieve a list of commands that
 | 
			
		||||
succeeded and a list of commands that failed.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Service\Exception\CommandTransferException;
 | 
			
		||||
 | 
			
		||||
    $commands = array();
 | 
			
		||||
    $commands[] = $twitter->getCommand('getMentions');
 | 
			
		||||
    $commands[] = $twitter->getCommand('otherCommandName');
 | 
			
		||||
    // etc...
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        $result = $client->execute($commands);
 | 
			
		||||
        foreach ($result as $command) {
 | 
			
		||||
            echo $command->getName() . ': ' . $command->getResponse()->getStatusCode() . "\n";
 | 
			
		||||
        }
 | 
			
		||||
    } catch (CommandTransferException $e) {
 | 
			
		||||
        // Get an array of the commands that succeeded
 | 
			
		||||
        foreach ($e->getSuccessfulCommands() as $command) {
 | 
			
		||||
            echo $command->getName() . " succeeded\n";
 | 
			
		||||
        }
 | 
			
		||||
        // Get an array of the commands that failed
 | 
			
		||||
        foreach ($e->getFailedCommands() as $command) {
 | 
			
		||||
            echo $command->getName() . " failed\n";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    All commands executed from a client using an array must originate from the same client.
 | 
			
		||||
 | 
			
		||||
Special command options
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
Guzzle exposes several options that help to control how commands are validated, serialized, and parsed.
 | 
			
		||||
Command options can be specified when creating a command or in the ``command.params`` parameter in the
 | 
			
		||||
``Guzzle\Service\Client``.
 | 
			
		||||
 | 
			
		||||
=========================== ============================================================================================
 | 
			
		||||
command.request_options     Option used to add :ref:`Request options <request-options>` to the request created by a
 | 
			
		||||
                            command
 | 
			
		||||
command.hidden_params       An array of the names of parameters ignored by the ``additionalParameters`` parameter schema
 | 
			
		||||
command.disable_validation  Set to true to disable JSON schema validation of the command's input parameters
 | 
			
		||||
command.response_processing Determines how the default response parser will parse the command. One of "raw" no parsing,
 | 
			
		||||
                            "model" (the default method used to parse commands using response models defined in service
 | 
			
		||||
                            descriptions)
 | 
			
		||||
command.headers             (deprecated) Option used to specify custom headers.  Use ``command.request_options`` instead
 | 
			
		||||
command.on_complete         (deprecated) Option used to add an onComplete method to a command.  Use
 | 
			
		||||
                            ``command.after_send`` event instead
 | 
			
		||||
command.response_body       (deprecated) Option used to change the entity body used to store a response.
 | 
			
		||||
                            Use ``command.request_options`` instead
 | 
			
		||||
=========================== ============================================================================================
 | 
			
		||||
 | 
			
		||||
Advanced client configuration
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
Default command parameters
 | 
			
		||||
--------------------------
 | 
			
		||||
 | 
			
		||||
When creating a client object, you can specify default command parameters to pass into all commands. Any key value pair
 | 
			
		||||
present in the ``command.params`` settings of a client will be added as default parameters to any command created
 | 
			
		||||
by the client.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    $client = new Guzzle\Service\Client(array(
 | 
			
		||||
        'command.params' => array(
 | 
			
		||||
            'default_1' => 'foo',
 | 
			
		||||
            'another'   => 'bar'
 | 
			
		||||
        )
 | 
			
		||||
    ));
 | 
			
		||||
 | 
			
		||||
Magic methods
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
Client objects will, by default, attempt to create and execute commands when a missing method is invoked on a client.
 | 
			
		||||
This powerful concept applies to both concrete commands and operation commands powered by a service description. This
 | 
			
		||||
makes it appear to the end user that you have defined actual methods on a client object, when in fact, the methods are
 | 
			
		||||
invoked using PHP's magic ``__call`` method.
 | 
			
		||||
 | 
			
		||||
The ``__call`` method uses the ``getCommand()`` method of a client, which uses the client's internal
 | 
			
		||||
``Guzzle\Service\Command\Factory\FactoryInterface`` object. The default command factory allows you to instantiate
 | 
			
		||||
operations defined in a client's service description. The method in which a client determines which command to
 | 
			
		||||
execute is defined as follows:
 | 
			
		||||
 | 
			
		||||
1. The client will first try to find a literal match for an operation in the service description.
 | 
			
		||||
2. If the literal match is not found, the client will try to uppercase the first character of the operation and find
 | 
			
		||||
   the match again.
 | 
			
		||||
3. If a match is still not found, the command factory will inflect the method name from CamelCase to snake_case and
 | 
			
		||||
   attempt to find a matching command.
 | 
			
		||||
4. If a command still does not match, an exception is thrown.
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    // Use the magic method
 | 
			
		||||
    $result = $twitter->getMentions();
 | 
			
		||||
 | 
			
		||||
    // This is exactly the same as:
 | 
			
		||||
    $result = $twitter->getCommand('getMentions')->execute();
 | 
			
		||||
 | 
			
		||||
You can disable magic methods on a client by passing ``false`` to the ``enableMagicMethod()`` method.
 | 
			
		||||
 | 
			
		||||
Custom command factory
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
A client by default uses the ``Guzzle\Service\Command\Factory\CompositeFactory`` which allows multiple command
 | 
			
		||||
factories to attempt to create a command by a certain name. The default CompositeFactory uses a ``ConcreteClassFactory``
 | 
			
		||||
and a ``ServiceDescriptionFactory`` if a service description is specified on a client. You can specify a custom
 | 
			
		||||
command factory if your client requires custom command creation logic using the ``setCommandFactory()`` method of
 | 
			
		||||
a client.
 | 
			
		||||
 | 
			
		||||
Custom resource Iterator factory
 | 
			
		||||
--------------------------------
 | 
			
		||||
 | 
			
		||||
Resource iterators can be retrieved from a client using the ``getIterator($name)`` method of a client. This method uses
 | 
			
		||||
a client's internal ``Guzzle\Service\Resource\ResourceIteratorFactoryInterface`` object. A client by default uses a
 | 
			
		||||
``Guzzle\Service\Resource\ResourceIteratorClassFactory`` to attempt to find concrete classes that implement resource
 | 
			
		||||
iterators. The default factory will first look for matching iterators in the ``Iterator`` subdirectory of the client
 | 
			
		||||
followed by the ``Model`` subdirectory of a client. Use the ``setResourceIteratorFactory()`` method of a client to
 | 
			
		||||
specify a custom resource iterator factory.
 | 
			
		||||
 | 
			
		||||
Plugins and events
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
``Guzzle\Service\Client`` exposes various events that allow you to hook in custom logic. A client object owns a
 | 
			
		||||
``Symfony\Component\EventDispatcher\EventDispatcher`` object that can be accessed by calling
 | 
			
		||||
``$client->getEventDispatcher()``. You can use the event dispatcher to add listeners (a simple callback function) or
 | 
			
		||||
event subscribers (classes that listen to specific events of a dispatcher).
 | 
			
		||||
 | 
			
		||||
.. _service-client-events:
 | 
			
		||||
 | 
			
		||||
Events emitted from a Service Client
 | 
			
		||||
------------------------------------
 | 
			
		||||
 | 
			
		||||
A ``Guzzle\Service\Client`` object emits the following events:
 | 
			
		||||
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| Event name                   | Description                                | Event data                               |
 | 
			
		||||
+==============================+============================================+==========================================+
 | 
			
		||||
| client.command.create        | The client created a command object        | * client: Client object                  |
 | 
			
		||||
|                              |                                            | * command: Command object                |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| command.before_prepare       | Before a command is validated and built.   | * command: Command being prepared        |
 | 
			
		||||
|                              | This is also before a request is created.  |                                          |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| command.after_prepare        | After a command instantiates and           | * command: Command that was prepared     |
 | 
			
		||||
|                              | configures its request object.             |                                          |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| command.before_send          | The client is about to execute a prepared  | * command: Command to execute            |
 | 
			
		||||
|                              | command                                    |                                          |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| command.after_send           | The client successfully completed          | * command: The command that was executed |
 | 
			
		||||
|                              | executing a command                        |                                          |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
| command.parse_response       | Called when ``responseType`` is ``class``  | * command: The command with a response   |
 | 
			
		||||
|                              | and the response is about to be parsed.    |   about to be parsed.                    |
 | 
			
		||||
+------------------------------+--------------------------------------------+------------------------------------------+
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
    use Guzzle\Service\Client;
 | 
			
		||||
 | 
			
		||||
    $client = new Client();
 | 
			
		||||
 | 
			
		||||
    // create an event listener that operates on request objects
 | 
			
		||||
    $client->getEventDispatcher()->addListener('command.after_prepare', function (Event $event) {
 | 
			
		||||
        $command = $event['command'];
 | 
			
		||||
        $request = $command->getRequest();
 | 
			
		||||
 | 
			
		||||
        // do something with request
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
    use Guzzle\Common\Event;
 | 
			
		||||
    use Guzzle\Common\Client;
 | 
			
		||||
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 | 
			
		||||
 | 
			
		||||
    class EventSubscriber implements EventSubscriberInterface
 | 
			
		||||
    {
 | 
			
		||||
        public static function getSubscribedEvents()
 | 
			
		||||
        {
 | 
			
		||||
            return array(
 | 
			
		||||
                'client.command.create' => 'onCommandCreate',
 | 
			
		||||
                'command.parse_response' => 'onParseResponse'
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public function onCommandCreate(Event $event)
 | 
			
		||||
        {
 | 
			
		||||
            $client = $event['client'];
 | 
			
		||||
            $command = $event['command'];
 | 
			
		||||
            // operate on client and command
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public function onParseResponse(Event $event)
 | 
			
		||||
        {
 | 
			
		||||
            $command = $event['command'];
 | 
			
		||||
            // operate on the command
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $client = new Client();
 | 
			
		||||
 | 
			
		||||
    $client->addSubscriber(new EventSubscriber());
 | 
			
		||||
							
								
								
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phar-stub.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phar-stub.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
Phar::mapPhar('guzzle.phar');
 | 
			
		||||
 | 
			
		||||
require_once 'phar://guzzle.phar/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php';
 | 
			
		||||
 | 
			
		||||
$classLoader = new Symfony\Component\ClassLoader\UniversalClassLoader();
 | 
			
		||||
$classLoader->registerNamespaces(array(
 | 
			
		||||
    'Guzzle' => 'phar://guzzle.phar/src',
 | 
			
		||||
    'Symfony\\Component\\EventDispatcher' => 'phar://guzzle.phar/vendor/symfony/event-dispatcher',
 | 
			
		||||
    'Doctrine' => 'phar://guzzle.phar/vendor/doctrine/common/lib',
 | 
			
		||||
    'Monolog' => 'phar://guzzle.phar/vendor/monolog/monolog/src'
 | 
			
		||||
));
 | 
			
		||||
$classLoader->register();
 | 
			
		||||
 | 
			
		||||
__HALT_COMPILER();
 | 
			
		||||
							
								
								
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/build.properties.dist
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/build.properties.dist
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
# you may need to update this if you're working on a fork.
 | 
			
		||||
guzzle.remote=git@github.com:guzzle/guzzle.git
 | 
			
		||||
 | 
			
		||||
# github credentials -- only used by GitHub API calls to create subtree repos
 | 
			
		||||
github.basicauth=username:password
 | 
			
		||||
# for the subtree split and testing
 | 
			
		||||
github.org=guzzle
 | 
			
		||||
 | 
			
		||||
# your git path
 | 
			
		||||
cmd.git=git
 | 
			
		||||
 | 
			
		||||
# your composer command
 | 
			
		||||
cmd.composer=composer
 | 
			
		||||
 | 
			
		||||
# test server start
 | 
			
		||||
cmd.testserver=node
 | 
			
		||||
							
								
								
									
										33
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/dependencies.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/dependencies.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project basedir="../../" default="install-dependencies">
 | 
			
		||||
 | 
			
		||||
    <property name="cmd.composer" value="" />
 | 
			
		||||
    <property name="cmd.git" value="" />
 | 
			
		||||
    <property name="cmd.testserver" value="" />
 | 
			
		||||
 | 
			
		||||
    <!--
 | 
			
		||||
    Our custom tasks
 | 
			
		||||
    -->
 | 
			
		||||
    <taskdef name="composerlint" classname="phing.tasks.ComposerLintTask" />
 | 
			
		||||
    <taskdef name="guzzlesubsplit" classname="phing.tasks.GuzzleSubSplitTask" />
 | 
			
		||||
    <taskdef name="guzzlepear" classname="phing.tasks.GuzzlePearPharPackageTask" />
 | 
			
		||||
 | 
			
		||||
    <target name="find-git">
 | 
			
		||||
        <if>
 | 
			
		||||
            <contains string="${cmd.git}" substring="git" />
 | 
			
		||||
            <then>
 | 
			
		||||
                <echo>using git at ${cmd.git}</echo>
 | 
			
		||||
            </then>
 | 
			
		||||
        <else>
 | 
			
		||||
            <exec command="which git" outputProperty="cmd.git" />
 | 
			
		||||
            <echo>found git at ${cmd.git}</echo>
 | 
			
		||||
        </else>
 | 
			
		||||
        </if>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="clean-dependencies">
 | 
			
		||||
        <delete dir="${project.basedir}/vendor"/>
 | 
			
		||||
        <delete file="${project.basedir}/composer.lock" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										142
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/deploy.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/deploy.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project basedir="../../" default="deploy">
 | 
			
		||||
 | 
			
		||||
    <property name="git.status" value=""/>
 | 
			
		||||
    <property name="git.currentbranch" value=""/>
 | 
			
		||||
    <target name="check-git-branch-status">
 | 
			
		||||
        <exec command="git status -s -b" outputProperty="git.currentbranch" />
 | 
			
		||||
        <echo msg="${git.currentbranch}"/>
 | 
			
		||||
        <if>
 | 
			
		||||
            <contains string="${git.currentbranch}" substring="${head}"/>
 | 
			
		||||
            <then>
 | 
			
		||||
                <echo>On branch ${head}</echo>
 | 
			
		||||
            </then>
 | 
			
		||||
            <else>
 | 
			
		||||
                <fail message="-Dhead=${head} arg did not match ${git.currentbranch}"/>
 | 
			
		||||
            </else>
 | 
			
		||||
        </if>
 | 
			
		||||
        <exec command="git status -s" outputProperty="git.status" />
 | 
			
		||||
        <if>
 | 
			
		||||
            <equals arg1="${git.status}" arg2="" trim="true"/>
 | 
			
		||||
            <then>
 | 
			
		||||
                <echo>working directory clean</echo>
 | 
			
		||||
            </then>
 | 
			
		||||
            <else>
 | 
			
		||||
                <echo>${git.status}</echo>
 | 
			
		||||
                <fail message="Working directory isn't clean." />
 | 
			
		||||
            </else>
 | 
			
		||||
        </if>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <property name="version.changelog" value=""/>
 | 
			
		||||
    <property name="version.version" value=""/>
 | 
			
		||||
    <target name="check-changelog-version">
 | 
			
		||||
        <exec executable="fgrep" outputProperty="version.changelog">
 | 
			
		||||
            <arg value="${new.version} ("/>
 | 
			
		||||
            <arg value="${project.basedir}/CHANGELOG.md"/>
 | 
			
		||||
        </exec>
 | 
			
		||||
        <if>
 | 
			
		||||
            <equals arg1="${version.changelog}" arg2="" trim="true"/>
 | 
			
		||||
            <then>
 | 
			
		||||
                <fail message="${new.version} not mentioned in CHANGELOG"/>
 | 
			
		||||
            </then>
 | 
			
		||||
        </if>
 | 
			
		||||
 | 
			
		||||
        <exec executable="fgrep" outputProperty="version.version">
 | 
			
		||||
            <arg value="const VERSION = '${new.version}'"/>
 | 
			
		||||
            <arg value="${project.basedir}/src/Guzzle/Common/Version.php"/>
 | 
			
		||||
        </exec>
 | 
			
		||||
        <if>
 | 
			
		||||
            <equals arg1="${version.version}" arg2="" trim="true"/>
 | 
			
		||||
            <then>
 | 
			
		||||
                <fail message="${new.version} not mentioned in Guzzle\Common\Version"/>
 | 
			
		||||
            </then>
 | 
			
		||||
        </if>
 | 
			
		||||
 | 
			
		||||
        <echo>ChangeLog Match: ${version.changelog}</echo>
 | 
			
		||||
        <echo>Guzzle\Common\Version Match: ${version.version}</echo>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="help" description="HELP AND REMINDERS about what you can do with this project">
 | 
			
		||||
        <echo>releasing: phing -Dnew.version=3.0.x -Dhead=master release</echo>
 | 
			
		||||
        <echo>--</echo>
 | 
			
		||||
        <exec command="phing -l" passthru="true"/>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="release" depends="check-changelog-version,check-git-branch-status"
 | 
			
		||||
            description="tag, subtree split, package, deploy: Use: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release">
 | 
			
		||||
        <if>
 | 
			
		||||
            <isset property="new.version" />
 | 
			
		||||
            <then>
 | 
			
		||||
                <if>
 | 
			
		||||
                    <contains string="${new.version}" substring="v" casesensitive="false" />
 | 
			
		||||
                    <then>
 | 
			
		||||
                        <fail message="Please specify version as [0-9].[0-9].[0-9]. (I'll add v for you.)"/>
 | 
			
		||||
                    </then>
 | 
			
		||||
                    <else>
 | 
			
		||||
 | 
			
		||||
                        <echo>BEGINNING RELEASE FOR ${new.version}</echo>
 | 
			
		||||
 | 
			
		||||
                        <!-- checkout the specified branch -->
 | 
			
		||||
                        <!-- <gitcheckout repository="${repo.dir}" branchname="${head}" gitPath="${cmd.git}" /> -->
 | 
			
		||||
                        <!-- Ensure that the tag exists -->
 | 
			
		||||
                        <!-- push the tag up so subsplit will get it -->
 | 
			
		||||
                        <!--gitpush repository="${repo.dir}" tags="true" gitPath="${cmd.git}" /-->
 | 
			
		||||
 | 
			
		||||
                        <!-- now do the subsplits -->
 | 
			
		||||
                        <guzzlesubsplit
 | 
			
		||||
                                repository="${repo.dir}"
 | 
			
		||||
                                remote="${guzzle.remote}"
 | 
			
		||||
                                heads="${head}"
 | 
			
		||||
                                tags="v${new.version}"
 | 
			
		||||
                                base="src"
 | 
			
		||||
                                subIndicatorFile="composer.json"
 | 
			
		||||
                                gitPath="${cmd.git}" />
 | 
			
		||||
 | 
			
		||||
                        <!-- Copy .md files into the PEAR package -->
 | 
			
		||||
                        <copy file="${repo.dir}/LICENSE" tofile=".subsplit/src/Guzzle/LICENSE.md" />
 | 
			
		||||
                        <copy file="${repo.dir}/README.md" tofile=".subsplit/src/Guzzle/README.md" />
 | 
			
		||||
                        <copy file="${repo.dir}/CHANGELOG.md" tofile=".subsplit/src/Guzzle/CHANGELOG.md" />
 | 
			
		||||
 | 
			
		||||
                        <!-- and now the pear packages -->
 | 
			
		||||
                        <guzzlepear
 | 
			
		||||
                                version="${new.version}"
 | 
			
		||||
                                makephar="true"
 | 
			
		||||
                                />
 | 
			
		||||
                    </else>
 | 
			
		||||
 | 
			
		||||
                </if>
 | 
			
		||||
            </then>
 | 
			
		||||
 | 
			
		||||
            <else>
 | 
			
		||||
                <echo>Tip: to create a new release, do: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release</echo>
 | 
			
		||||
            </else>
 | 
			
		||||
 | 
			
		||||
        </if>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="pear-channel">
 | 
			
		||||
        <guzzlepear version="${new.version}" deploy="true" makephar="true" />
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
    <target name="package-phar" description="Create a phar with an autoloader">
 | 
			
		||||
        <pharpackage
 | 
			
		||||
                destfile="${dir.output}/guzzle.phar"
 | 
			
		||||
                basedir="${project.basedir}/.subsplit"
 | 
			
		||||
                stub="phar-stub.php"
 | 
			
		||||
                signature="md5">
 | 
			
		||||
            <fileset dir="${project.basedir}/.subsplit">
 | 
			
		||||
                <include name="src/**/*.php" />
 | 
			
		||||
                <include name="src/**/*.pem" />
 | 
			
		||||
                <include name="vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php" />
 | 
			
		||||
                <include name="vendor/symfony/event-dispatcher/**/*.php" />
 | 
			
		||||
                <include name="vendor/doctrine/common/lib/Doctrine/Common/Cache/*.php" />
 | 
			
		||||
                <include name="vendor/monolog/monolog/src/**/*.php" />
 | 
			
		||||
            </fileset>
 | 
			
		||||
            <metadata>
 | 
			
		||||
                <element name="author" value="Michael Dowling" />
 | 
			
		||||
            </metadata>
 | 
			
		||||
        </pharpackage>
 | 
			
		||||
    </target>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										152
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/ComposerLintTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/ComposerLintTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Phing task for composer validation.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright 2012 Clay Loveless <clay@php.net>
 | 
			
		||||
 * @license   http://claylo.mit-license.org/2012/ MIT License
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
require_once 'phing/Task.php';
 | 
			
		||||
 | 
			
		||||
class ComposerLintTask extends Task
 | 
			
		||||
{
 | 
			
		||||
    protected $dir = null;
 | 
			
		||||
    protected $file = null;
 | 
			
		||||
    protected $passthru = false;
 | 
			
		||||
    protected $composer = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The setter for the dir
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $str Directory to crawl recursively for composer files
 | 
			
		||||
     */
 | 
			
		||||
    public function setDir($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->dir = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The setter for the file
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $str Individual file to validate
 | 
			
		||||
     */
 | 
			
		||||
    public function setFile($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->file = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether to use PHP's passthru() function instead of exec()
 | 
			
		||||
     *
 | 
			
		||||
     * @param boolean $passthru If passthru shall be used
 | 
			
		||||
     */
 | 
			
		||||
    public function setPassthru($passthru)
 | 
			
		||||
    {
 | 
			
		||||
        $this->passthru = (bool) $passthru;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Composer to execute. If unset, will attempt composer.phar in project
 | 
			
		||||
     * basedir, and if that fails, will attempt global composer
 | 
			
		||||
     * installation.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $str Individual file to validate
 | 
			
		||||
     */
 | 
			
		||||
    public function setComposer($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->file = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The init method: do init steps
 | 
			
		||||
     */
 | 
			
		||||
    public function init()
 | 
			
		||||
    {
 | 
			
		||||
        // nothing needed here
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The main entry point
 | 
			
		||||
     */
 | 
			
		||||
    public function main()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->composer === null) {
 | 
			
		||||
            $this->findComposer();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $files = array();
 | 
			
		||||
        if (!empty($this->file) && file_exists($this->file)) {
 | 
			
		||||
            $files[] = $this->file;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!empty($this->dir)) {
 | 
			
		||||
            $found = $this->findFiles();
 | 
			
		||||
            foreach ($found as $file) {
 | 
			
		||||
                $files[] = $this->dir . DIRECTORY_SEPARATOR . $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach ($files as $file) {
 | 
			
		||||
 | 
			
		||||
            $cmd = $this->composer . ' validate ' . $file;
 | 
			
		||||
            $cmd = escapeshellcmd($cmd);
 | 
			
		||||
 | 
			
		||||
            if ($this->passthru) {
 | 
			
		||||
                $retval = null;
 | 
			
		||||
                passthru($cmd, $retval);
 | 
			
		||||
                if ($retval == 1) {
 | 
			
		||||
                    throw new BuildException('invalid composer.json');
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                $out = array();
 | 
			
		||||
                $retval = null;
 | 
			
		||||
                exec($cmd, $out, $retval);
 | 
			
		||||
                if ($retval == 1) {
 | 
			
		||||
                    $err = join("\n", $out);
 | 
			
		||||
                    throw new BuildException($err);
 | 
			
		||||
                } else {
 | 
			
		||||
                    $this->log($out[0]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Find the composer.json files using Phing's directory scanner
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function findFiles()
 | 
			
		||||
    {
 | 
			
		||||
        $ds = new DirectoryScanner();
 | 
			
		||||
        $ds->setBasedir($this->dir);
 | 
			
		||||
        $ds->setIncludes(array('**/composer.json'));
 | 
			
		||||
        $ds->scan();
 | 
			
		||||
        return $ds->getIncludedFiles();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Find composer installation
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    protected function findComposer()
 | 
			
		||||
    {
 | 
			
		||||
        $basedir = $this->project->getBasedir();
 | 
			
		||||
        $php = $this->project->getProperty('php.interpreter');
 | 
			
		||||
 | 
			
		||||
        if (file_exists($basedir . '/composer.phar')) {
 | 
			
		||||
            $this->composer = "$php $basedir/composer.phar";
 | 
			
		||||
        } else {
 | 
			
		||||
            $out = array();
 | 
			
		||||
            exec('which composer', $out);
 | 
			
		||||
            if (empty($out)) {
 | 
			
		||||
                throw new BuildException(
 | 
			
		||||
                    'Could not determine composer location.'
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
            $this->composer = $out[0];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										338
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzlePearPharPackageTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										338
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzlePearPharPackageTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,338 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of Guzzle's build process.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright 2012 Clay Loveless <clay@php.net>
 | 
			
		||||
 * @license   http://claylo.mit-license.org/2012/ MIT License
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
require_once 'phing/Task.php';
 | 
			
		||||
require_once 'PEAR/PackageFileManager2.php';
 | 
			
		||||
require_once 'PEAR/PackageFileManager/File.php';
 | 
			
		||||
require_once 'PEAR/Packager.php';
 | 
			
		||||
 | 
			
		||||
class GuzzlePearPharPackageTask extends Task
 | 
			
		||||
{
 | 
			
		||||
    private $version;
 | 
			
		||||
    private $deploy = true;
 | 
			
		||||
    private $makephar = true;
 | 
			
		||||
 | 
			
		||||
    private $subpackages = array();
 | 
			
		||||
 | 
			
		||||
    public function setVersion($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->version = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getVersion()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setDeploy($deploy)
 | 
			
		||||
    {
 | 
			
		||||
        $this->deploy = (bool) $deploy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDeploy()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->deploy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setMakephar($makephar)
 | 
			
		||||
    {
 | 
			
		||||
        $this->makephar = (bool) $makephar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getMakephar()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->makephar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private $basedir;
 | 
			
		||||
    private $guzzleinfo;
 | 
			
		||||
    private $changelog_release_date;
 | 
			
		||||
    private $changelog_notes = '-';
 | 
			
		||||
 | 
			
		||||
    public function main()
 | 
			
		||||
    {
 | 
			
		||||
        $this->basedir = $this->getProject()->getBasedir();
 | 
			
		||||
 | 
			
		||||
        if (!is_dir((string) $this->basedir.'/.subsplit')) {
 | 
			
		||||
            throw new BuildException('PEAR packaging requires .subsplit directory');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // main composer file
 | 
			
		||||
        $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/composer.json');
 | 
			
		||||
        $this->guzzleinfo = json_decode($composer_file, true);
 | 
			
		||||
 | 
			
		||||
        // make sure we have a target
 | 
			
		||||
        $pearwork = (string) $this->basedir . '/build/pearwork';
 | 
			
		||||
        if (!is_dir($pearwork)) {
 | 
			
		||||
            mkdir($pearwork, 0777, true);
 | 
			
		||||
        }
 | 
			
		||||
        $pearlogs = (string) $this->basedir . '/build/artifacts/logs';
 | 
			
		||||
        if (!is_dir($pearlogs)) {
 | 
			
		||||
            mkdir($pearlogs, 0777, true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $version = $this->getVersion();
 | 
			
		||||
        $this->grabChangelog();
 | 
			
		||||
        if ($version[0] == '2') {
 | 
			
		||||
            $this->log('building single PEAR package');
 | 
			
		||||
            $this->buildSinglePackage();
 | 
			
		||||
        } else {
 | 
			
		||||
            // $this->log("building PEAR subpackages");
 | 
			
		||||
            // $this->createSubPackages();
 | 
			
		||||
            // $this->log("building PEAR bundle package");
 | 
			
		||||
            $this->buildSinglePackage();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->getMakephar()) {
 | 
			
		||||
            $this->log("building PHAR");
 | 
			
		||||
            $this->getProject()->executeTarget('package-phar');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->getDeploy()) {
 | 
			
		||||
            $this->doDeployment();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function doDeployment()
 | 
			
		||||
    {
 | 
			
		||||
        $basedir = (string) $this->basedir;
 | 
			
		||||
        $this->log('beginning PEAR/PHAR deployment');
 | 
			
		||||
 | 
			
		||||
        chdir($basedir . '/build/pearwork');
 | 
			
		||||
        if (!is_dir('./channel')) {
 | 
			
		||||
            mkdir('./channel');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Pull the PEAR channel down locally
 | 
			
		||||
        passthru('aws s3 sync s3://pear.guzzlephp.org ./channel');
 | 
			
		||||
 | 
			
		||||
        // add PEAR packages
 | 
			
		||||
        foreach (scandir('./') as $file) {
 | 
			
		||||
            if (substr($file, -4) == '.tgz') {
 | 
			
		||||
                passthru('pirum add ./channel ' . $file);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // if we have a new phar, add it
 | 
			
		||||
        if ($this->getMakephar() && file_exists($basedir . '/build/artifacts/guzzle.phar')) {
 | 
			
		||||
            rename($basedir . '/build/artifacts/guzzle.phar', './channel/guzzle.phar');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Sync up with the S3 bucket
 | 
			
		||||
        chdir($basedir . '/build/pearwork/channel');
 | 
			
		||||
        passthru('aws s3 sync . s3://pear.guzzlephp.org');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildSinglePackage()
 | 
			
		||||
    {
 | 
			
		||||
        $v = $this->getVersion();
 | 
			
		||||
        $apiversion = $v[0] . '.0.0';
 | 
			
		||||
 | 
			
		||||
        $opts = array(
 | 
			
		||||
            'packagedirectory' => (string) $this->basedir . '/.subsplit/src/',
 | 
			
		||||
            'filelistgenerator' => 'file',
 | 
			
		||||
            'ignore' => array('*composer.json'),
 | 
			
		||||
            'baseinstalldir' => '/',
 | 
			
		||||
            'packagefile' => 'package.xml'
 | 
			
		||||
            //'outputdirectory' => (string) $this->basedir . '/build/pearwork/'
 | 
			
		||||
        );
 | 
			
		||||
        $pfm = new PEAR_PackageFileManager2();
 | 
			
		||||
        $pfm->setOptions($opts);
 | 
			
		||||
        $pfm->addRole('md', 'doc');
 | 
			
		||||
        $pfm->addRole('pem', 'php');
 | 
			
		||||
        $pfm->setPackage('Guzzle');
 | 
			
		||||
        $pfm->setSummary("Object-oriented PHP HTTP Client for PHP 5.3+");
 | 
			
		||||
        $pfm->setDescription($this->guzzleinfo['description']);
 | 
			
		||||
        $pfm->setPackageType('php');
 | 
			
		||||
        $pfm->setChannel('guzzlephp.org/pear');
 | 
			
		||||
        $pfm->setAPIVersion($apiversion);
 | 
			
		||||
        $pfm->setReleaseVersion($this->getVersion());
 | 
			
		||||
        $pfm->setAPIStability('stable');
 | 
			
		||||
        $pfm->setReleaseStability('stable');
 | 
			
		||||
        $pfm->setNotes($this->changelog_notes);
 | 
			
		||||
        $pfm->setPackageType('php');
 | 
			
		||||
        $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE');
 | 
			
		||||
        $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes');
 | 
			
		||||
        $pfm->setDate($this->changelog_release_date);
 | 
			
		||||
        $pfm->generateContents();
 | 
			
		||||
 | 
			
		||||
        $phpdep = $this->guzzleinfo['require']['php'];
 | 
			
		||||
        $phpdep = str_replace('>=', '', $phpdep);
 | 
			
		||||
        $pfm->setPhpDep($phpdep);
 | 
			
		||||
        $pfm->addExtensionDep('required', 'curl');
 | 
			
		||||
        $pfm->setPearinstallerDep('1.4.6');
 | 
			
		||||
        $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0');
 | 
			
		||||
        if (!empty($this->subpackages)) {
 | 
			
		||||
            foreach ($this->subpackages as $package) {
 | 
			
		||||
                $pkg = dirname($package);
 | 
			
		||||
                $pkg = str_replace('/', '_', $pkg);
 | 
			
		||||
                $pfm->addConflictingPackageDepWithChannel($pkg, 'guzzlephp.org/pear', false, $apiversion);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ob_start();
 | 
			
		||||
        $startdir = getcwd();
 | 
			
		||||
        chdir((string) $this->basedir . '/build/pearwork');
 | 
			
		||||
 | 
			
		||||
        echo "DEBUGGING GENERATED PACKAGE FILE\n";
 | 
			
		||||
        $result = $pfm->debugPackageFile();
 | 
			
		||||
        if ($result) {
 | 
			
		||||
            $out = $pfm->writePackageFile();
 | 
			
		||||
            echo "\n\n\nWRITE PACKAGE FILE RESULT:\n";
 | 
			
		||||
            var_dump($out);
 | 
			
		||||
            // load up package file and build package
 | 
			
		||||
            $packager = new PEAR_Packager();
 | 
			
		||||
            echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n";
 | 
			
		||||
            $dest_package = $packager->package($opts['packagedirectory'].'package.xml');
 | 
			
		||||
            var_dump($dest_package);
 | 
			
		||||
        } else {
 | 
			
		||||
            echo "\n\n\nDEBUGGING RESULT:\n";
 | 
			
		||||
            var_dump($result);
 | 
			
		||||
        }
 | 
			
		||||
        echo "removing package.xml";
 | 
			
		||||
        unlink($opts['packagedirectory'].'package.xml');
 | 
			
		||||
        $log = ob_get_clean();
 | 
			
		||||
        file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package.log', $log);
 | 
			
		||||
        chdir($startdir);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createSubPackages()
 | 
			
		||||
    {
 | 
			
		||||
        $this->findComponents();
 | 
			
		||||
 | 
			
		||||
        foreach ($this->subpackages as $package) {
 | 
			
		||||
            $baseinstalldir = dirname($package);
 | 
			
		||||
            $dir = (string) $this->basedir.'/.subsplit/src/' . $baseinstalldir;
 | 
			
		||||
            $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/src/'. $package);
 | 
			
		||||
            $package_info = json_decode($composer_file, true);
 | 
			
		||||
            $this->log('building ' . $package_info['target-dir'] . ' subpackage');
 | 
			
		||||
            $this->buildSubPackage($dir, $baseinstalldir, $package_info);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildSubPackage($dir, $baseinstalldir, $info)
 | 
			
		||||
    {
 | 
			
		||||
        $package = str_replace('/', '_', $baseinstalldir);
 | 
			
		||||
        $opts = array(
 | 
			
		||||
            'packagedirectory' => $dir,
 | 
			
		||||
            'filelistgenerator' => 'file',
 | 
			
		||||
            'ignore' => array('*composer.json', '*package.xml'),
 | 
			
		||||
            'baseinstalldir' => '/' . $info['target-dir'],
 | 
			
		||||
            'packagefile' => 'package.xml'
 | 
			
		||||
        );
 | 
			
		||||
        $pfm = new PEAR_PackageFileManager2();
 | 
			
		||||
        $pfm->setOptions($opts);
 | 
			
		||||
        $pfm->setPackage($package);
 | 
			
		||||
        $pfm->setSummary($info['description']);
 | 
			
		||||
        $pfm->setDescription($info['description']);
 | 
			
		||||
        $pfm->setPackageType('php');
 | 
			
		||||
        $pfm->setChannel('guzzlephp.org/pear');
 | 
			
		||||
        $pfm->setAPIVersion('3.0.0');
 | 
			
		||||
        $pfm->setReleaseVersion($this->getVersion());
 | 
			
		||||
        $pfm->setAPIStability('stable');
 | 
			
		||||
        $pfm->setReleaseStability('stable');
 | 
			
		||||
        $pfm->setNotes($this->changelog_notes);
 | 
			
		||||
        $pfm->setPackageType('php');
 | 
			
		||||
        $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE');
 | 
			
		||||
        $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes');
 | 
			
		||||
        $pfm->setDate($this->changelog_release_date);
 | 
			
		||||
        $pfm->generateContents();
 | 
			
		||||
 | 
			
		||||
        $phpdep = $this->guzzleinfo['require']['php'];
 | 
			
		||||
        $phpdep = str_replace('>=', '', $phpdep);
 | 
			
		||||
        $pfm->setPhpDep($phpdep);
 | 
			
		||||
        $pfm->setPearinstallerDep('1.4.6');
 | 
			
		||||
 | 
			
		||||
        foreach ($info['require'] as $type => $version) {
 | 
			
		||||
            if ($type == 'php') {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if ($type == 'symfony/event-dispatcher') {
 | 
			
		||||
                $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0');
 | 
			
		||||
            }
 | 
			
		||||
            if ($type == 'ext-curl') {
 | 
			
		||||
                $pfm->addExtensionDep('required', 'curl');
 | 
			
		||||
            }
 | 
			
		||||
            if (substr($type, 0, 6) == 'guzzle') {
 | 
			
		||||
                $gdep = str_replace('/', ' ', $type);
 | 
			
		||||
                $gdep = ucwords($gdep);
 | 
			
		||||
                $gdep = str_replace(' ', '_', $gdep);
 | 
			
		||||
                $pfm->addPackageDepWithChannel('required', $gdep, 'guzzlephp.org/pear', $this->getVersion());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // can't have main Guzzle package AND sub-packages
 | 
			
		||||
        $pfm->addConflictingPackageDepWithChannel('Guzzle', 'guzzlephp.org/pear', false, $apiversion);
 | 
			
		||||
 | 
			
		||||
        ob_start();
 | 
			
		||||
        $startdir = getcwd();
 | 
			
		||||
        chdir((string) $this->basedir . '/build/pearwork');
 | 
			
		||||
 | 
			
		||||
        echo "DEBUGGING GENERATED PACKAGE FILE\n";
 | 
			
		||||
        $result = $pfm->debugPackageFile();
 | 
			
		||||
        if ($result) {
 | 
			
		||||
            $out = $pfm->writePackageFile();
 | 
			
		||||
            echo "\n\n\nWRITE PACKAGE FILE RESULT:\n";
 | 
			
		||||
            var_dump($out);
 | 
			
		||||
            // load up package file and build package
 | 
			
		||||
            $packager = new PEAR_Packager();
 | 
			
		||||
            echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n";
 | 
			
		||||
            $dest_package = $packager->package($opts['packagedirectory'].'/package.xml');
 | 
			
		||||
            var_dump($dest_package);
 | 
			
		||||
        } else {
 | 
			
		||||
            echo "\n\n\nDEBUGGING RESULT:\n";
 | 
			
		||||
            var_dump($result);
 | 
			
		||||
        }
 | 
			
		||||
        echo "removing package.xml";
 | 
			
		||||
        unlink($opts['packagedirectory'].'/package.xml');
 | 
			
		||||
        $log = ob_get_clean();
 | 
			
		||||
        file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package_'.$package.'.log', $log);
 | 
			
		||||
        chdir($startdir);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function findComponents()
 | 
			
		||||
    {
 | 
			
		||||
        $ds = new DirectoryScanner();
 | 
			
		||||
        $ds->setBasedir((string) $this->basedir.'/.subsplit/src');
 | 
			
		||||
        $ds->setIncludes(array('**/composer.json'));
 | 
			
		||||
        $ds->scan();
 | 
			
		||||
        $files = $ds->getIncludedFiles();
 | 
			
		||||
        $this->subpackages = $files;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function grabChangelog()
 | 
			
		||||
    {
 | 
			
		||||
        $cl = file((string) $this->basedir.'/.subsplit/CHANGELOG.md');
 | 
			
		||||
        $notes = '';
 | 
			
		||||
        $in_version = false;
 | 
			
		||||
        $release_date = null;
 | 
			
		||||
 | 
			
		||||
        foreach ($cl as $line) {
 | 
			
		||||
            $line = trim($line);
 | 
			
		||||
            if (preg_match('/^\* '.$this->getVersion().' \(([0-9\-]+)\)$/', $line, $matches)) {
 | 
			
		||||
                $release_date = $matches[1];
 | 
			
		||||
                $in_version = true;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if ($in_version && empty($line) && empty($notes)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if ($in_version && ! empty($line)) {
 | 
			
		||||
                $notes .= $line."\n";
 | 
			
		||||
            }
 | 
			
		||||
            if ($in_version && empty($line) && !empty($notes)) {
 | 
			
		||||
                $in_version = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $this->changelog_release_date = $release_date;
 | 
			
		||||
 | 
			
		||||
        if (! empty($notes)) {
 | 
			
		||||
            $this->changelog_notes = $notes;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										385
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzleSubSplitTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzleSubSplitTask.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,385 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Phing wrapper around git subsplit.
 | 
			
		||||
 *
 | 
			
		||||
 * @see https://github.com/dflydev/git-subsplit
 | 
			
		||||
 * @copyright 2012 Clay Loveless <clay@php.net>
 | 
			
		||||
 * @license   http://claylo.mit-license.org/2012/ MIT License
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
require_once 'phing/tasks/ext/git/GitBaseTask.php';
 | 
			
		||||
 | 
			
		||||
// base - base of tree to split out
 | 
			
		||||
// subIndicatorFile - composer.json, package.xml?
 | 
			
		||||
class GuzzleSubSplitTask extends GitBaseTask
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * What git repository to pull from and publish to
 | 
			
		||||
     */
 | 
			
		||||
    protected $remote = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Publish for comma-separated heads instead of all heads
 | 
			
		||||
     */
 | 
			
		||||
    protected $heads = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Publish for comma-separated tags instead of all tags
 | 
			
		||||
     */
 | 
			
		||||
    protected $tags = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Base of the tree RELATIVE TO .subsplit working dir
 | 
			
		||||
     */
 | 
			
		||||
    protected $base = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The presence of this file will indicate that the directory it resides
 | 
			
		||||
     * in is at the top level of a split.
 | 
			
		||||
     */
 | 
			
		||||
    protected $subIndicatorFile = 'composer.json';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Do everything except actually send the update.
 | 
			
		||||
     */
 | 
			
		||||
    protected $dryRun = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Do not sync any heads.
 | 
			
		||||
     */
 | 
			
		||||
    protected $noHeads = false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Do not sync any tags.
 | 
			
		||||
     */
 | 
			
		||||
    protected $noTags = false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The splits we found in the heads
 | 
			
		||||
     */
 | 
			
		||||
    protected $splits;
 | 
			
		||||
 | 
			
		||||
    public function setRemote($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->remote = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getRemote()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->remote;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setHeads($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->heads = explode(',', $str);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getHeads()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->heads;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setTags($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->tags = explode(',', $str);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTags()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->tags;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setBase($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->base = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getBase()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->base;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setSubIndicatorFile($str)
 | 
			
		||||
    {
 | 
			
		||||
        $this->subIndicatorFile = $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getSubIndicatorFile()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->subIndicatorFile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setDryRun($bool)
 | 
			
		||||
    {
 | 
			
		||||
        $this->dryRun = (bool) $bool;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDryRun()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->dryRun;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setNoHeads($bool)
 | 
			
		||||
    {
 | 
			
		||||
        $this->noHeads = (bool) $bool;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNoHeads()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->noHeads;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setNoTags($bool)
 | 
			
		||||
    {
 | 
			
		||||
        $this->noTags = (bool) $bool;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNoTags()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->noTags;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * GitClient from VersionControl_Git
 | 
			
		||||
     */
 | 
			
		||||
    protected $client   = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The main entry point
 | 
			
		||||
     */
 | 
			
		||||
    public function main()
 | 
			
		||||
    {
 | 
			
		||||
        $repo = $this->getRepository();
 | 
			
		||||
        if (empty($repo)) {
 | 
			
		||||
            throw new BuildException('"repository" is a required parameter');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $remote = $this->getRemote();
 | 
			
		||||
        if (empty($remote)) {
 | 
			
		||||
            throw new BuildException('"remote" is a required parameter');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        chdir($repo);
 | 
			
		||||
        $this->client = $this->getGitClient(false, $repo);
 | 
			
		||||
 | 
			
		||||
        // initalized yet?
 | 
			
		||||
        if (!is_dir('.subsplit')) {
 | 
			
		||||
            $this->subsplitInit();
 | 
			
		||||
        } else {
 | 
			
		||||
            // update
 | 
			
		||||
            $this->subsplitUpdate();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // find all splits based on heads requested
 | 
			
		||||
        $this->findSplits();
 | 
			
		||||
 | 
			
		||||
        // check that GitHub has the repos
 | 
			
		||||
        $this->verifyRepos();
 | 
			
		||||
 | 
			
		||||
        // execute the subsplits
 | 
			
		||||
        $this->publish();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function publish()
 | 
			
		||||
    {
 | 
			
		||||
        $this->log('DRY RUN ONLY FOR NOW');
 | 
			
		||||
        $base = $this->getBase();
 | 
			
		||||
        $base = rtrim($base, '/') . '/';
 | 
			
		||||
        $org = $this->getOwningTarget()->getProject()->getProperty('github.org');
 | 
			
		||||
 | 
			
		||||
        $splits = array();
 | 
			
		||||
 | 
			
		||||
        $heads = $this->getHeads();
 | 
			
		||||
        foreach ($heads as $head) {
 | 
			
		||||
            foreach ($this->splits[$head] as $component => $meta) {
 | 
			
		||||
                $splits[] = $base . $component . ':git@github.com:'. $org.'/'.$meta['repo'];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $cmd = 'git subsplit publish ';
 | 
			
		||||
            $cmd .= escapeshellarg(implode(' ', $splits));
 | 
			
		||||
 | 
			
		||||
            if ($this->getNoHeads()) {
 | 
			
		||||
                $cmd .= ' --no-heads';
 | 
			
		||||
            } else {
 | 
			
		||||
                $cmd .= ' --heads='.$head;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($this->getNoTags()) {
 | 
			
		||||
                $cmd .= ' --no-tags';
 | 
			
		||||
            } else {
 | 
			
		||||
                if ($this->getTags()) {
 | 
			
		||||
                    $cmd .= ' --tags=' . escapeshellarg(implode(' ', $this->getTags()));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            passthru($cmd);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs `git subsplit update`
 | 
			
		||||
     */
 | 
			
		||||
    public function subsplitUpdate()
 | 
			
		||||
    {
 | 
			
		||||
        $repo = $this->getRepository();
 | 
			
		||||
        $this->log('git-subsplit update...');
 | 
			
		||||
        $cmd = $this->client->getCommand('subsplit');
 | 
			
		||||
        $cmd->addArgument('update');
 | 
			
		||||
        try {
 | 
			
		||||
            $cmd->execute();
 | 
			
		||||
        } catch (Exception $e) {
 | 
			
		||||
            throw new BuildException('git subsplit update failed'. $e);
 | 
			
		||||
        }
 | 
			
		||||
        chdir($repo . '/.subsplit');
 | 
			
		||||
        passthru('php ../composer.phar update --dev');
 | 
			
		||||
        chdir($repo);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs `git subsplit init` based on the remote repository.
 | 
			
		||||
     */
 | 
			
		||||
    public function subsplitInit()
 | 
			
		||||
    {
 | 
			
		||||
        $remote = $this->getRemote();
 | 
			
		||||
        $cmd = $this->client->getCommand('subsplit');
 | 
			
		||||
        $this->log('running git-subsplit init ' . $remote);
 | 
			
		||||
 | 
			
		||||
        $cmd->setArguments(array(
 | 
			
		||||
            'init',
 | 
			
		||||
            $remote
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            $output = $cmd->execute();
 | 
			
		||||
        } catch (Exception $e) {
 | 
			
		||||
            throw new BuildException('git subsplit init failed'. $e);
 | 
			
		||||
        }
 | 
			
		||||
        $this->log(trim($output), Project::MSG_INFO);
 | 
			
		||||
        $repo = $this->getRepository();
 | 
			
		||||
        chdir($repo . '/.subsplit');
 | 
			
		||||
        passthru('php ../composer.phar install --dev');
 | 
			
		||||
        chdir($repo);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Find the composer.json files using Phing's directory scanner
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function findSplits()
 | 
			
		||||
    {
 | 
			
		||||
        $this->log("checking heads for subsplits");
 | 
			
		||||
        $repo = $this->getRepository();
 | 
			
		||||
        $base = $this->getBase();
 | 
			
		||||
 | 
			
		||||
        $splits = array();
 | 
			
		||||
        $heads = $this->getHeads();
 | 
			
		||||
 | 
			
		||||
        if (!empty($base)) {
 | 
			
		||||
            $base = '/' . ltrim($base, '/');
 | 
			
		||||
        } else {
 | 
			
		||||
            $base = '/';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        chdir($repo . '/.subsplit');
 | 
			
		||||
        foreach ($heads as $head) {
 | 
			
		||||
            $splits[$head] = array();
 | 
			
		||||
 | 
			
		||||
            // check each head requested *BEFORE* the actual subtree split command gets it
 | 
			
		||||
            passthru("git checkout '$head'");
 | 
			
		||||
            $ds = new DirectoryScanner();
 | 
			
		||||
            $ds->setBasedir($repo . '/.subsplit' . $base);
 | 
			
		||||
            $ds->setIncludes(array('**/'.$this->subIndicatorFile));
 | 
			
		||||
            $ds->scan();
 | 
			
		||||
            $files = $ds->getIncludedFiles();
 | 
			
		||||
 | 
			
		||||
            // Process the files we found
 | 
			
		||||
            foreach ($files as $file) {
 | 
			
		||||
                $pkg = file_get_contents($repo . '/.subsplit' . $base .'/'. $file);
 | 
			
		||||
                $pkg_json = json_decode($pkg, true);
 | 
			
		||||
                $name = $pkg_json['name'];
 | 
			
		||||
                $component = str_replace('/composer.json', '', $file);
 | 
			
		||||
                // keep this for split cmd
 | 
			
		||||
                $tmpreponame = explode('/', $name);
 | 
			
		||||
                $reponame = $tmpreponame[1];
 | 
			
		||||
                $splits[$head][$component]['repo'] = $reponame;
 | 
			
		||||
                $nscomponent = str_replace('/', '\\', $component);
 | 
			
		||||
                $splits[$head][$component]['desc'] = "[READ ONLY] Subtree split of $nscomponent: " . $pkg_json['description'];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // go back to how we found it
 | 
			
		||||
        passthru("git checkout master");
 | 
			
		||||
        chdir($repo);
 | 
			
		||||
        $this->splits = $splits;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Based on list of repositories we determined we *should* have, talk
 | 
			
		||||
     * to GitHub and make sure they're all there.
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    protected function verifyRepos()
 | 
			
		||||
    {
 | 
			
		||||
        $this->log('verifying GitHub target repos');
 | 
			
		||||
        $github_org = $this->getOwningTarget()->getProject()->getProperty('github.org');
 | 
			
		||||
        $github_creds = $this->getOwningTarget()->getProject()->getProperty('github.basicauth');
 | 
			
		||||
 | 
			
		||||
        if ($github_creds == 'username:password') {
 | 
			
		||||
            $this->log('Skipping GitHub repo checks. Update github.basicauth in build.properties to verify repos.', 1);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos?type=all');
 | 
			
		||||
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
			
		||||
        curl_setopt($ch, CURLOPT_USERPWD, $github_creds);
 | 
			
		||||
        // change this when we know we can use our bundled CA bundle!
 | 
			
		||||
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 | 
			
		||||
        $result = curl_exec($ch);
 | 
			
		||||
        curl_close($ch);
 | 
			
		||||
        $repos = json_decode($result, true);
 | 
			
		||||
        $existing_repos = array();
 | 
			
		||||
 | 
			
		||||
        // parse out the repos we found on GitHub
 | 
			
		||||
        foreach ($repos as $repo) {
 | 
			
		||||
            $tmpreponame = explode('/', $repo['full_name']);
 | 
			
		||||
            $reponame = $tmpreponame[1];
 | 
			
		||||
            $existing_repos[$reponame] = $repo['description'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $heads = $this->getHeads();
 | 
			
		||||
        foreach ($heads as $head) {
 | 
			
		||||
            foreach ($this->splits[$head] as $component => $meta) {
 | 
			
		||||
 | 
			
		||||
                $reponame = $meta['repo'];
 | 
			
		||||
 | 
			
		||||
                if (!isset($existing_repos[$reponame])) {
 | 
			
		||||
                    $this->log("Creating missing repo $reponame");
 | 
			
		||||
                    $payload = array(
 | 
			
		||||
                        'name' => $reponame,
 | 
			
		||||
                        'description' => $meta['desc'],
 | 
			
		||||
                        'homepage' => 'http://www.guzzlephp.org/',
 | 
			
		||||
                        'private' => true,
 | 
			
		||||
                        'has_issues' => false,
 | 
			
		||||
                        'has_wiki' => false,
 | 
			
		||||
                        'has_downloads' => true,
 | 
			
		||||
                        'auto_init' => false
 | 
			
		||||
                    );
 | 
			
		||||
                    $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos');
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_USERPWD, $github_creds);
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_POST, 1);
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
 | 
			
		||||
                    // change this when we know we can use our bundled CA bundle!
 | 
			
		||||
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 | 
			
		||||
                    $result = curl_exec($ch);
 | 
			
		||||
                    echo "Response code: ".curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n";
 | 
			
		||||
                    curl_close($ch);
 | 
			
		||||
                } else {
 | 
			
		||||
                    $this->log("Repo $reponame exists", 2);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phpunit.xml.dist
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/phpunit.xml.dist
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<phpunit bootstrap="./tests/bootstrap.php"
 | 
			
		||||
         colors="true"
 | 
			
		||||
         processIsolation="false"
 | 
			
		||||
         stopOnFailure="false"
 | 
			
		||||
         syntaxCheck="false"
 | 
			
		||||
         convertErrorsToExceptions="true"
 | 
			
		||||
         convertNoticesToExceptions="true"
 | 
			
		||||
         convertWarningsToExceptions="true"
 | 
			
		||||
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">
 | 
			
		||||
 | 
			
		||||
    <testsuites>
 | 
			
		||||
        <testsuite>
 | 
			
		||||
            <directory>./tests/Guzzle/Tests</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
    </testsuites>
 | 
			
		||||
 | 
			
		||||
    <logging>
 | 
			
		||||
        <log type="junit" target="build/artifacts/logs/junit.xml" logIncompleteSkipped="false" />
 | 
			
		||||
    </logging>
 | 
			
		||||
 | 
			
		||||
    <filter>
 | 
			
		||||
        <whitelist>
 | 
			
		||||
            <directory suffix=".php">./src/Guzzle</directory>
 | 
			
		||||
            <exclude>
 | 
			
		||||
                <directory suffix="Interface.php">./src/Guzzle</directory>
 | 
			
		||||
                <file>./src/Guzzle/Common/Exception/GuzzleException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Http/Exception/HttpException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Http/Exception/ServerErrorResponseException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Http/Exception/ClientErrorResponseException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Http/Exception/TooManyRedirectsException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Http/Exception/CouldNotRewindStreamException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Common/Exception/BadMethodCallException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Common/Exception/InvalidArgumentException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Common/Exception/RuntimeException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Common/Exception/UnexpectedValueException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/ClientNotFoundException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/CommandException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/DescriptionBuilderException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/ServiceBuilderException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/ServiceNotFoundException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/ValidationException.php</file>
 | 
			
		||||
                <file>./src/Guzzle/Service/Exception/JsonException.php</file>
 | 
			
		||||
            </exclude>
 | 
			
		||||
        </whitelist>
 | 
			
		||||
    </filter>
 | 
			
		||||
 | 
			
		||||
</phpunit>
 | 
			
		||||
							
								
								
									
										66
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Abstract decorator used when decorating a BatchInterface
 | 
			
		||||
 */
 | 
			
		||||
abstract class AbstractBatchDecorator implements BatchInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var BatchInterface Decorated batch object */
 | 
			
		||||
    protected $decoratedBatch;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(BatchInterface $decoratedBatch)
 | 
			
		||||
    {
 | 
			
		||||
        $this->decoratedBatch = $decoratedBatch;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Allow decorators to implement custom methods
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $method Missing method name
 | 
			
		||||
     * @param array  $args   Method arguments
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     * @codeCoverageIgnore
 | 
			
		||||
     */
 | 
			
		||||
    public function __call($method, array $args)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func_array(array($this->decoratedBatch, $method), $args);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function add($item)
 | 
			
		||||
    {
 | 
			
		||||
        $this->decoratedBatch->add($item);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function flush()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->decoratedBatch->flush();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isEmpty()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->decoratedBatch->isEmpty();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Trace the decorators associated with the batch
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getDecorators()
 | 
			
		||||
    {
 | 
			
		||||
        $found = array($this);
 | 
			
		||||
        if (method_exists($this->decoratedBatch, 'getDecorators')) {
 | 
			
		||||
            $found = array_merge($found, $this->decoratedBatch->getDecorators());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $found;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										92
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Batch\Exception\BatchTransferException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Default batch implementation used to convert queued items into smaller chunks of batches using a
 | 
			
		||||
 * {@see BatchDivisorIterface} and transfers each batch using a {@see BatchTransferInterface}.
 | 
			
		||||
 *
 | 
			
		||||
 * Any exception encountered during a flush operation will throw a {@see BatchTransferException} object containing the
 | 
			
		||||
 * batch that failed. After an exception is encountered, you can flush the batch again to attempt to finish transferring
 | 
			
		||||
 * any previously created batches or queued items.
 | 
			
		||||
 */
 | 
			
		||||
class Batch implements BatchInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var \SplQueue Queue of items in the queue */
 | 
			
		||||
    protected $queue;
 | 
			
		||||
 | 
			
		||||
    /** @var array Divided batches to be transferred */
 | 
			
		||||
    protected $dividedBatches;
 | 
			
		||||
 | 
			
		||||
    /** @var BatchTransferInterface */
 | 
			
		||||
    protected $transferStrategy;
 | 
			
		||||
 | 
			
		||||
    /** @var BatchDivisorInterface */
 | 
			
		||||
    protected $divisionStrategy;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param BatchTransferInterface $transferStrategy Strategy used to transfer items
 | 
			
		||||
     * @param BatchDivisorInterface  $divisionStrategy Divisor used to create batches
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(BatchTransferInterface $transferStrategy, BatchDivisorInterface $divisionStrategy)
 | 
			
		||||
    {
 | 
			
		||||
        $this->transferStrategy = $transferStrategy;
 | 
			
		||||
        $this->divisionStrategy = $divisionStrategy;
 | 
			
		||||
        $this->queue = new \SplQueue();
 | 
			
		||||
        $this->queue->setIteratorMode(\SplQueue::IT_MODE_DELETE);
 | 
			
		||||
        $this->dividedBatches = array();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function add($item)
 | 
			
		||||
    {
 | 
			
		||||
        $this->queue->enqueue($item);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function flush()
 | 
			
		||||
    {
 | 
			
		||||
        $this->createBatches();
 | 
			
		||||
 | 
			
		||||
        $items = array();
 | 
			
		||||
        foreach ($this->dividedBatches as $batchIndex => $dividedBatch) {
 | 
			
		||||
            while ($dividedBatch->valid()) {
 | 
			
		||||
                $batch = $dividedBatch->current();
 | 
			
		||||
                $dividedBatch->next();
 | 
			
		||||
                try {
 | 
			
		||||
                    $this->transferStrategy->transfer($batch);
 | 
			
		||||
                    $items = array_merge($items, $batch);
 | 
			
		||||
                } catch (\Exception $e) {
 | 
			
		||||
                    throw new BatchTransferException($batch, $items, $e, $this->transferStrategy, $this->divisionStrategy);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Keep the divided batch down to a minimum in case of a later exception
 | 
			
		||||
            unset($this->dividedBatches[$batchIndex]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $items;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isEmpty()
 | 
			
		||||
    {
 | 
			
		||||
        return count($this->queue) == 0 && count($this->dividedBatches) == 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create batches for any queued items
 | 
			
		||||
     */
 | 
			
		||||
    protected function createBatches()
 | 
			
		||||
    {
 | 
			
		||||
        if (count($this->queue)) {
 | 
			
		||||
            if ($batches = $this->divisionStrategy->createBatches($this->queue)) {
 | 
			
		||||
                // Convert arrays into iterators
 | 
			
		||||
                if (is_array($batches)) {
 | 
			
		||||
                    $batches = new \ArrayIterator($batches);
 | 
			
		||||
                }
 | 
			
		||||
                $this->dividedBatches[] = $batches;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										199
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
use Guzzle\Common\Exception\RuntimeException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Builder used to create custom batch objects
 | 
			
		||||
 */
 | 
			
		||||
class BatchBuilder
 | 
			
		||||
{
 | 
			
		||||
    /** @var bool Whether or not the batch should automatically flush*/
 | 
			
		||||
    protected $autoFlush = false;
 | 
			
		||||
 | 
			
		||||
    /** @var bool Whether or not to maintain a batch history */
 | 
			
		||||
    protected $history = false;
 | 
			
		||||
 | 
			
		||||
    /** @var bool Whether or not to buffer exceptions encountered in transfer */
 | 
			
		||||
    protected $exceptionBuffering = false;
 | 
			
		||||
 | 
			
		||||
    /** @var mixed Callable to invoke each time a flush completes */
 | 
			
		||||
    protected $afterFlush;
 | 
			
		||||
 | 
			
		||||
    /** @var BatchTransferInterface Object used to transfer items in the queue */
 | 
			
		||||
    protected $transferStrategy;
 | 
			
		||||
 | 
			
		||||
    /** @var BatchDivisorInterface Object used to divide the queue into batches */
 | 
			
		||||
    protected $divisorStrategy;
 | 
			
		||||
 | 
			
		||||
    /** @var array of Mapped transfer strategies by handle name */
 | 
			
		||||
    protected static $mapping = array(
 | 
			
		||||
        'request' => 'Guzzle\Batch\BatchRequestTransfer',
 | 
			
		||||
        'command' => 'Guzzle\Batch\BatchCommandTransfer'
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new instance of the BatchBuilder
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public static function factory()
 | 
			
		||||
    {
 | 
			
		||||
        return new self();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Automatically flush the batch when the size of the queue reaches a certain threshold. Adds {@see FlushingBatch}.
 | 
			
		||||
     *
 | 
			
		||||
     * @param $threshold Number of items to allow in the queue before a flush
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function autoFlushAt($threshold)
 | 
			
		||||
    {
 | 
			
		||||
        $this->autoFlush = $threshold;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Maintain a history of all items that have been transferred using the batch. Adds {@see HistoryBatch}.
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function keepHistory()
 | 
			
		||||
    {
 | 
			
		||||
        $this->history = true;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Buffer exceptions thrown during transfer so that you can transfer as much as possible, and after a transfer
 | 
			
		||||
     * completes, inspect each exception that was thrown. Enables the {@see ExceptionBufferingBatch} decorator.
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function bufferExceptions()
 | 
			
		||||
    {
 | 
			
		||||
        $this->exceptionBuffering = true;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Notify a callable each time a batch flush completes. Enables the {@see NotifyingBatch} decorator.
 | 
			
		||||
     *
 | 
			
		||||
     * @param mixed $callable Callable function to notify
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     * @throws InvalidArgumentException if the argument is not callable
 | 
			
		||||
     */
 | 
			
		||||
    public function notify($callable)
 | 
			
		||||
    {
 | 
			
		||||
        $this->afterFlush = $callable;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Configures the batch to transfer batches of requests. Associates a {@see \Guzzle\Http\BatchRequestTransfer}
 | 
			
		||||
     * object as both the transfer and divisor strategy.
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $batchSize Batch size for each batch of requests
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function transferRequests($batchSize = 50)
 | 
			
		||||
    {
 | 
			
		||||
        $className = self::$mapping['request'];
 | 
			
		||||
        $this->transferStrategy = new $className($batchSize);
 | 
			
		||||
        $this->divisorStrategy = $this->transferStrategy;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Configures the batch to transfer batches commands. Associates as
 | 
			
		||||
     * {@see \Guzzle\Service\Command\BatchCommandTransfer} as both the transfer and divisor strategy.
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $batchSize Batch size for each batch of commands
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function transferCommands($batchSize = 50)
 | 
			
		||||
    {
 | 
			
		||||
        $className = self::$mapping['command'];
 | 
			
		||||
        $this->transferStrategy = new $className($batchSize);
 | 
			
		||||
        $this->divisorStrategy = $this->transferStrategy;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Specify the strategy used to divide the queue into an array of batches
 | 
			
		||||
     *
 | 
			
		||||
     * @param BatchDivisorInterface $divisorStrategy Strategy used to divide a batch queue into batches
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function createBatchesWith(BatchDivisorInterface $divisorStrategy)
 | 
			
		||||
    {
 | 
			
		||||
        $this->divisorStrategy = $divisorStrategy;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Specify the strategy used to transport the items when flush is called
 | 
			
		||||
     *
 | 
			
		||||
     * @param BatchTransferInterface $transferStrategy How items are transferred
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchBuilder
 | 
			
		||||
     */
 | 
			
		||||
    public function transferWith(BatchTransferInterface $transferStrategy)
 | 
			
		||||
    {
 | 
			
		||||
        $this->transferStrategy = $transferStrategy;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create and return the instantiated batch
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchInterface
 | 
			
		||||
     * @throws RuntimeException if no transfer strategy has been specified
 | 
			
		||||
     */
 | 
			
		||||
    public function build()
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->transferStrategy) {
 | 
			
		||||
            throw new RuntimeException('No transfer strategy has been specified');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!$this->divisorStrategy) {
 | 
			
		||||
            throw new RuntimeException('No divisor strategy has been specified');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $batch = new Batch($this->transferStrategy, $this->divisorStrategy);
 | 
			
		||||
 | 
			
		||||
        if ($this->exceptionBuffering) {
 | 
			
		||||
            $batch = new ExceptionBufferingBatch($batch);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->afterFlush) {
 | 
			
		||||
            $batch = new NotifyingBatch($batch, $this->afterFlush);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->autoFlush) {
 | 
			
		||||
            $batch = new FlushingBatch($batch, $this->autoFlush);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->history) {
 | 
			
		||||
            $batch = new HistoryBatch($batch);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $batch;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Divides batches using a callable
 | 
			
		||||
 */
 | 
			
		||||
class BatchClosureDivisor implements BatchDivisorInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var callable Method used to divide the batches */
 | 
			
		||||
    protected $callable;
 | 
			
		||||
 | 
			
		||||
    /** @var mixed $context Context passed to the callable */
 | 
			
		||||
    protected $context;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param callable $callable Method used to divide the batches. The method must accept an \SplQueue and return an
 | 
			
		||||
     *                           array of arrays containing the divided items.
 | 
			
		||||
     * @param mixed    $context  Optional context to pass to the batch divisor
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidArgumentException if the callable is not callable
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($callable, $context = null)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_callable($callable)) {
 | 
			
		||||
            throw new InvalidArgumentException('Must pass a callable');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->callable = $callable;
 | 
			
		||||
        $this->context = $context;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createBatches(\SplQueue $queue)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func($this->callable, $queue, $this->context);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Batch transfer strategy where transfer logic can be defined via a Closure.
 | 
			
		||||
 * This class is to be used with {@see Guzzle\Batch\BatchInterface}
 | 
			
		||||
 */
 | 
			
		||||
class BatchClosureTransfer implements BatchTransferInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var callable A closure that performs the transfer */
 | 
			
		||||
    protected $callable;
 | 
			
		||||
 | 
			
		||||
    /** @var mixed $context Context passed to the callable */
 | 
			
		||||
    protected $context;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param mixed $callable Callable that performs the transfer. This function should accept two arguments:
 | 
			
		||||
     *                        (array $batch, mixed $context).
 | 
			
		||||
     * @param mixed $context  Optional context to pass to the batch divisor
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($callable, $context = null)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_callable($callable)) {
 | 
			
		||||
            throw new InvalidArgumentException('Argument must be callable');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->callable = $callable;
 | 
			
		||||
        $this->context = $context;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function transfer(array $batch)
 | 
			
		||||
    {
 | 
			
		||||
        return empty($batch) ? null : call_user_func($this->callable, $batch, $this->context);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										75
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Batch\BatchTransferInterface;
 | 
			
		||||
use Guzzle\Batch\BatchDivisorInterface;
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
use Guzzle\Service\Command\CommandInterface;
 | 
			
		||||
use Guzzle\Service\Exception\InconsistentClientTransferException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Efficiently transfers multiple commands in parallel per client
 | 
			
		||||
 * This class is to be used with {@see Guzzle\Batch\BatchInterface}
 | 
			
		||||
 */
 | 
			
		||||
class BatchCommandTransfer implements BatchTransferInterface, BatchDivisorInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var int Size of each command batch */
 | 
			
		||||
    protected $batchSize;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param int $batchSize Size of each batch
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($batchSize = 50)
 | 
			
		||||
    {
 | 
			
		||||
        $this->batchSize = $batchSize;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates batches by grouping commands by their associated client
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     */
 | 
			
		||||
    public function createBatches(\SplQueue $queue)
 | 
			
		||||
    {
 | 
			
		||||
        $groups = new \SplObjectStorage();
 | 
			
		||||
        foreach ($queue as $item) {
 | 
			
		||||
            if (!$item instanceof CommandInterface) {
 | 
			
		||||
                throw new InvalidArgumentException('All items must implement Guzzle\Service\Command\CommandInterface');
 | 
			
		||||
            }
 | 
			
		||||
            $client = $item->getClient();
 | 
			
		||||
            if (!$groups->contains($client)) {
 | 
			
		||||
                $groups->attach($client, new \ArrayObject(array($item)));
 | 
			
		||||
            } else {
 | 
			
		||||
                $groups[$client]->append($item);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $batches = array();
 | 
			
		||||
        foreach ($groups as $batch) {
 | 
			
		||||
            $batches = array_merge($batches, array_chunk($groups[$batch]->getArrayCopy(), $this->batchSize));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $batches;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function transfer(array $batch)
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($batch)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Get the client of the first found command
 | 
			
		||||
        $client = reset($batch)->getClient();
 | 
			
		||||
 | 
			
		||||
        // Keep a list of all commands with invalid clients
 | 
			
		||||
        $invalid = array_filter($batch, function ($command) use ($client) {
 | 
			
		||||
            return $command->getClient() !== $client;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (!empty($invalid)) {
 | 
			
		||||
            throw new InconsistentClientTransferException($invalid);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $client->execute($batch);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Interface used for dividing a queue of items into an array of batches
 | 
			
		||||
 */
 | 
			
		||||
interface BatchDivisorInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Divide a queue of items into an array batches
 | 
			
		||||
     *
 | 
			
		||||
     * @param \SplQueue $queue Queue of items to divide into batches. Items are removed as they are iterated.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array|\Traversable Returns an array or Traversable object that contains arrays of items to transfer
 | 
			
		||||
     */
 | 
			
		||||
    public function createBatches(\SplQueue $queue);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for efficiently transferring items in a queue using batches
 | 
			
		||||
 */
 | 
			
		||||
interface BatchInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Add an item to the queue
 | 
			
		||||
     *
 | 
			
		||||
     * @param mixed $item Item to add
 | 
			
		||||
     *
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function add($item);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Flush the batch and transfer the items
 | 
			
		||||
     *
 | 
			
		||||
     * @return array Returns an array flushed items
 | 
			
		||||
     */
 | 
			
		||||
    public function flush();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if the batch is empty and has further items to transfer
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isEmpty();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchRequestTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchRequestTransfer.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Batch\BatchTransferInterface;
 | 
			
		||||
use Guzzle\Batch\BatchDivisorInterface;
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
use Guzzle\Http\Message\RequestInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Batch transfer strategy used to efficiently transfer a batch of requests.
 | 
			
		||||
 * This class is to be used with {@see Guzzle\Batch\BatchInterface}
 | 
			
		||||
 */
 | 
			
		||||
class BatchRequestTransfer implements BatchTransferInterface, BatchDivisorInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var int Size of each command batch */
 | 
			
		||||
    protected $batchSize;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor used to specify how large each batch should be
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $batchSize Size of each batch
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($batchSize = 50)
 | 
			
		||||
    {
 | 
			
		||||
        $this->batchSize = $batchSize;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates batches of requests by grouping requests by their associated curl multi object.
 | 
			
		||||
     * {@inheritdoc}
 | 
			
		||||
     */
 | 
			
		||||
    public function createBatches(\SplQueue $queue)
 | 
			
		||||
    {
 | 
			
		||||
        // Create batches by client objects
 | 
			
		||||
        $groups = new \SplObjectStorage();
 | 
			
		||||
        foreach ($queue as $item) {
 | 
			
		||||
            if (!$item instanceof RequestInterface) {
 | 
			
		||||
                throw new InvalidArgumentException('All items must implement Guzzle\Http\Message\RequestInterface');
 | 
			
		||||
            }
 | 
			
		||||
            $client = $item->getClient();
 | 
			
		||||
            if (!$groups->contains($client)) {
 | 
			
		||||
                $groups->attach($client, array($item));
 | 
			
		||||
            } else {
 | 
			
		||||
                $current = $groups[$client];
 | 
			
		||||
                $current[] = $item;
 | 
			
		||||
                $groups[$client] = $current;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $batches = array();
 | 
			
		||||
        foreach ($groups as $batch) {
 | 
			
		||||
            $batches = array_merge($batches, array_chunk($groups[$batch], $this->batchSize));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $batches;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function transfer(array $batch)
 | 
			
		||||
    {
 | 
			
		||||
        if ($batch) {
 | 
			
		||||
            reset($batch)->getClient()->send($batch);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Divides batches into smaller batches under a certain size
 | 
			
		||||
 */
 | 
			
		||||
class BatchSizeDivisor implements BatchDivisorInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var int Size of each batch */
 | 
			
		||||
    protected $size;
 | 
			
		||||
 | 
			
		||||
    /** @param int $size Size of each batch */
 | 
			
		||||
    public function __construct($size)
 | 
			
		||||
    {
 | 
			
		||||
        $this->size = $size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the size of each batch
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $size Size of each batch
 | 
			
		||||
     *
 | 
			
		||||
     * @return BatchSizeDivisor
 | 
			
		||||
     */
 | 
			
		||||
    public function setSize($size)
 | 
			
		||||
    {
 | 
			
		||||
        $this->size = $size;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the size of each batch
 | 
			
		||||
     *
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function getSize()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createBatches(\SplQueue $queue)
 | 
			
		||||
    {
 | 
			
		||||
        return array_chunk(iterator_to_array($queue, false), $this->size);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Interface used for transferring batches of items
 | 
			
		||||
 */
 | 
			
		||||
interface BatchTransferInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Transfer an array of items
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $batch Array of items to transfer
 | 
			
		||||
     */
 | 
			
		||||
    public function transfer(array $batch);
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,90 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch\Exception;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\GuzzleException;
 | 
			
		||||
use Guzzle\Batch\BatchTransferInterface as TransferStrategy;
 | 
			
		||||
use Guzzle\Batch\BatchDivisorInterface as DivisorStrategy;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Exception thrown during a batch transfer
 | 
			
		||||
 */
 | 
			
		||||
class BatchTransferException extends \Exception implements GuzzleException
 | 
			
		||||
{
 | 
			
		||||
    /** @var array The batch being sent when the exception occurred */
 | 
			
		||||
    protected $batch;
 | 
			
		||||
 | 
			
		||||
    /** @var TransferStrategy The transfer strategy in use when the exception occurred */
 | 
			
		||||
    protected $transferStrategy;
 | 
			
		||||
 | 
			
		||||
    /** @var DivisorStrategy The divisor strategy in use when the exception occurred */
 | 
			
		||||
    protected $divisorStrategy;
 | 
			
		||||
 | 
			
		||||
    /** @var array Items transferred at the point in which the exception was encountered */
 | 
			
		||||
    protected $transferredItems;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array            $batch            The batch being sent when the exception occurred
 | 
			
		||||
     * @param array            $transferredItems Items transferred at the point in which the exception was encountered
 | 
			
		||||
     * @param \Exception       $exception        Exception encountered
 | 
			
		||||
     * @param TransferStrategy $transferStrategy The transfer strategy in use when the exception occurred
 | 
			
		||||
     * @param DivisorStrategy  $divisorStrategy  The divisor strategy in use when the exception occurred
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        array $batch,
 | 
			
		||||
        array $transferredItems,
 | 
			
		||||
        \Exception $exception,
 | 
			
		||||
        TransferStrategy $transferStrategy = null,
 | 
			
		||||
        DivisorStrategy $divisorStrategy = null
 | 
			
		||||
    ) {
 | 
			
		||||
        $this->batch = $batch;
 | 
			
		||||
        $this->transferredItems = $transferredItems;
 | 
			
		||||
        $this->transferStrategy = $transferStrategy;
 | 
			
		||||
        $this->divisorStrategy = $divisorStrategy;
 | 
			
		||||
        parent::__construct(
 | 
			
		||||
            'Exception encountered while transferring batch: ' . $exception->getMessage(),
 | 
			
		||||
            $exception->getCode(),
 | 
			
		||||
            $exception
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the batch that we being sent when the exception occurred
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getBatch()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->batch;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the items transferred at the point in which the exception was encountered
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getTransferredItems()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->transferredItems;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the transfer strategy
 | 
			
		||||
     *
 | 
			
		||||
     * @return TransferStrategy
 | 
			
		||||
     */
 | 
			
		||||
    public function getTransferStrategy()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->transferStrategy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the divisor strategy
 | 
			
		||||
     *
 | 
			
		||||
     * @return DivisorStrategy
 | 
			
		||||
     */
 | 
			
		||||
    public function getDivisorStrategy()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->divisorStrategy;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Batch\Exception\BatchTransferException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BatchInterface decorator used to buffer exceptions encountered during a transfer.  The exceptions can then later be
 | 
			
		||||
 * processed after a batch flush has completed.
 | 
			
		||||
 */
 | 
			
		||||
class ExceptionBufferingBatch extends AbstractBatchDecorator
 | 
			
		||||
{
 | 
			
		||||
    /** @var array Array of BatchTransferException exceptions */
 | 
			
		||||
    protected $exceptions = array();
 | 
			
		||||
 | 
			
		||||
    public function flush()
 | 
			
		||||
    {
 | 
			
		||||
        $items = array();
 | 
			
		||||
 | 
			
		||||
        while (!$this->decoratedBatch->isEmpty()) {
 | 
			
		||||
            try {
 | 
			
		||||
                $transferredItems = $this->decoratedBatch->flush();
 | 
			
		||||
            } catch (BatchTransferException $e) {
 | 
			
		||||
                $this->exceptions[] = $e;
 | 
			
		||||
                $transferredItems = $e->getTransferredItems();
 | 
			
		||||
            }
 | 
			
		||||
            $items = array_merge($items, $transferredItems);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $items;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the buffered exceptions
 | 
			
		||||
     *
 | 
			
		||||
     * @return array Array of BatchTransferException objects
 | 
			
		||||
     */
 | 
			
		||||
    public function getExceptions()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->exceptions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Clear the buffered exceptions
 | 
			
		||||
     */
 | 
			
		||||
    public function clearExceptions()
 | 
			
		||||
    {
 | 
			
		||||
        $this->exceptions = array();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BatchInterface decorator used to add automatic flushing of the queue when the size of the queue reaches a threshold.
 | 
			
		||||
 */
 | 
			
		||||
class FlushingBatch extends AbstractBatchDecorator
 | 
			
		||||
{
 | 
			
		||||
    /** @var int The threshold for which to automatically flush */
 | 
			
		||||
    protected $threshold;
 | 
			
		||||
 | 
			
		||||
    /** @var int Current number of items known to be in the queue */
 | 
			
		||||
    protected $currentTotal = 0;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
 | 
			
		||||
     * @param int            $threshold       Flush when the number in queue matches the threshold
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(BatchInterface $decoratedBatch, $threshold)
 | 
			
		||||
    {
 | 
			
		||||
        $this->threshold = $threshold;
 | 
			
		||||
        parent::__construct($decoratedBatch);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the auto-flush threshold
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $threshold The auto-flush threshold
 | 
			
		||||
     *
 | 
			
		||||
     * @return FlushingBatch
 | 
			
		||||
     */
 | 
			
		||||
    public function setThreshold($threshold)
 | 
			
		||||
    {
 | 
			
		||||
        $this->threshold = $threshold;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the auto-flush threshold
 | 
			
		||||
     *
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function getThreshold()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->threshold;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function add($item)
 | 
			
		||||
    {
 | 
			
		||||
        $this->decoratedBatch->add($item);
 | 
			
		||||
        if (++$this->currentTotal >= $this->threshold) {
 | 
			
		||||
            $this->currentTotal = 0;
 | 
			
		||||
            $this->decoratedBatch->flush();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BatchInterface decorator used to keep a history of items that were added to the batch.  You must clear the history
 | 
			
		||||
 * manually to remove items from the history.
 | 
			
		||||
 */
 | 
			
		||||
class HistoryBatch extends AbstractBatchDecorator
 | 
			
		||||
{
 | 
			
		||||
    /** @var array Items in the history */
 | 
			
		||||
    protected $history = array();
 | 
			
		||||
 | 
			
		||||
    public function add($item)
 | 
			
		||||
    {
 | 
			
		||||
        $this->history[] = $item;
 | 
			
		||||
        $this->decoratedBatch->add($item);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the batch history
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getHistory()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->history;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Clear the batch history
 | 
			
		||||
     */
 | 
			
		||||
    public function clearHistory()
 | 
			
		||||
    {
 | 
			
		||||
        $this->history = array();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Batch;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BatchInterface decorator used to call a method each time flush is called
 | 
			
		||||
 */
 | 
			
		||||
class NotifyingBatch extends AbstractBatchDecorator
 | 
			
		||||
{
 | 
			
		||||
    /** @var mixed Callable to call */
 | 
			
		||||
    protected $callable;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param BatchInterface $decoratedBatch Batch object to decorate
 | 
			
		||||
     * @param mixed          $callable       Callable to call
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(BatchInterface $decoratedBatch, $callable)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_callable($callable)) {
 | 
			
		||||
            throw new InvalidArgumentException('The passed argument is not callable');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->callable = $callable;
 | 
			
		||||
        parent::__construct($decoratedBatch);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function flush()
 | 
			
		||||
    {
 | 
			
		||||
        $items = $this->decoratedBatch->flush();
 | 
			
		||||
        call_user_func($this->callable, $items);
 | 
			
		||||
 | 
			
		||||
        return $items;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "guzzle/batch",
 | 
			
		||||
    "description": "Guzzle batch component for batching requests, commands, or custom transfers",
 | 
			
		||||
    "homepage": "http://guzzlephp.org/",
 | 
			
		||||
    "keywords": ["batch", "HTTP", "REST", "guzzle"],
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "authors": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Michael Dowling",
 | 
			
		||||
            "email": "mtdowling@gmail.com",
 | 
			
		||||
            "homepage": "https://github.com/mtdowling"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": ">=5.3.2",
 | 
			
		||||
        "guzzle/common": "self.version"
 | 
			
		||||
    },
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-0": { "Guzzle\\Batch": "" }
 | 
			
		||||
    },
 | 
			
		||||
    "suggest": {
 | 
			
		||||
        "guzzle/http": "self.version",
 | 
			
		||||
        "guzzle/service": "self.version"
 | 
			
		||||
    },
 | 
			
		||||
    "target-dir": "Guzzle/Batch",
 | 
			
		||||
    "extra": {
 | 
			
		||||
        "branch-alias": {
 | 
			
		||||
            "dev-master": "3.7-dev"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Abstract cache adapter
 | 
			
		||||
 */
 | 
			
		||||
abstract class AbstractCacheAdapter implements CacheAdapterInterface
 | 
			
		||||
{
 | 
			
		||||
    protected $cache;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the object owned by the adapter
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function getCacheObject()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										117
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,117 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
use Doctrine\Common\Cache\Cache;
 | 
			
		||||
use Guzzle\Common\Version;
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
use Guzzle\Common\Exception\RuntimeException;
 | 
			
		||||
use Guzzle\Common\FromConfigInterface;
 | 
			
		||||
use Zend\Cache\Storage\StorageInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Generates cache adapters from any number of known cache implementations
 | 
			
		||||
 */
 | 
			
		||||
class CacheAdapterFactory implements FromConfigInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a Guzzle cache adapter based on an array of options
 | 
			
		||||
     *
 | 
			
		||||
     * @param mixed $cache Cache value
 | 
			
		||||
     *
 | 
			
		||||
     * @return CacheAdapterInterface
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public static function fromCache($cache)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_object($cache)) {
 | 
			
		||||
            throw new InvalidArgumentException('Cache must be one of the known cache objects');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($cache instanceof CacheAdapterInterface) {
 | 
			
		||||
            return $cache;
 | 
			
		||||
        } elseif ($cache instanceof Cache) {
 | 
			
		||||
            return new DoctrineCacheAdapter($cache);
 | 
			
		||||
        } elseif ($cache instanceof StorageInterface) {
 | 
			
		||||
            return new Zf2CacheAdapter($cache);
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new InvalidArgumentException('Unknown cache type: ' . get_class($cache));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a Guzzle cache adapter based on an array of options
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $config Array of configuration options
 | 
			
		||||
     *
 | 
			
		||||
     * @return CacheAdapterInterface
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     * @deprecated This will be removed in a future version
 | 
			
		||||
     * @codeCoverageIgnore
 | 
			
		||||
     */
 | 
			
		||||
    public static function factory($config = array())
 | 
			
		||||
    {
 | 
			
		||||
        Version::warn(__METHOD__ . ' is deprecated');
 | 
			
		||||
        if (!is_array($config)) {
 | 
			
		||||
            throw new InvalidArgumentException('$config must be an array');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!isset($config['cache.adapter']) && !isset($config['cache.provider'])) {
 | 
			
		||||
            $config['cache.adapter'] = 'Guzzle\Cache\NullCacheAdapter';
 | 
			
		||||
            $config['cache.provider'] = null;
 | 
			
		||||
        } else {
 | 
			
		||||
            // Validate that the options are valid
 | 
			
		||||
            foreach (array('cache.adapter', 'cache.provider') as $required) {
 | 
			
		||||
                if (!isset($config[$required])) {
 | 
			
		||||
                    throw new InvalidArgumentException("{$required} is a required CacheAdapterFactory option");
 | 
			
		||||
                }
 | 
			
		||||
                if (is_string($config[$required])) {
 | 
			
		||||
                    // Convert dot notation to namespaces
 | 
			
		||||
                    $config[$required] = str_replace('.', '\\', $config[$required]);
 | 
			
		||||
                    if (!class_exists($config[$required])) {
 | 
			
		||||
                        throw new InvalidArgumentException("{$config[$required]} is not a valid class for {$required}");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Instantiate the cache provider
 | 
			
		||||
            if (is_string($config['cache.provider'])) {
 | 
			
		||||
                $args = isset($config['cache.provider.args']) ? $config['cache.provider.args'] : null;
 | 
			
		||||
                $config['cache.provider'] = self::createObject($config['cache.provider'], $args);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Instantiate the cache adapter using the provider and options
 | 
			
		||||
        if (is_string($config['cache.adapter'])) {
 | 
			
		||||
            $args = isset($config['cache.adapter.args']) ? $config['cache.adapter.args'] : array();
 | 
			
		||||
            array_unshift($args, $config['cache.provider']);
 | 
			
		||||
            $config['cache.adapter'] = self::createObject($config['cache.adapter'], $args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $config['cache.adapter'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a class using an array of constructor arguments
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $className Class name
 | 
			
		||||
     * @param array  $args      Arguments for the class constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     * @throws RuntimeException
 | 
			
		||||
     * @deprecated
 | 
			
		||||
     * @codeCoverageIgnore
 | 
			
		||||
     */
 | 
			
		||||
    private static function createObject($className, array $args = null)
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!$args) {
 | 
			
		||||
                return new $className;
 | 
			
		||||
            } else {
 | 
			
		||||
                $c = new \ReflectionClass($className);
 | 
			
		||||
                return $c->newInstanceArgs($args);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (\Exception $e) {
 | 
			
		||||
            throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for cache adapters.
 | 
			
		||||
 *
 | 
			
		||||
 * Cache adapters allow Guzzle to utilize various frameworks for caching HTTP responses.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://www.doctrine-project.org/ Inspired by Doctrine 2
 | 
			
		||||
 */
 | 
			
		||||
interface CacheAdapterInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Test if an entry exists in the cache.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $id      cache id The cache id of the entry to check for.
 | 
			
		||||
     * @param array  $options Array of cache adapter options
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool Returns TRUE if a cache entry exists for the given cache id, FALSE otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    public function contains($id, array $options = null);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Deletes a cache entry.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $id      cache id
 | 
			
		||||
     * @param array  $options Array of cache adapter options
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool TRUE on success, FALSE on failure
 | 
			
		||||
     */
 | 
			
		||||
    public function delete($id, array $options = null);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Fetches an entry from the cache.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $id      cache id The id of the cache entry to fetch.
 | 
			
		||||
     * @param array  $options Array of cache adapter options
 | 
			
		||||
     *
 | 
			
		||||
     * @return string The cached data or FALSE, if no cache entry exists for the given id.
 | 
			
		||||
     */
 | 
			
		||||
    public function fetch($id, array $options = null);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Puts data into the cache.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string   $id       The cache id
 | 
			
		||||
     * @param string   $data     The cache entry/data
 | 
			
		||||
     * @param int|bool $lifeTime The lifetime. If != false, sets a specific lifetime for this cache entry
 | 
			
		||||
     * @param array    $options  Array of cache adapter options
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool TRUE if the entry was successfully stored in the cache, FALSE otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/ClosureCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/ClosureCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Cache adapter that defers to closures for implementation
 | 
			
		||||
 */
 | 
			
		||||
class ClosureCacheAdapter implements CacheAdapterInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array Mapping of method names to callables
 | 
			
		||||
     */
 | 
			
		||||
    protected $callables;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The callables array is an array mapping the actions of the cache adapter to callables.
 | 
			
		||||
     * - contains: Callable that accepts an $id and $options argument
 | 
			
		||||
     * - delete:   Callable that accepts an $id and $options argument
 | 
			
		||||
     * - fetch:    Callable that accepts an $id and $options argument
 | 
			
		||||
     * - save:     Callable that accepts an $id, $data, $lifeTime, and $options argument
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $callables array of action names to callable
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \InvalidArgumentException if the callable is not callable
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $callables)
 | 
			
		||||
    {
 | 
			
		||||
        // Validate each key to ensure it exists and is callable
 | 
			
		||||
        foreach (array('contains', 'delete', 'fetch', 'save') as $key) {
 | 
			
		||||
            if (!array_key_exists($key, $callables) || !is_callable($callables[$key])) {
 | 
			
		||||
                throw new \InvalidArgumentException("callables must contain a callable {$key} key");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->callables = $callables;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function contains($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func($this->callables['contains'], $id, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func($this->callables['delete'], $id, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func($this->callables['fetch'], $id, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return call_user_func($this->callables['save'], $id, $data, $lifeTime, $options);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
use Doctrine\Common\Cache\Cache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Doctrine 2 cache adapter
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://www.doctrine-project.org/
 | 
			
		||||
 */
 | 
			
		||||
class DoctrineCacheAdapter extends AbstractCacheAdapter
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @param Cache $cache Doctrine cache object
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(Cache $cache)
 | 
			
		||||
    {
 | 
			
		||||
        $this->cache = $cache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function contains($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->contains($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->delete($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->fetch($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->save($id, $data, $lifeTime !== false ? $lifeTime : 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Null cache adapter
 | 
			
		||||
 */
 | 
			
		||||
class NullCacheAdapter extends AbstractCacheAdapter
 | 
			
		||||
{
 | 
			
		||||
    public function __construct() {}
 | 
			
		||||
 | 
			
		||||
    public function contains($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Version;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Zend Framework 1 cache adapter
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://framework.zend.com/manual/en/zend.cache.html
 | 
			
		||||
 * @deprecated
 | 
			
		||||
 * @codeCoverageIgnore
 | 
			
		||||
 */
 | 
			
		||||
class Zf1CacheAdapter extends AbstractCacheAdapter
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @param \Zend_Cache_Backend $cache Cache object to wrap
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(\Zend_Cache_Backend $cache)
 | 
			
		||||
    {
 | 
			
		||||
        Version::warn(__CLASS__ . ' is deprecated. Upgrade to ZF2 or use PsrCacheAdapter');
 | 
			
		||||
        $this->cache = $cache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function contains($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->test($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->remove($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->load($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->save($data, $id, array(), $lifeTime);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Cache;
 | 
			
		||||
 | 
			
		||||
use Zend\Cache\Storage\StorageInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Zend Framework 2 cache adapter
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://packages.zendframework.com/docs/latest/manual/en/zend.cache.html
 | 
			
		||||
 */
 | 
			
		||||
class Zf2CacheAdapter extends AbstractCacheAdapter
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @param StorageInterface $cache Zend Framework 2 cache adapter
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(StorageInterface $cache)
 | 
			
		||||
    {
 | 
			
		||||
        $this->cache = $cache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function contains($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->hasItem($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->removeItem($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch($id, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->getItem($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save($id, $data, $lifeTime = false, array $options = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->cache->setItem($id, $data);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "guzzle/cache",
 | 
			
		||||
    "description": "Guzzle cache adapter component",
 | 
			
		||||
    "homepage": "http://guzzlephp.org/",
 | 
			
		||||
    "keywords": ["cache", "adapter", "zf", "doctrine", "guzzle"],
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "authors": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Michael Dowling",
 | 
			
		||||
            "email": "mtdowling@gmail.com",
 | 
			
		||||
            "homepage": "https://github.com/mtdowling"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": ">=5.3.2",
 | 
			
		||||
        "guzzle/common": "self.version"
 | 
			
		||||
    },
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-0": { "Guzzle\\Cache": "" }
 | 
			
		||||
    },
 | 
			
		||||
    "target-dir": "Guzzle/Cache",
 | 
			
		||||
    "extra": {
 | 
			
		||||
        "branch-alias": {
 | 
			
		||||
            "dev-master": "3.7-dev"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Common;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\EventDispatcher\EventDispatcher;
 | 
			
		||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 | 
			
		||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class that holds an event dispatcher
 | 
			
		||||
 */
 | 
			
		||||
class AbstractHasDispatcher implements HasDispatcherInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var EventDispatcherInterface */
 | 
			
		||||
    protected $eventDispatcher;
 | 
			
		||||
 | 
			
		||||
    public static function getAllEvents()
 | 
			
		||||
    {
 | 
			
		||||
        return array();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
 | 
			
		||||
    {
 | 
			
		||||
        $this->eventDispatcher = $eventDispatcher;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getEventDispatcher()
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->eventDispatcher) {
 | 
			
		||||
            $this->eventDispatcher = new EventDispatcher();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->eventDispatcher;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function dispatch($eventName, array $context = array())
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function addSubscriber(EventSubscriberInterface $subscriber)
 | 
			
		||||
    {
 | 
			
		||||
        $this->getEventDispatcher()->addSubscriber($subscriber);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										403
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										403
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,403 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Common;
 | 
			
		||||
 | 
			
		||||
use Guzzle\Common\Exception\InvalidArgumentException;
 | 
			
		||||
use Guzzle\Common\Exception\RuntimeException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Key value pair collection object
 | 
			
		||||
 */
 | 
			
		||||
class Collection implements \ArrayAccess, \IteratorAggregate, \Countable, ToArrayInterface
 | 
			
		||||
{
 | 
			
		||||
    /** @var array Data associated with the object. */
 | 
			
		||||
    protected $data;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $data Associative array of data to set
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $data = array())
 | 
			
		||||
    {
 | 
			
		||||
        $this->data = $data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new collection from an array, validate the keys, and add default values where missing
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $config   Configuration values to apply.
 | 
			
		||||
     * @param array $defaults Default parameters
 | 
			
		||||
     * @param array $required Required parameter names
 | 
			
		||||
     *
 | 
			
		||||
     * @return self
 | 
			
		||||
     * @throws InvalidArgumentException if a parameter is missing
 | 
			
		||||
     */
 | 
			
		||||
    public static function fromConfig(array $config = array(), array $defaults = array(), array $required = array())
 | 
			
		||||
    {
 | 
			
		||||
        $data = $config + $defaults;
 | 
			
		||||
 | 
			
		||||
        if ($missing = array_diff($required, array_keys($data))) {
 | 
			
		||||
            throw new InvalidArgumentException('Config is missing the following keys: ' . implode(', ', $missing));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new self($data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function count()
 | 
			
		||||
    {
 | 
			
		||||
        return count($this->data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getIterator()
 | 
			
		||||
    {
 | 
			
		||||
        return new \ArrayIterator($this->data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function toArray()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Removes all key value pairs
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function clear()
 | 
			
		||||
    {
 | 
			
		||||
        $this->data = array();
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get all or a subset of matching key value pairs
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $keys Pass an array of keys to retrieve only a subset of key value pairs
 | 
			
		||||
     *
 | 
			
		||||
     * @return array Returns an array of all matching key value pairs
 | 
			
		||||
     */
 | 
			
		||||
    public function getAll(array $keys = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $keys ? array_intersect_key($this->data, array_flip($keys)) : $this->data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a specific key value.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key Key to retrieve.
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed|null Value of the key or NULL
 | 
			
		||||
     */
 | 
			
		||||
    public function get($key)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->data[$key]) ? $this->data[$key] : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set a key value pair
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key   Key to set
 | 
			
		||||
     * @param mixed  $value Value to set
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection Returns a reference to the object
 | 
			
		||||
     */
 | 
			
		||||
    public function set($key, $value)
 | 
			
		||||
    {
 | 
			
		||||
        $this->data[$key] = $value;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Add a value to a key.  If a key of the same name has already been added, the key value will be converted into an
 | 
			
		||||
     * array and the new value will be pushed to the end of the array.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key   Key to add
 | 
			
		||||
     * @param mixed  $value Value to add to the key
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection Returns a reference to the object.
 | 
			
		||||
     */
 | 
			
		||||
    public function add($key, $value)
 | 
			
		||||
    {
 | 
			
		||||
        if (!array_key_exists($key, $this->data)) {
 | 
			
		||||
            $this->data[$key] = $value;
 | 
			
		||||
        } elseif (is_array($this->data[$key])) {
 | 
			
		||||
            $this->data[$key][] = $value;
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->data[$key] = array($this->data[$key], $value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove a specific key value pair
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key A key to remove
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function remove($key)
 | 
			
		||||
    {
 | 
			
		||||
        unset($this->data[$key]);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get all keys in the collection
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getKeys()
 | 
			
		||||
    {
 | 
			
		||||
        return array_keys($this->data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns whether or not the specified key is present.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key The key for which to check the existence.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function hasKey($key)
 | 
			
		||||
    {
 | 
			
		||||
        return array_key_exists($key, $this->data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Case insensitive search the keys in the collection
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $key Key to search for
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool|string Returns false if not found, otherwise returns the key
 | 
			
		||||
     */
 | 
			
		||||
    public function keySearch($key)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (array_keys($this->data) as $k) {
 | 
			
		||||
            if (!strcasecmp($k, $key)) {
 | 
			
		||||
                return $k;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if any keys contains a certain value
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $value Value to search for
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed Returns the key if the value was found FALSE if the value was not found.
 | 
			
		||||
     */
 | 
			
		||||
    public function hasValue($value)
 | 
			
		||||
    {
 | 
			
		||||
        return array_search($value, $this->data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Replace the data of the object with the value of an array
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $data Associative array of data
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection Returns a reference to the object
 | 
			
		||||
     */
 | 
			
		||||
    public function replace(array $data)
 | 
			
		||||
    {
 | 
			
		||||
        $this->data = $data;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Add and merge in a Collection or array of key value pair data.
 | 
			
		||||
     *
 | 
			
		||||
     * @param Collection|array $data Associative array of key value pair data
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection Returns a reference to the object.
 | 
			
		||||
     */
 | 
			
		||||
    public function merge($data)
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($data as $key => $value) {
 | 
			
		||||
            $this->add($key, $value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Over write key value pairs in this collection with all of the data from an array or collection.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array|\Traversable $data Values to override over this config
 | 
			
		||||
     *
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function overwriteWith($data)
 | 
			
		||||
    {
 | 
			
		||||
        if (is_array($data)) {
 | 
			
		||||
            $this->data = $data + $this->data;
 | 
			
		||||
        } elseif ($data instanceof Collection) {
 | 
			
		||||
            $this->data = $data->toArray() + $this->data;
 | 
			
		||||
        } else {
 | 
			
		||||
            foreach ($data as $key => $value) {
 | 
			
		||||
                $this->data[$key] = $value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a Collection containing all the elements of the collection after applying the callback function to each
 | 
			
		||||
     * one. The Closure should accept three parameters: (string) $key, (string) $value, (array) $context and return a
 | 
			
		||||
     * modified value
 | 
			
		||||
     *
 | 
			
		||||
     * @param \Closure $closure Closure to apply
 | 
			
		||||
     * @param array    $context Context to pass to the closure
 | 
			
		||||
     * @param bool     $static  Set to TRUE to use the same class as the return rather than returning a Collection
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function map(\Closure $closure, array $context = array(), $static = true)
 | 
			
		||||
    {
 | 
			
		||||
        $collection = $static ? new static() : new self();
 | 
			
		||||
        foreach ($this as $key => $value) {
 | 
			
		||||
            $collection->add($key, $closure($key, $value, $context));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $collection;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Iterates over each key value pair in the collection passing them to the Closure. If the  Closure function returns
 | 
			
		||||
     * true, the current value from input is returned into the result Collection.  The Closure must accept three
 | 
			
		||||
     * parameters: (string) $key, (string) $value and return Boolean TRUE or FALSE for each value.
 | 
			
		||||
     *
 | 
			
		||||
     * @param \Closure $closure Closure evaluation function
 | 
			
		||||
     * @param bool     $static  Set to TRUE to use the same class as the return rather than returning a Collection
 | 
			
		||||
     *
 | 
			
		||||
     * @return Collection
 | 
			
		||||
     */
 | 
			
		||||
    public function filter(\Closure $closure, $static = true)
 | 
			
		||||
    {
 | 
			
		||||
        $collection = ($static) ? new static() : new self();
 | 
			
		||||
        foreach ($this->data as $key => $value) {
 | 
			
		||||
            if ($closure($key, $value)) {
 | 
			
		||||
                $collection->add($key, $value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $collection;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetExists($offset)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->data[$offset]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetGet($offset)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->data[$offset]) ? $this->data[$offset] : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetSet($offset, $value)
 | 
			
		||||
    {
 | 
			
		||||
        $this->data[$offset] = $value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetUnset($offset)
 | 
			
		||||
    {
 | 
			
		||||
        unset($this->data[$offset]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set a value into a nested array key. Keys will be created as needed to set the value.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $path  Path to set
 | 
			
		||||
     * @param mixed  $value Value to set at the key
 | 
			
		||||
     *
 | 
			
		||||
     * @return self
 | 
			
		||||
     * @throws RuntimeException when trying to setPath using a nested path that travels through a scalar value
 | 
			
		||||
     */
 | 
			
		||||
    public function setPath($path, $value)
 | 
			
		||||
    {
 | 
			
		||||
        $current =& $this->data;
 | 
			
		||||
        $queue = explode('/', $path);
 | 
			
		||||
        while (null !== ($key = array_shift($queue))) {
 | 
			
		||||
            if (!is_array($current)) {
 | 
			
		||||
                throw new RuntimeException("Trying to setPath {$path}, but {$key} is set and is not an array");
 | 
			
		||||
            } elseif (!$queue) {
 | 
			
		||||
                $current[$key] = $value;
 | 
			
		||||
            } elseif (isset($current[$key])) {
 | 
			
		||||
                $current =& $current[$key];
 | 
			
		||||
            } else {
 | 
			
		||||
                $current[$key] = array();
 | 
			
		||||
                $current =& $current[$key];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a value from the collection using an array path (e.g. foo/baz/bar would retrieve bar from two nested arrays)
 | 
			
		||||
     * Allows for wildcard searches which recursively combine matches up to the level at which the wildcard occurs. This
 | 
			
		||||
     * can be useful for accepting any key of a sub-array and combining matching keys from each diverging path.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $path      Path to traverse and retrieve a value from
 | 
			
		||||
     * @param string $separator Character used to add depth to the search
 | 
			
		||||
     * @param mixed  $data      Optional data to descend into (used when wildcards are encountered)
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getPath($path, $separator = '/', $data = null)
 | 
			
		||||
    {
 | 
			
		||||
        if ($data === null) {
 | 
			
		||||
            $data =& $this->data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $path = is_array($path) ? $path : explode($separator, $path);
 | 
			
		||||
        while (null !== ($part = array_shift($path))) {
 | 
			
		||||
            if (!is_array($data)) {
 | 
			
		||||
                return null;
 | 
			
		||||
            } elseif (isset($data[$part])) {
 | 
			
		||||
                $data =& $data[$part];
 | 
			
		||||
            } elseif ($part != '*') {
 | 
			
		||||
                return null;
 | 
			
		||||
            } else {
 | 
			
		||||
                // Perform a wildcard search by diverging and merging paths
 | 
			
		||||
                $result = array();
 | 
			
		||||
                foreach ($data as $value) {
 | 
			
		||||
                    if (!$path) {
 | 
			
		||||
                        $result = array_merge_recursive($result, (array) $value);
 | 
			
		||||
                    } elseif (null !== ($test = $this->getPath($path, $separator, $value))) {
 | 
			
		||||
                        $result = array_merge_recursive($result, (array) $test);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return $result;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Inject configuration settings into an input string
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $input Input to inject
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     * @deprecated
 | 
			
		||||
     */
 | 
			
		||||
    public function inject($input)
 | 
			
		||||
    {
 | 
			
		||||
        Version::warn(__METHOD__ . ' is deprecated');
 | 
			
		||||
        $replace = array();
 | 
			
		||||
        foreach ($this->data as $key => $val) {
 | 
			
		||||
            $replace['{' . $key . '}'] = $val;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return strtr($input, $replace);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Guzzle\Common;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\EventDispatcher\Event as SymfonyEvent;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Default event for Guzzle notifications
 | 
			
		||||
 */
 | 
			
		||||
class Event extends SymfonyEvent implements ToArrayInterface, \ArrayAccess, \IteratorAggregate
 | 
			
		||||
{
 | 
			
		||||
    /** @var array */
 | 
			
		||||
    private $context;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $context Contextual information
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $context = array())
 | 
			
		||||
    {
 | 
			
		||||
        $this->context = $context;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getIterator()
 | 
			
		||||
    {
 | 
			
		||||
        return new \ArrayIterator($this->context);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetGet($offset)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->context[$offset]) ? $this->context[$offset] : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetSet($offset, $value)
 | 
			
		||||
    {
 | 
			
		||||
        $this->context[$offset] = $value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetExists($offset)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->context[$offset]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function offsetUnset($offset)
 | 
			
		||||
    {
 | 
			
		||||
        unset($this->context[$offset]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function toArray()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->context;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user