* @copyright 2008 Digg.com, Inc. * @license http://tinyurl.com/42zef New BSD License * @version SVN: @version@ * @link http://code.google.com/p/digg * @link http://oembed.com */ require_once 'Services/oEmbed/Object/Exception.php'; /** * Base class for consuming oEmbed objects * * @category Services * @package Services_oEmbed * @author Joe Stump * @copyright 2008 Digg.com, Inc. * @license http://tinyurl.com/42zef New BSD License * @version Release: @version@ * @link http://code.google.com/p/digg * @link http://oembed.com */ abstract class Services_oEmbed_Object { /** * Valid oEmbed object types * * @var array $types Array of valid object types * @see Services_oEmbed_Object::factory() */ static protected $types = array( 'photo' => 'Photo', 'video' => 'Video', 'link' => 'Link', 'rich' => 'Rich' ); /** * Create an oEmbed object from result * * @param object $object Raw object returned from API * * @throws {@link Services_oEmbed_Object_Exception} on object error * @return object Instance of object driver * @see Services_oEmbed_Object_Link, Services_oEmbed_Object_Photo * @see Services_oEmbed_Object_Rich, Services_oEmbed_Object_Video */ static public function factory($object) { if (!isset($object->type)) { throw new Services_oEmbed_Object_Exception( 'Object has no type' ); } $type = (string)$object->type; if (!isset(self::$types[$type])) { throw new Services_oEmbed_Object_Exception( 'Object type is unknown or invalid: ' . $type ); } $file = 'Services/oEmbed/Object/' . self::$types[$type] . '.php'; include_once $file; $class = 'Services_oEmbed_Object_' . self::$types[$type]; if (!class_exists($class)) { throw new Services_oEmbed_Object_Exception( 'Object class is invalid or not present' ); } $instance = new $class($object); return $instance; } /** * Instantiation is not allowed * * @return void */ private function __construct() { } } ?>