Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

Commit

Permalink
Merge pull request zendframework/zendframework#1 from zendframework/d…
Browse files Browse the repository at this point in the history
…evelop

Develop
  • Loading branch information
kokspflanze committed Mar 14, 2015
216 parents 1c3c759 + 5b35f97 + 929f993 + cb2b29e + 817293e + a95715f + 59a52e7 + 1f543f2 + 8ea6767 + 8793888 + 163d706 + a197876 + dc04d82 + e296dd4 + 8cd607e + 758e5c3 + 59f3ba8 + 63d873e + a320b87 + 911d7bc + 5b99e49 + 916ccaf + 363002c + de6a155 + 81d4652 + 8677f66 + bea2340 + 53107b1 + e575de9 + c8a932b + d08629f + a04474f + 3fef53d + 1f4b9ed + d263f1c + c790aed + 412585a + b5e6b02 + 9ac81f3 + 9f28eab + 2e7e2e2 + 7c64770 + b82fa59 + 4190868 + 3a6b7ad + 8e745f6 + bab7086 + c5a5d19 + b468bc1 + d79794c + 508b344 + d16deed + f38e96a + c4a3687 + 54465f7 + 4ad15e4 + 9aa47da + 619d24d + ddfa8f2 + 8e7172b + e5fc69f + 284a721 + 6d3db4c + b99e8c3 + a52dcef + 1d21066 + cccc24c + 81bd699 + dfb38ed + b796f3d + d49dbc2 + 547433c + 0c9ce04 + a76e26a + 2914396 + 7ca3746 + f1b292d + 406112f + 5a9edd3 + f65c9f6 + c54156c + 5e55e82 + 352e42b + fa459f5 + 3eff137 + 3648ab6 + 4096125 + 0037391 + 9bdfcd9 + 6cd1498 + ecac99d + 199ed75 + b8507f7 + ef400bd + decb6ae + 860b39d + 243eca6 + d56af72 + 1aaf7f9 + 26b27a9 + 40cd50e + 986898b + d2780b7 + 49abb1d + cb5a738 + 21d3bef + 4748875 + 3331086 + bfed36c + b56e9b8 + 765b017 + b2cddce + 1c63803 + dd490e0 + c0425c2 + 128ed7f + 4d88940 + 94b3f1e + 9a0d8cf + 12135ad + 1169a58 + 6cdb5dc + 15950e5 + 7e68fb2 + 4bda4a9 + 537893f + 4cf10f8 + dd5b294 + 3ac5190 + 63d8503 + de5ff9e + f8868a0 + e3f8a27 + 634cf99 + c2cd236 + 189672f + d50054c + 8fb183a + 81a21d6 + ba78039 + 2cc9607 + bbd31f7 + aff5dfd + 3daad46 + a2bd1ba + cddc550 + eadb29a + 339c074 + 543ff20 + 732e048 + 8ec7eaf + 25fde7d + 5215c37 + a31404d + 1328e20 + 33a507b + 012928d + 379d601 + b7d4bbd + c1c633c + 6a72de0 + 7968e2e + 51d3d2a + 7e58137 + abedf39 + 896ef54 + cf89f92 + 0df0d18 + 3d7cc47 + 8abd6e8 + e20a954 + 2f039d3 + 88c06cc + 3e03422 + 096a05e + 6c7650a + a4c7b54 + ef5460e + 898d44f + c554ea2 + ffcf7bc + 2adc6bf + 4179b4d + 5907ce0 + fc664b1 + 2ee9d9a + 7fb5cbc + acda3d1 + 6db0d22 + 2bbd38f + 3144a5b + 7efb048 + 3d18a84 + 93a97aa + f98796f + 853fff2 + 149db66 + 2416664 + ed3d22e + 08c425e + 9675758 + 2a8daeb + 7e876e2 + ef2ccfa + 978f64c + 262c40f + 18ac29e + ec7ea9f + 1d789f3 + 95dfa24 + d3e9758 + 830f321 + b592ea4 + 369da75 + d0d0128 + 7a88540 commit 1b04e04
Show file tree
Hide file tree
Showing 5 changed files with 196 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/Reader/Reader.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

