Returning a NullCacheAdapter from the CacheAdapterFactory if no cache.adapter is provided
Changing DescriptionBuilders to not be static method classes
Adding ServiceDescriptionFactory and making service descriptions cachable
[Http] cache.* parameters should be prefixed with 'params.' now.
Adding the ability to set arbitrary curl options that don't map to constants (disable_wire, progress, etc)
Added a check to the CurlMulti object that prevents sending a request when the curl multi resource has been destroyed. This could possibly happen when issuing requests from a destructor.
Adding the ability to disable type validation of configuration options
Adding a cache for all requests owned by a curl multi object
Creating the polling event external to the main CurlMulti loop
Hardening the CurlMulti class so that curl handles that are finished sending are removed from the multi handle. Adding validation test
[Common] BC: Simplifying Guzzle\Common\Collection so that it is more performant.
[Service] Adding the ability to disable validation on the Inpector class. Disabling validation on first instantiating commands so that defaults are added but nothing is check until attempting to execute a command.
Using class properties instead of a Collection for ApiCommand
BC: Using a custom validation system that allows a flyweight
implementation for much faster validation. No longer using Symfony2
Validation component.
Moving cURL transfer stderr logic from the CurlMulti class and on to the CurlHandle class
Adding a fix for 'too many open files' that will allow the proper exception to be thrown when this occurs by ensuring that the exception is autoloaded before you run into the issue.
Cleaning up some CurlMulti error checking and adding the ability to allow a request to continue to be sent even after a curl transfer error occurs.
Adding the option to pass in a callable function to the ExponentialBackoffPlugin that determines whether or not a request failed and should be retried. Adding a method to return a default array of failure codes and curl error numbers.
Adding the ability to retry specific curl handle transfer errors with the ExponentialBackoffPlugin
[Http] Error responses are now never written to the intended response stream of a request, but rather to a temporary stream. This helps when retrying failed requests so that the intended stream is not polluted with transient errors.
[Http] Adding the ability to retry failed requests with the exponential backoff plugin by checking both the status code and reason phrase.
[Service] Simplifying the loop in Guzzle\Service\Command\DynamicCommand
[Http] Using a factory method when creating bad response exceptions. Adding ClientErrorResponseException and ServerErrorResponseException.
[Http] Removing curl specific protocal version code from RequestInterace and pushing it to the curl namespace
[Http] Renaming parseUrlUtf8 to parseUrl and fixing a typo
1. Adopting a marker interface for Guzzle exceptions.
A. All exceptions emitted from Guzzle are now wrapped with a Guzzle namespaced exception.
B. Guzzle\Common\GuzzleExceptionInterface was renamed to Guzzle\Common\GuzzleException
C. Guzzle\Common\ExceptionCollection was renamed to Guzzle\Common\Exception\ExceptionCollection
2. Using Header objects for Request and Response objects
A. When you call $request->getHeader('X'), you will get back a Guzzle\Http\Message\Header object that contains all of the headers that case insensitively match. This object can be cast to a string or iterated like an array. You can pass true in the second argument to retrieve the header as a string.
B. Removing the old Guzzle\Common\Collection based searching arguments from most of the request and response header methods. All retrievals are case-insensitive and return Header objects.
3. Changing the two headers added by the cache plugin to just one header with key and ttl.
4. Changing Guzzle\Http\Message\Response::factory() to fromMessage().
5. Removing the NullObject return value from ServiceDescriptions and instead simply returning null
New Features / enhancements:
1. Adding Guzzle\Http\Message\AbstractMessage::addHeaders()
2. Making it simpler to create service descriptions using a unified factory method that delegates to other factories.
3. Better handling of ports and hosts in Guzzle\Http\Url
Note: This is a noisy diff because I'm removing trailing whitespace and adding a new line at the end of each source file.
Adding normalized behavior to Guzzle\Http\Message\AbstractMessage::getHeader() so that it returns an array of headers if multiple header values are found for a specific header key. It will return a single string if only one header is found.
Updating curl handle to work with multiple headers per key