Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #243 from simplepie/cache-backwards-compat

Fix backwards compatibility with cache subclasses
  • Loading branch information...
commit e93cbe51f4f4aca8330effcee8f20c06f3fabcad 2 parents caf7803 + f0ea4be
@rmccue rmccue authored
View
4 library/SimplePie.php
@@ -1263,7 +1263,7 @@ public function init()
// Decide whether to enable caching
if ($this->cache && $parsed_feed_url['scheme'] !== '')
{
- $cache = $this->registry->call('Cache', 'create', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'));
+ $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'));
}
// Fetch the data via SimplePie_File into $this->raw_data
@@ -1513,7 +1513,7 @@ protected function fetch_data(&$cache)
{
trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
- $cache = $this->registry->call('Cache', 'create', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'));
+ $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'));
}
$this->feed_url = $file->url;
}
View
13 library/SimplePie/Cache.php
@@ -79,7 +79,7 @@ private function __construct() { }
* @param string $extension 'spi' or 'spc'
* @return SimplePie_Cache_Base Type of object depends on scheme of `$location`
*/
- public static function create($location, $filename, $extension)
+ public static function get_handler($location, $filename, $extension)
{
$type = explode(':', $location, 2);
$type = $type[0];
@@ -93,6 +93,17 @@ public static function create($location, $filename, $extension)
}
/**
+ * Create a new SimplePie_Cache object
+ *
+ * @deprecated Use {@see get_handler} instead
+ */
+ public function create($location, $filename, $extension)
+ {
+ trigger_error('Cache::create() has been replaced with Cache::get_handler(). Switch to the registry system to use this.', E_USER_DEPRECATED);
+ return self::get_handler($location, $filename, $extension);
+ }
+
+ /**
* Register a handler
*
* @param string $type DSN type to register for
View
16 library/SimplePie/Registry.php
@@ -203,6 +203,22 @@ public function &call($type, $method, $parameters = array())
{
$class = $this->get_class($type);
+ if (in_array($class, $this->legacy))
+ {
+ switch ($type)
+ {
+ case 'Cache':
+ // For backwards compatibility with old non-static
+ // Cache::create() methods
+ if ($method === 'get_handler')
+ {
+ $result = @call_user_func_array(array($class, 'create'), $parameters);
+ return $result;
+ }
+ break;
+ }
+ }
+
$result = call_user_func_array(array($class, $method), $parameters);
return $result;
}
View
2  library/SimplePie/Sanitize.php
@@ -302,7 +302,7 @@ public function sanitize($data, $type, $base = '')
if ($img->hasAttribute('src'))
{
$image_url = call_user_func($this->cache_name_function, $img->getAttribute('src'));
- $cache = $this->registry->call('Cache', 'create', array($this->cache_location, $image_url, 'spi'));
+ $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $image_url, 'spi'));
if ($cache->load())
{
View
1  tests/AllTests.php
@@ -57,6 +57,7 @@ public static function suite()
$suite = new PHPUnit_Framework_TestSuite();
$suite->setName('SimplePie');
+ $suite->addTestSuite('CacheTest');
$suite->addTestSuite('EncodingTest');
$suite->addTestSuite('IRITest');
$suite->addTestSuite('LocatorTest');
View
115 tests/CacheTest.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @version 1.4-dev
+ * @copyright 2004-2011 Ryan Parman, Geoffrey Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+/**
+ * This is a dirty, dirty hack
+ */
+class Exception_Success extends Exception {
+
+}
+
+class Mock_CacheLegacy extends SimplePie_Cache
+{
+ public static function get_handler($location, $filename, $extension)
+ {
+ trigger_error('Legacy cache class should not have get_handler() called');
+ }
+ public function create($location, $filename, $extension)
+ {
+ throw new Exception_Success('Correct function called');
+ }
+}
+
+class Mock_CacheNew extends SimplePie_Cache
+{
+ public static function get_handler($location, $filename, $extension)
+ {
+ throw new Exception_Success('Correct function called');
+ }
+ public function create($location, $filename, $extension)
+ {
+ trigger_error('New cache class should not have create() called');
+ }
+}
+
+class Mock_FakeFile extends SimplePie_File
+{
+ public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+ {
+ $this->url = $url;
+ $this->useragent = $useragent;
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ }
+}
+
+class CacheTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException Exception_Success
+ */
+ public function testDirectOverrideLegacy()
+ {
+ $feed = new SimplePie();
+ $feed->set_cache_class('Mock_CacheLegacy');
+ $feed->get_registry()->register('File', 'Mock_File');
+ $feed->set_feed_url('http://example.com/feed/');
+
+ $feed->init();
+ }
+
+ /**
+ * @expectedException Exception_Success
+ */
+ public function testDirectOverrideNew()
+ {
+ $feed = new SimplePie();
+ $feed->get_registry()->register('Cache', 'Mock_CacheNew');
+ $feed->get_registry()->register('File', 'Mock_File');
+ $feed->set_feed_url('http://example.com/feed/');
+
+ $feed->init();
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.