/**
*/
class Reader
class Reader implements ReaderImportInterface
{
/**
* Namespace constants
Expand Down Expand Up @@ -544,7 +544,7 @@ public static function setExtensionManager(ExtensionManagerInterface $extensionM
public static function getExtensionManager()
{
if (!isset(static::$extensionManager)) {
static::setExtensionManager(new ExtensionManager());
static::setExtensionManager(new StandaloneExtensionManager());
}
return static::$extensionManager;
}
Expand Down
62 changes: 62 additions & 0 deletions src/Reader/ReaderImportInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/

namespace Zend\Feed\Reader;

interface ReaderImportInterface
{
/**
* Import a feed by providing a URI
*
* @param string $uri The URI to the feed
* @param string $etag OPTIONAL Last received ETag for this resource
* @param string $lastModified OPTIONAL Last-Modified value for this resource
* @return Feed\FeedInterface
* @throws Exception\RuntimeException
*/
public static function import($uri, $etag = null, $lastModified = null);

/**
* Import a feed from a remote URI
*
* Performs similarly to import(), except it uses the HTTP client passed to
* the method, and does not take into account cached data.
*
* Primary purpose is to make it possible to use the Reader with alternate
* HTTP client implementations.
*
* @param string $uri
* @param Http\ClientInterface $client
* @return self
* @throws Exception\RuntimeException if response is not an Http\ResponseInterface
*/
public static function importRemoteFeed($uri, Http\ClientInterface $client);


/**
* Import a feed from a string
*
* @param string $string
* @return Feed\FeedInterface
* @throws Exception\InvalidArgumentException
* @throws Exception\RuntimeException
*/
public static function importString($string);


/**
* Imports a feed from a file located at $filename.
*
* @param string $filename
* @throws Exception\RuntimeException
* @return Feed\FeedInterface
*/
public static function importFile($filename);
}
52 changes: 52 additions & 0 deletions src/Reader/StandaloneExtensionManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/

namespace Zend\Feed\Reader;

