namespace Zend\Feed\Reader;
+use Zend\Feed\Reader\Exception\InvalidArgumentException;
+
class StandaloneExtensionManager implements ExtensionManagerInterface
{
private $extensions = [
- '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',
+ 'Atom\Entry' => Extension\Atom\Entry::class,
+ 'Atom\Feed' => Extension\Atom\Feed::class,
+ 'Content\Entry' => Extension\Content\Entry::class,
+ 'CreativeCommons\Entry' => Extension\CreativeCommons\Entry::class,
+ 'CreativeCommons\Feed' => Extension\CreativeCommons\Feed::class,
+ 'DublinCore\Entry' => Extension\DublinCore\Entry::class,
+ 'DublinCore\Feed' => Extension\DublinCore\Feed::class,
+ 'Podcast\Entry' => Extension\Podcast\Entry::class,
+ 'Podcast\Feed' => Extension\Podcast\Feed::class,
+ 'Slash\Entry' => Extension\Slash\Entry::class,
+ 'Syndication\Feed' => Extension\Syndication\Feed::class,
+ 'Thread\Entry' => Extension\Thread\Entry::class,
+ 'WellFormedWeb\Entry' => Extension\WellFormedWeb\Entry::class,
];
/**
$class = $this->extensions[$extension];
return new $class();
}
+
+ /**
+ * Add an extension.
+ *
+ * @param string $name
+ * @param string $class
+ */
+ public function add($name, $class)
+ {
+ if (is_string($class)
+ && (
+ is_a($class, Extension\AbstractEntry::class, true)
+ || is_a($class, Extension\AbstractFeed::class, true)
+ )
+ ) {
+ $this->extensions[$name] = $class;
+ return;
+ }
+
+ throw new InvalidArgumentException(sprintf(
+ 'Plugin of type %s is invalid; must implement %2$s\Extension\AbstractFeed '
+ . 'or %2$s\Extension\AbstractEntry',
+ $class,
+ __NAMESPACE__
+ ));
+ }
+
+ /**
+ * Remove an extension.
+ *
+ * @param string $name
+ */
+ public function remove($name)
+ {
+ unset($this->extensions[$name]);
+ }
}