class StandaloneExtensionManager implements ExtensionManagerInterface
{
private $extensions = array(
'Atom\Entry' => 'Zend\Feed\Reader\Extension\Atom\Entry',
'Atom\Feed' => 'Zend\Feed\Reader\Extension\Atom\Feed',
'Content\Entry' => 'Zend\Feed\Reader\Extension\Content\Entry',
'CreativeCommons\Entry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
'CreativeCommons\Feed' => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
'DublinCore\Entry' => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
'DublinCore\Feed' => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
'Podcast\Entry' => 'Zend\Feed\Reader\Extension\Podcast\Entry',
'Podcast\Feed' => 'Zend\Feed\Reader\Extension\Podcast\Feed',
'Slash\Entry' => 'Zend\Feed\Reader\Extension\Slash\Entry',
'Syndication\Feed' => 'Zend\Feed\Reader\Extension\Syndication\Feed',
'Thread\Entry' => 'Zend\Feed\Reader\Extension\Thread\Entry',
'WellFormedWeb\Entry' => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
);

/**
* Do we have the extension?
*
* @param string $extension
* @return bool
*/
public function has($extension)
{
return array_key_exists($extension, $this->extensions);
}

/**
* Retrieve the extension
*
* @param string $extension
* @return Extension\AbstractEntry|Extension\AbstractFeed
*/
public function get($extension)
{
$class = $this->extensions[$extension];
return new $class();
}
}
5 changes: 3 additions & 2 deletions test/Reader/ReaderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,10 @@ public function testRegistersUserExtension()
{
require_once __DIR__ . '/_files/My/Extension/JungleBooks/Entry.php';
require_once __DIR__ . '/_files/My/Extension/JungleBooks/Feed.php';
$manager = Reader\Reader::getExtensionManager();
$manager = new Reader\ExtensionManager(new Reader\ExtensionPluginManager());
$manager->setInvokableClass('JungleBooks\Entry', 'My\Extension\JungleBooks\Entry');
$manager->setInvokableClass('JungleBooks\Feed', 'My\Extension\JungleBooks\Feed');
Reader\Reader::setExtensionManager($manager);
Reader\Reader::registerExtension('JungleBooks');

$this->assertTrue(Reader\Reader::isRegistered('JungleBooks'));
Expand Down Expand Up @@ -331,7 +332,7 @@ protected function _getTempDirectory()
return $dir;
}
}
$tempFile = tempnam(md5(uniqid(rand(), TRUE)), '');
$tempFile = tempnam(md5(uniqid(rand(), true)), '');
if ($tempFile) {
$dir = realpath(dirname($tempFile));
unlink($tempFile);
Expand Down
77 changes: 77 additions & 0 deletions test/Reader/StandaloneExtensionManagerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace ZendTest\Feed\Reader;

use PHPUnit_Framework_TestCase as TestCase;
use Zend\Feed\Reader\StandaloneExtensionManager;

class StandaloneExtensionManagerTest extends TestCase
{
public function setUp()
{
$this->extensions = new StandaloneExtensionManager();
}

public function testIsAnExtensionManagerImplementation()
{
$this->assertInstanceOf('Zend\Feed\Reader\ExtensionManagerInterface', $this->extensions);
}

public function defaultPlugins()
{
return array(
'Atom\Entry' => array('Atom\Entry', 'Zend\Feed\Reader\Extension\Atom\Entry'),
'Atom\Feed' => array('Atom\Feed', 'Zend\Feed\Reader\Extension\Atom\Feed'),
'Content\Entry' => array('Content\Entry', 'Zend\Feed\Reader\Extension\Content\Entry'),
'CreativeCommons\Entry' => array(
'CreativeCommons\Entry',
'Zend\Feed\Reader\Extension\CreativeCommons\Entry'
),
'CreativeCommons\Feed' => array('CreativeCommons\Feed', 'Zend\Feed\Reader\Extension\CreativeCommons\Feed'),
'DublinCore\Entry' => array('DublinCore\Entry', 'Zend\Feed\Reader\Extension\DublinCore\Entry'),
'DublinCore\Feed' => array('DublinCore\Feed', 'Zend\Feed\Reader\Extension\DublinCore\Feed'),
'Podcast\Entry' => array('Podcast\Entry', 'Zend\Feed\Reader\Extension\Podcast\Entry'),
'Podcast\Feed' => array('Podcast\Feed', 'Zend\Feed\Reader\Extension\Podcast\Feed'),
'Slash\Entry' => array('Slash\Entry', 'Zend\Feed\Reader\Extension\Slash\Entry'),
'Syndication\Feed' => array('Syndication\Feed', 'Zend\Feed\Reader\Extension\Syndication\Feed'),
'Thread\Entry' => array('Thread\Entry', 'Zend\Feed\Reader\Extension\Thread\Entry'),
'WellFormedWeb\Entry' => array('WellFormedWeb\Entry', 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry'),
);
}

/**
* @dataProvider defaultPlugins
*/
public function testHasAllDefaultPlugins($pluginName, $pluginClass)
{
$this->assertTrue($this->extensions->has($pluginName));
}

/**
* @dataProvider defaultPlugins
*/
public function testCanRetrieveDefaultPluginInstances($pluginName, $pluginClass)
{
$extension = $this->extensions->get($pluginName);
$this->assertInstanceOf($pluginClass, $extension);
}

/**
* @dataProvider defaultPlugins
*/
public function testEachPluginRetrievalReturnsNewInstance($pluginName, $pluginClass)
{
$extension = $this->extensions->get($pluginName);
$this->assertInstanceOf($pluginClass, $extension);

$test = $this->extensions->get($pluginName);
$this->assertInstanceOf($pluginClass, $test);
$this->assertNotSame($extension, $test);
}
}

0 comments on commit 1b04e04

Please sign in to comment.