From 2f6da48f198eab86e1edbc5d202f6c4302ddbde6 Mon Sep 17 00:00:00 2001 From: Michael Roterman Date: Mon, 27 Jan 2014 22:01:56 +0100 Subject: [PATCH] Removing static methods to allow for easier testing later on. --- lib/Tmdb/Factory/AbstractFactory.php | 33 +++- lib/Tmdb/Factory/CollectionFactory.php | 77 +++++++-- .../Common/GenericCollectionFactory.php | 14 +- lib/Tmdb/Factory/CompanyFactory.php | 10 +- lib/Tmdb/Factory/ConfigurationFactory.php | 18 +-- lib/Tmdb/Factory/FactoryInterface.php | 17 ++ lib/Tmdb/Factory/GenreFactory.php | 10 +- lib/Tmdb/Factory/ImageFactory.php | 41 +++-- .../Factory/Movie/AlternativeTitleFactory.php | 10 +- lib/Tmdb/Factory/MovieFactory.php | 138 ++++++++++++++-- lib/Tmdb/Factory/People/CastFactory.php | 6 +- lib/Tmdb/Factory/People/CrewFactory.php | 6 +- lib/Tmdb/Factory/People/PeopleFactory.php | 45 +++++- lib/Tmdb/Factory/TvEpisodeFactory.php | 103 ++++++++++-- lib/Tmdb/Factory/TvFactory.php | 152 ++++++++++++++++-- lib/Tmdb/Factory/TvSeasonFactory.php | 123 ++++++++++++-- lib/Tmdb/Repository/AbstractRepository.php | 29 +++- lib/Tmdb/Repository/ChangesRepository.php | 33 +++- lib/Tmdb/Repository/CollectionRepository.php | 22 ++- lib/Tmdb/Repository/CompanyRepository.php | 14 +- .../Repository/ConfigurationRepository.php | 11 +- lib/Tmdb/Repository/DiscoverRepository.php | 73 ++++++++- lib/Tmdb/Repository/FindRepository.php | 4 + lib/Tmdb/Repository/GenreRepository.php | 14 +- lib/Tmdb/Repository/MovieRepository.php | 19 ++- lib/Tmdb/Repository/PeopleRepository.php | 13 +- lib/Tmdb/Repository/TvEpisodeRepository.php | 15 +- lib/Tmdb/Repository/TvRepository.php | 27 ++-- lib/Tmdb/Repository/TvSeasonRepository.php | 15 +- 29 files changed, 906 insertions(+), 186 deletions(-) create mode 100644 lib/Tmdb/Factory/FactoryInterface.php diff --git a/lib/Tmdb/Factory/AbstractFactory.php b/lib/Tmdb/Factory/AbstractFactory.php index 10c145d3..c39a8cae 100644 --- a/lib/Tmdb/Factory/AbstractFactory.php +++ b/lib/Tmdb/Factory/AbstractFactory.php @@ -15,15 +15,16 @@ use Tmdb\Common\ObjectHydrator; use Tmdb\Factory\Common\GenericCollectionFactory; use Tmdb\Model\AbstractModel; +use Tmdb\Model\Common\GenericCollection; -abstract class AbstractFactory { +abstract class AbstractFactory implements FactoryInterface { /** * Convert an array to an hydrated object * * @param array $data * @return AbstractModel */ - abstract public static function create(array $data = array()); + abstract public function create(array $data = array()); /** * Convert an array with an collection of items to an hydrated object collection @@ -31,7 +32,29 @@ abstract public static function create(array $data = array()); * @param array $data * @return GenericCollectionFactory */ - abstract public static function createCollection(array $data = array()); + abstract public function createCollection(array $data = array()); + + /** + * Create a generic collection of data and map it on the class by it's static parameter $_properties + * + * @param array $data + * @param $class + * @return GenericCollection + */ + protected function createGenericCollection(array $data = array(), $class) + { + if (is_object($class)) { + $class = get_class($class); + } + + $collection = new GenericCollection(); + + foreach($data as $item) { + $collection->add(null, $this->hydrate(new $class(), $item)); + } + + return $collection; + } /** * Hydrate the object with data @@ -40,8 +63,8 @@ abstract public static function createCollection(array $data = array()); * @param array $data * @return AbstractModel */ - public function hydrate(AbstractModel $object, $data = array()) + protected function hydrate(AbstractModel $object, $data = array()) { return ObjectHydrator::hydrate($object, $data); } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/CollectionFactory.php b/lib/Tmdb/Factory/CollectionFactory.php index 6be0d83f..5b83cf53 100644 --- a/lib/Tmdb/Factory/CollectionFactory.php +++ b/lib/Tmdb/Factory/CollectionFactory.php @@ -12,48 +12,105 @@ */ namespace Tmdb\Factory; +use Tmdb\Model\Common\GenericCollection; + class CollectionFactory extends AbstractFactory { + /** + * @var MovieFactory + */ + private $movieFactory; + + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->movieFactory = new MovieFactory(); + $this->imageFactory = new ImageFactory(); + } + /** * {@inheritdoc} * @return \Tmdb\Model\Collection */ - public static function create(array $data = array()) + public function create(array $data = array()) { $collection = new \Tmdb\Model\Collection(); if (array_key_exists('parts', $data)) { $collection->setParts( - MovieFactory::createCollection($data['parts']) + $this->getMovieFactory()->createCollection($data['parts']) ); } if (array_key_exists('backdrop_path', $data)) { - $collection->setBackdrop(ImageFactory::createFromPath($data['backdrop_path'], 'backdrop_path')); + $collection->setBackdrop($this->getImageFactory()->createFromPath($data['backdrop_path'], 'backdrop_path')); } if (array_key_exists('images', $data)) { - $collection->setImages(ImageFactory::createCollectionFromMovie($data['images'])); + $collection->setImages($this->getImageFactory()->createCollectionFromMovie($data['images'])); } if (array_key_exists('poster_path', $data)) { - $collection->setPoster(ImageFactory::createFromPath($data['poster_path'], 'poster_path')); + $collection->setPoster($this->getImageFactory()->createFromPath($data['poster_path'], 'poster_path')); } - return parent::hydrate($collection, $data); + return $this->hydrate($collection, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { - $collection = new \Tmdb\Model\Common\Collection(); + $collection = new GenericCollection(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } + + /** + * @param \Tmdb\Factory\MovieFactory $movieFactory + * @return $this + */ + public function setMovieFactory($movieFactory) + { + $this->movieFactory = $movieFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\MovieFactory + */ + public function getMovieFactory() + { + return $this->movieFactory; + } +} diff --git a/lib/Tmdb/Factory/Common/GenericCollectionFactory.php b/lib/Tmdb/Factory/Common/GenericCollectionFactory.php index d6b535b5..66cea81d 100644 --- a/lib/Tmdb/Factory/Common/GenericCollectionFactory.php +++ b/lib/Tmdb/Factory/Common/GenericCollectionFactory.php @@ -15,15 +15,21 @@ use Tmdb\Common\ObjectHydrator; use Tmdb\Model\Common\GenericCollection; +/** + * @deprecated + * + * Class GenericCollectionFactory + * @package Tmdb\Factory\Common + */ class GenericCollectionFactory { /** * @param array $data * @param $class * @return GenericCollection */ - public static function create(array $data = array(), $class) + public function create(array $data = array(), $class) { - return self::createCollection($data, $class); + return $this->createCollection($data, $class); } /** @@ -31,7 +37,7 @@ public static function create(array $data = array(), $class) * @param $class * @return GenericCollection */ - public static function createCollection(array $data = array(), $class) + public function createCollection(array $data = array(), $class) { if (is_object($class)) { $class = get_class($class); @@ -45,4 +51,4 @@ public static function createCollection(array $data = array(), $class) return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/CompanyFactory.php b/lib/Tmdb/Factory/CompanyFactory.php index 90472e6f..439b7ddc 100644 --- a/lib/Tmdb/Factory/CompanyFactory.php +++ b/lib/Tmdb/Factory/CompanyFactory.php @@ -20,22 +20,22 @@ class CompanyFactory extends AbstractFactory /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { - return parent::hydrate(new Company(), $data); + return $this->hydrate(new Company(), $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/ConfigurationFactory.php b/lib/Tmdb/Factory/ConfigurationFactory.php index 341c2822..def7c7d6 100644 --- a/lib/Tmdb/Factory/ConfigurationFactory.php +++ b/lib/Tmdb/Factory/ConfigurationFactory.php @@ -12,7 +12,6 @@ */ namespace Tmdb\Factory; -use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Configuration; class ConfigurationFactory extends AbstractFactory @@ -20,25 +19,18 @@ class ConfigurationFactory extends AbstractFactory /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { $config = new Configuration(); - return parent::hydrate($config, $data); + return $this->hydrate($config, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { - $collection = new GenericCollection(); - - foreach($data as $item) { - $collection->add(null, self::create($item)); - } - - return $collection; + return null; } - -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/FactoryInterface.php b/lib/Tmdb/Factory/FactoryInterface.php new file mode 100644 index 00000000..1454dda6 --- /dev/null +++ b/lib/Tmdb/Factory/FactoryInterface.php @@ -0,0 +1,17 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Factory; + +interface FactoryInterface { + function create(); +} diff --git a/lib/Tmdb/Factory/GenreFactory.php b/lib/Tmdb/Factory/GenreFactory.php index 69ff0101..71e584f9 100644 --- a/lib/Tmdb/Factory/GenreFactory.php +++ b/lib/Tmdb/Factory/GenreFactory.php @@ -20,22 +20,22 @@ class GenreFactory extends AbstractFactory /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { - return parent::hydrate(new Genre(), $data); + return $this->hydrate(new Genre(), $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new Genres(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/ImageFactory.php b/lib/Tmdb/Factory/ImageFactory.php index 265d74ec..74956976 100644 --- a/lib/Tmdb/Factory/ImageFactory.php +++ b/lib/Tmdb/Factory/ImageFactory.php @@ -24,7 +24,7 @@ class ImageFactory extends AbstractFactory * @param string|null $key * @return Image */ - public static function create(array $data = array(), $key = null) + public function create(array $data = array(), $key = null) { $type = self::resolveImageType($key); @@ -34,7 +34,7 @@ public static function create(array $data = array(), $key = null) ); } - return parent::hydrate($type, $data); + return $this->hydrate($type, $data); } /** @@ -46,9 +46,9 @@ public static function create(array $data = array(), $key = null) * @param string $key * @return Image */ - public static function createFromPath($path, $key) + public function createFromPath($path, $key) { - return parent::hydrate( + return $this->hydrate( self::resolveImageType($key), array('file_path' => $path) ); @@ -59,7 +59,7 @@ public static function createFromPath($path, $key) * * @return string[] */ - public static function getPossibleKeys() + public function getPossibleKeys() { return array( 'poster', @@ -129,12 +129,12 @@ private function resolveImageType($key = null) * @param array $data * @return Images */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new Images(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; @@ -146,14 +146,14 @@ public static function createCollection(array $data = array()) * @param array $data * @return Images */ - public static function createImageCollection(array $data = array()) + public function createImageCollection(array $data = array()) { $collection = new Images(); foreach($data as $format => $formatCollection) { foreach($formatCollection as $item) { if (array_key_exists($format, Image::$_formats)) { - $item = self::create($item, $format); + $item = $this->create($item, $format); $collection->add(null, $item); } @@ -169,9 +169,9 @@ public static function createImageCollection(array $data = array()) * @param array $data * @return Images */ - public static function createCollectionFromMovie(array $data = array()) + public function createCollectionFromMovie(array $data = array()) { - return self::createImageCollection($data); + return $this->createImageCollection($data); } /** @@ -180,9 +180,9 @@ public static function createCollectionFromMovie(array $data = array()) * @param array $data * @return Images */ - public static function createCollectionFromTv(array $data = array()) + public function createCollectionFromTv(array $data = array()) { - return self::createImageCollection($data); + return $this->createImageCollection($data); } /** @@ -191,9 +191,9 @@ public static function createCollectionFromTv(array $data = array()) * @param array $data * @return Images */ - public static function createCollectionFromTvSeason(array $data = array()) + public function createCollectionFromTvSeason(array $data = array()) { - return self::createImageCollection($data); + return $this->createImageCollection($data); } /** @@ -202,9 +202,9 @@ public static function createCollectionFromTvSeason(array $data = array()) * @param array $data * @return Images */ - public static function createCollectionFromTvEpisode(array $data = array()) + public function createCollectionFromTvEpisode(array $data = array()) { - return self::createImageCollection($data); + return $this->createImageCollection($data); } /** @@ -213,9 +213,8 @@ public static function createCollectionFromTvEpisode(array $data = array()) * @param array $data * @return Images */ - public static function createCollectionFromPeople(array $data = array()) + public function createCollectionFromPeople(array $data = array()) { - return self::createImageCollection($data); + return $this->createImageCollection($data); } - -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/Movie/AlternativeTitleFactory.php b/lib/Tmdb/Factory/Movie/AlternativeTitleFactory.php index b8417afd..6bdb5be3 100644 --- a/lib/Tmdb/Factory/Movie/AlternativeTitleFactory.php +++ b/lib/Tmdb/Factory/Movie/AlternativeTitleFactory.php @@ -21,24 +21,24 @@ class AlternativeTitleFactory extends AbstractFactory /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { $title = new AlternativeTitle(); - return $title->hydrate($data); + return $this->hydrate($title, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/MovieFactory.php b/lib/Tmdb/Factory/MovieFactory.php index d0d12b5e..ef38f181 100644 --- a/lib/Tmdb/Factory/MovieFactory.php +++ b/lib/Tmdb/Factory/MovieFactory.php @@ -12,7 +12,6 @@ */ namespace Tmdb\Factory; -use Tmdb\Factory\Common\GenericCollectionFactory; use Tmdb\Factory\People\CastFactory; use Tmdb\Factory\People\CrewFactory; use Tmdb\Model\Common\GenericCollection; @@ -21,10 +20,41 @@ use Tmdb\Model\Movie; class MovieFactory extends AbstractFactory { + /** + * @var People\CastFactory + */ + private $castFactory; + + /** + * @var People\CrewFactory + */ + private $crewFactory; + + /** + * @var GenreFactory + */ + private $genreFactory; + + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->castFactory = new CastFactory(); + $this->crewFactory = new CrewFactory(); + $this->genreFactory = new GenreFactory(); + $this->imageFactory = new ImageFactory(); + } + /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { if (!$data) { return null; @@ -34,60 +64,60 @@ public static function create(array $data = array()) if (array_key_exists('alternative_titles', $data) && array_key_exists('titles', $data['alternative_titles'])) { $movie->setAlternativeTitles( - GenericCollectionFactory::createCollection($data['alternative_titles']['titles'], new Movie\AlternativeTitle()) + $this->createGenericCollection($data['alternative_titles']['titles'], new Movie\AlternativeTitle()) ); } if (array_key_exists('credits', $data)) { if (array_key_exists('cast', $data['credits'])) { - $movie->getCredits()->setCast(CastFactory::createCollection($data['credits']['cast'])); + $movie->getCredits()->setCast($this->getCastFactory()->createCollection($data['credits']['cast'])); } if (array_key_exists('crew', $data['credits'])) { - $movie->getCredits()->setCrew(CrewFactory::createCollection($data['credits']['crew'])); + $movie->getCredits()->setCrew($this->getCrewFactory()->createCollection($data['credits']['crew'])); } } /** Genres */ if (array_key_exists('genres', $data)) { - $movie->setGenres(GenreFactory::createCollection($data['genres'])); + $movie->setGenres($this->getGenreFactory()->createCollection($data['genres'])); } /** Images */ if (array_key_exists('backdrop_path', $data)) { - $movie->setBackdrop(ImageFactory::createFromPath($data['backdrop_path'], 'backdrop_path')); + $movie->setBackdrop($this->getImageFactory()->createFromPath($data['backdrop_path'], 'backdrop_path')); } if (array_key_exists('images', $data)) { - $movie->setImages(ImageFactory::createCollectionFromMovie($data['images'])); + $movie->setImages($this->getImageFactory()->createCollectionFromMovie($data['images'])); } if (array_key_exists('poster_path', $data)) { - $movie->setPoster(ImageFactory::createFromPath($data['poster_path'], 'poster_path')); + $movie->setPoster($this->getImageFactory()->createFromPath($data['poster_path'], 'poster_path')); } /** Keywords */ if (array_key_exists('keywords', $data)) { - $movie->setKeywords(GenericCollectionFactory::createCollection($data['keywords']['keywords'], new Movie\Keyword())); + $movie->setKeywords($this->createGenericCollection($data['keywords']['keywords'], new Movie\Keyword())); } if (array_key_exists('releases', $data)) { - $movie->setReleases(GenericCollectionFactory::createCollection($data['releases']['countries'], new Movie\Release())); + $movie->setReleases($this->createGenericCollection($data['releases']['countries'], new Movie\Release())); } /** * @TODO actually implement more providers? ( Can't seem to find any quicktime related trailers anyways? ). For now KISS */ if (array_key_exists('trailers', $data)) { - $movie->setTrailers(GenericCollectionFactory::createCollection($data['trailers']['youtube'], new Youtube())); + $movie->setTrailers($this->createGenericCollection($data['trailers']['youtube'], new Youtube())); } if (array_key_exists('translations', $data)) { - $movie->setTranslations(GenericCollectionFactory::createCollection($data['translations']['translations'], new Translation())); + $movie->setTranslations($this->createGenericCollection($data['translations']['translations'], new Translation())); } if (array_key_exists('similar_movies', $data)) { - $movie->setSimilarMovies(self::createCollection($data['similar_movies']['results'])); + $movie->setSimilarMovies($this->createCollection($data['similar_movies']['results'])); } // if (array_key_exists('reviews', $data)) { @@ -99,13 +129,13 @@ public static function create(array $data = array()) // if (array_key_exists('changes', $data)) { // } - return parent::hydrate($movie, $data); + return $this->hydrate($movie, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); @@ -114,9 +144,83 @@ public static function createCollection(array $data = array()) } foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } + + /** + * @param \Tmdb\Factory\People\CastFactory $castFactory + * @return $this + */ + public function setCastFactory($castFactory) + { + $this->castFactory = $castFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CastFactory + */ + public function getCastFactory() + { + return $this->castFactory; + } + + /** + * @param \Tmdb\Factory\People\CrewFactory $crewFactory + * @return $this + */ + public function setCrewFactory($crewFactory) + { + $this->crewFactory = $crewFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CrewFactory + */ + public function getCrewFactory() + { + return $this->crewFactory; + } + + /** + * @param \Tmdb\Factory\GenreFactory $genreFactory + * @return $this + */ + public function setGenreFactory($genreFactory) + { + $this->genreFactory = $genreFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\GenreFactory + */ + public function getGenreFactory() + { + return $this->genreFactory; + } + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } + + } \ No newline at end of file diff --git a/lib/Tmdb/Factory/People/CastFactory.php b/lib/Tmdb/Factory/People/CastFactory.php index b8a2e07d..d3972ab5 100644 --- a/lib/Tmdb/Factory/People/CastFactory.php +++ b/lib/Tmdb/Factory/People/CastFactory.php @@ -19,7 +19,7 @@ class CastFactory extends PeopleFactory /** * {@inheritdoc} */ - public static function create(array $data = array(), $person = null) + public function create(array $data = array(), $person = null) { return parent::create($data, $person); } @@ -28,7 +28,7 @@ public static function create(array $data = array(), $person = null) * {@inheritdoc} * @param \Tmdb\Model\Tv\Person\CastMember $person */ - public static function createCollection(array $data = array(), $person = null) + public function createCollection(array $data = array(), $person = null) { $collection = new Cast(); @@ -38,4 +38,4 @@ public static function createCollection(array $data = array(), $person = null) return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/People/CrewFactory.php b/lib/Tmdb/Factory/People/CrewFactory.php index 545bf30b..83b1391c 100644 --- a/lib/Tmdb/Factory/People/CrewFactory.php +++ b/lib/Tmdb/Factory/People/CrewFactory.php @@ -19,7 +19,7 @@ class CrewFactory extends PeopleFactory /** * {@inheritdoc} */ - public static function create(array $data = array(), $person = null) + public function create(array $data = array(), $person = null) { return parent::create($data, $person); } @@ -28,7 +28,7 @@ public static function create(array $data = array(), $person = null) * {@inheritdoc} * @param \Tmdb\Model\Tv\Person\CrewMember $person */ - public static function createCollection(array $data = array(), $person = null) + public function createCollection(array $data = array(), $person = null) { $collection = new Crew(); @@ -38,4 +38,4 @@ public static function createCollection(array $data = array(), $person = null) return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Factory/People/PeopleFactory.php b/lib/Tmdb/Factory/People/PeopleFactory.php index e5f2c2ee..1ffb5059 100644 --- a/lib/Tmdb/Factory/People/PeopleFactory.php +++ b/lib/Tmdb/Factory/People/PeopleFactory.php @@ -20,10 +20,23 @@ use Tmdb\Model\Person; class PeopleFactory extends AbstractFactory { + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->imageFactory = new ImageFactory(); + } + /** * {@inheritdoc} */ - public static function create(array $data = array(), Person\AbstractMember $person = null) + public function create(array $data = array(), Person\AbstractMember $person = null) { if (!is_object($person)) { if (array_key_exists('character', $data)) { @@ -41,20 +54,20 @@ public static function create(array $data = array(), Person\AbstractMember $pers /** Images */ if (array_key_exists('images', $data)) { - $person->setImages(ImageFactory::createCollectionFromPeople($data['images'])); + $person->setImages($this->getImageFactory()->createCollectionFromPeople($data['images'])); } if (array_key_exists('profile_path', $data)) { - $person->setProfile(ImageFactory::createFromPath($data['profile_path'], 'profile_path')); + $person->setProfile($this->getImageFactory()->createFromPath($data['profile_path'], 'profile_path')); } - return parent::hydrate($person, $data); + return $this->hydrate($person, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array(), Person\AbstractMember $person = null) + public function createCollection(array $data = array(), Person\AbstractMember $person = null) { $collection = new GenericCollection(); @@ -63,9 +76,27 @@ public static function createCollection(array $data = array(), Person\AbstractMe } foreach($data as $item) { - $collection->add(null, self::create($item, $person)); + $collection->add(null, $this->create($item, $person)); } return $collection; } -} \ No newline at end of file + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } +} diff --git a/lib/Tmdb/Factory/TvEpisodeFactory.php b/lib/Tmdb/Factory/TvEpisodeFactory.php index f87a66a6..5a419b44 100644 --- a/lib/Tmdb/Factory/TvEpisodeFactory.php +++ b/lib/Tmdb/Factory/TvEpisodeFactory.php @@ -21,10 +21,35 @@ use Tmdb\Model\Tv\Episode; class TvEpisodeFactory extends AbstractFactory { + /** + * @var People\CastFactory + */ + private $castFactory; + + /** + * @var People\CrewFactory + */ + private $crewFactory; + + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->castFactory = new CastFactory(); + $this->crewFactory = new CrewFactory(); + $this->imageFactory = new ImageFactory(); + } + /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { if (!$data) { return null; @@ -34,40 +59,100 @@ public static function create(array $data = array()) if (array_key_exists('credits', $data)) { if (array_key_exists('cast', $data['credits'])) { - $tvEpisode->getCredits()->setCast(CastFactory::createCollection($data['credits']['cast'], new CastMember())); + $tvEpisode->getCredits()->setCast( + $this->getCastFactory()->createCollection($data['credits']['cast'], + new CastMember()) + ); } if (array_key_exists('crew', $data['credits'])) { - $tvEpisode->getCredits()->setCrew(CrewFactory::createCollection($data['credits']['crew'], new CrewMember())); + $tvEpisode->getCredits()->setCrew( + $this->getCrewFactory()->createCollection($data['credits']['crew'], + new CrewMember()) + ); } } /** External ids */ if (array_key_exists('external_ids', $data)) { $tvEpisode->setExternalIds( - parent::hydrate(new ExternalIds(), $data['external_ids']) + $this->hydrate(new ExternalIds(), $data['external_ids']) ); } /** Images */ if (array_key_exists('images', $data)) { - $tvEpisode->setImages(ImageFactory::createCollectionFromTv($data['images'])); + $tvEpisode->setImages($this->getImageFactory()->createCollectionFromTv($data['images'])); } - return parent::hydrate($tvEpisode, $data); + return $this->hydrate($tvEpisode, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file + + /** + * @param \Tmdb\Factory\People\CastFactory $castFactory + * @return $this + */ + public function setCastFactory($castFactory) + { + $this->castFactory = $castFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CastFactory + */ + public function getCastFactory() + { + return $this->castFactory; + } + + /** + * @param \Tmdb\Factory\People\CrewFactory $crewFactory + * @return $this + */ + public function setCrewFactory($crewFactory) + { + $this->crewFactory = $crewFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CrewFactory + */ + public function getCrewFactory() + { + return $this->crewFactory; + } + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } +} diff --git a/lib/Tmdb/Factory/TvFactory.php b/lib/Tmdb/Factory/TvFactory.php index ad773eac..550acdac 100644 --- a/lib/Tmdb/Factory/TvFactory.php +++ b/lib/Tmdb/Factory/TvFactory.php @@ -12,7 +12,6 @@ */ namespace Tmdb\Factory; -use Tmdb\Factory\Common\GenericCollectionFactory; use Tmdb\Factory\People\CastFactory; use Tmdb\Factory\People\CrewFactory; use Tmdb\Model\Common\GenericCollection; @@ -21,10 +20,47 @@ use Tmdb\Model\Tv; class TvFactory extends AbstractFactory { + /** + * @var People\CastFactory + */ + private $castFactory; + + /** + * @var People\CrewFactory + */ + private $crewFactory; + + /** + * @var GenreFactory + */ + private $genreFactory; + + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * @var TvSeasonFactory + */ + private $tvSeasonFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->castFactory = new CastFactory(); + $this->crewFactory = new CrewFactory(); + $this->genreFactory = new GenreFactory(); + $this->imageFactory = new ImageFactory(); + $this->tvSeasonFactory = new TvSeasonFactory(); + } + /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { if (!$data) { return null; @@ -34,53 +70,53 @@ public static function create(array $data = array()) if (array_key_exists('credits', $data)) { if (array_key_exists('cast', $data['credits'])) { - $tvShow->getCredits()->setCast(CastFactory::createCollection($data['credits']['cast'], new Tv\Person\CastMember())); + $tvShow->getCredits()->setCast($this->getCastFactory()->createCollection($data['credits']['cast'], new Tv\Person\CastMember())); } if (array_key_exists('crew', $data['credits'])) { - $tvShow->getCredits()->setCrew(CrewFactory::createCollection($data['credits']['crew'], new Tv\Person\CrewMember())); + $tvShow->getCredits()->setCrew($this->getCrewFactory()->createCollection($data['credits']['crew'], new Tv\Person\CrewMember())); } } /** External ids */ if (array_key_exists('external_ids', $data)) { $tvShow->setExternalIds( - parent::hydrate(new ExternalIds(), $data['external_ids']) + $this->hydrate(new ExternalIds(), $data['external_ids']) ); } /** Genres */ if (array_key_exists('genres', $data)) { - $tvShow->setGenres(GenreFactory::createCollection($data['genres'])); + $tvShow->setGenres($this->getGenreFactory()->createCollection($data['genres'])); } /** Images */ if (array_key_exists('images', $data)) { - $tvShow->setImages(ImageFactory::createCollectionFromTv($data['images'])); + $tvShow->setImages($this->getImageFactory()->createCollectionFromTv($data['images'])); } /** Translations */ if (array_key_exists('translations', $data)) { - $tvShow->setTranslations(GenericCollectionFactory::createCollection($data['translations']['translations'], new Translation())); + $tvShow->setTranslations($this->createGenericCollection($data['translations']['translations'], new Translation())); } /** Seasons */ if (array_key_exists('seasons', $data)) { - $tvShow->setSeasons(TvSeasonFactory::createCollection($data['seasons'])); + $tvShow->setSeasons($this->getTvSeasonFactory()->createCollection($data['seasons'])); } /** Networks */ if (array_key_exists('networks', $data)) { - $tvShow->setNetworks(GenericCollectionFactory::createCollection($data['networks'], new Tv\Network())); + $tvShow->setNetworks($this->createGenericCollection($data['networks'], new Tv\Network())); } - return parent::hydrate($tvShow, $data); + return $this->hydrate($tvShow, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); @@ -89,9 +125,99 @@ public static function createCollection(array $data = array()) } foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } + + /** + * @param \Tmdb\Factory\People\CastFactory $castFactory + * @return $this + */ + public function setCastFactory($castFactory) + { + $this->castFactory = $castFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CastFactory + */ + public function getCastFactory() + { + return $this->castFactory; + } + + /** + * @param \Tmdb\Factory\People\CrewFactory $crewFactory + * @return $this + */ + public function setCrewFactory($crewFactory) + { + $this->crewFactory = $crewFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CrewFactory + */ + public function getCrewFactory() + { + return $this->crewFactory; + } + + /** + * @param \Tmdb\Factory\GenreFactory $genreFactory + * @return $this + */ + public function setGenreFactory($genreFactory) + { + $this->genreFactory = $genreFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\GenreFactory + */ + public function getGenreFactory() + { + return $this->genreFactory; + } + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } + + /** + * @param \Tmdb\Factory\TvSeasonFactory $tvSeasonFactory + * @return $this + */ + public function setTvSeasonFactory($tvSeasonFactory) + { + $this->tvSeasonFactory = $tvSeasonFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\TvSeasonFactory + */ + public function getTvSeasonFactory() + { + return $this->tvSeasonFactory; + } } diff --git a/lib/Tmdb/Factory/TvSeasonFactory.php b/lib/Tmdb/Factory/TvSeasonFactory.php index 8be78043..ca69cb32 100644 --- a/lib/Tmdb/Factory/TvSeasonFactory.php +++ b/lib/Tmdb/Factory/TvSeasonFactory.php @@ -21,10 +21,41 @@ use Tmdb\Model\Tv\Season; class TvSeasonFactory extends AbstractFactory { + /** + * @var People\CastFactory + */ + private $castFactory; + + /** + * @var People\CrewFactory + */ + private $crewFactory; + + /** + * @var ImageFactory + */ + private $imageFactory; + + /** + * @var TvEpisodeFactory + */ + private $tvEpisodeFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->castFactory = new CastFactory(); + $this->crewFactory = new CrewFactory(); + $this->imageFactory = new ImageFactory(); + $this->tvEpisodeFactory = new TvEpisodeFactory(); + } + /** * {@inheritdoc} */ - public static function create(array $data = array()) + public function create(array $data = array()) { if (!$data) { return null; @@ -34,45 +65,117 @@ public static function create(array $data = array()) if (array_key_exists('credits', $data)) { if (array_key_exists('cast', $data['credits'])) { - $tvSeason->getCredits()->setCast(CastFactory::createCollection($data['credits']['cast'], new CastMember())); + $tvSeason->getCredits()->setCast($this->getCastFactory()->createCollection($data['credits']['cast'], new CastMember())); } if (array_key_exists('crew', $data['credits'])) { - $tvSeason->getCredits()->setCrew(CrewFactory::createCollection($data['credits']['crew'], new CrewMember())); + $tvSeason->getCredits()->setCrew($this->getCrewFactory()->createCollection($data['credits']['crew'], new CrewMember())); } } /** External ids */ if (array_key_exists('external_ids', $data)) { $tvSeason->setExternalIds( - parent::hydrate(new ExternalIds(), $data['external_ids']) + $this->hydrate(new ExternalIds(), $data['external_ids']) ); } /** Images */ if (array_key_exists('images', $data)) { - $tvSeason->setImages(ImageFactory::createCollectionFromTv($data['images'])); + $tvSeason->setImages($this->getImageFactory()->createCollectionFromTv($data['images'])); } /** Episodes */ if (array_key_exists('episodes', $data)) { - $tvSeason->setEpisodes(TvEpisodeFactory::createCollection($data['episodes'])); + $tvSeason->setEpisodes($this->getTvEpisodeFactory()->createCollection($data['episodes'])); } - return parent::hydrate($tvSeason, $data); + return $this->hydrate($tvSeason, $data); } /** * {@inheritdoc} */ - public static function createCollection(array $data = array()) + public function createCollection(array $data = array()) { $collection = new GenericCollection(); foreach($data as $item) { - $collection->add(null, self::create($item)); + $collection->add(null, $this->create($item)); } return $collection; } -} \ No newline at end of file + + /** + * @param \Tmdb\Factory\People\CastFactory $castFactory + * @return $this + */ + public function setCastFactory($castFactory) + { + $this->castFactory = $castFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CastFactory + */ + public function getCastFactory() + { + return $this->castFactory; + } + + /** + * @param \Tmdb\Factory\People\CrewFactory $crewFactory + * @return $this + */ + public function setCrewFactory($crewFactory) + { + $this->crewFactory = $crewFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\People\CrewFactory + */ + public function getCrewFactory() + { + return $this->crewFactory; + } + + /** + * @param \Tmdb\Factory\ImageFactory $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\ImageFactory + */ + public function getImageFactory() + { + return $this->imageFactory; + } + + /** + * @param \Tmdb\Factory\TvEpisodeFactory $tvEpisodeFactory + * @return $this + */ + public function setTvEpisodeFactory($tvEpisodeFactory) + { + $this->tvEpisodeFactory = $tvEpisodeFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\TvEpisodeFactory + */ + public function getTvEpisodeFactory() + { + return $this->tvEpisodeFactory; + } +} diff --git a/lib/Tmdb/Repository/AbstractRepository.php b/lib/Tmdb/Repository/AbstractRepository.php index a3e3d724..5b86da8e 100644 --- a/lib/Tmdb/Repository/AbstractRepository.php +++ b/lib/Tmdb/Repository/AbstractRepository.php @@ -14,13 +14,13 @@ use Tmdb\Api\ApiInterface; use Tmdb\Client; +use Tmdb\Factory\FactoryInterface; use Tmdb\Model\Common\QueryParameter\QueryParameterInterface; abstract class AbstractRepository { - protected $client = null; - - protected $api = null; + protected $client = null; + protected $api = null; /** * Constructor @@ -32,7 +32,7 @@ abstract class AbstractRepository { */ public function __construct(Client $client) { - $this->client = $client; + $this->client = $client; } /** @@ -54,7 +54,7 @@ public function getClient() protected function parseQueryParameters(array $parameters = array()) { foreach($parameters as $key => $candidate) { - if (is_object($candidate)) { + if (is_a($candidate, 'Tmdb\Model\Common\QueryParameter\QueryParameterInterface')) { $interfaces = class_implements($candidate); if (array_key_exists('Tmdb\Model\Common\QueryParameter\QueryParameterInterface', $interfaces)) { @@ -78,10 +78,27 @@ protected function parseHeaders(array $headers = array()) return $headers; } + /** + * @param null|\Tmdb\Factory\FactoryInterface $factory + * @return $this + */ + public function setFactory($factory) + { + $this->factory = $factory; + return $this; + } + /** * Return the API Class * * @return ApiInterface */ abstract public function getApi(); -} \ No newline at end of file + + /** + * Return the Factory Class + * + * @return FactoryInterface + */ + abstract public function getFactory(); +} diff --git a/lib/Tmdb/Repository/ChangesRepository.php b/lib/Tmdb/Repository/ChangesRepository.php index d3c606e4..1577c72b 100644 --- a/lib/Tmdb/Repository/ChangesRepository.php +++ b/lib/Tmdb/Repository/ChangesRepository.php @@ -12,6 +12,7 @@ */ namespace Tmdb\Repository; +use Tmdb\Exception\NotImplementedException; use Tmdb\Factory\MovieFactory; use Tmdb\Factory\People\PeopleFactory; use Tmdb\Model\Collection\People; @@ -35,7 +36,7 @@ class ChangesRepository extends AbstractRepository { public function getMovieChanges(ChangesQuery $query, array $headers = array()) { $data = $this->getApi()->getMovieChanges($query->toArray(), $this->parseHeaders($headers)); - return MovieFactory::createCollection($data); + return $this->getMovieFactory()->createCollection($data); } /** @@ -55,7 +56,7 @@ public function getMovieChanges(ChangesQuery $query, array $headers = array()) { public function getPeopleChanges(ChangesQuery $query, array $headers = array()) { $data = $this->getApi()->getPersonChanges($query->toArray(), $this->parseHeaders($headers)); - return PeopleFactory::createCollection($data); + return $this->getPeopleFactory()->createCollection($data); } /** @@ -67,4 +68,30 @@ public function getApi() { return $this->getClient()->getChangesApi(); } -} \ No newline at end of file + + /** + * @return PeopleFactory + */ + public function getPeopleFactory() + { + return new PeopleFactory(); + } + + /** + * @return MovieFactory + */ + public function getMovieFactory() + { + return new MovieFactory(); + } + + /** + * Changes does not support a generic factory + * + * @throws NotImplementedException + * @return null|\Tmdb\Factory\FactoryInterface + */ + public function getFactory(){ + throw new NotImplementedException('Discover does not support a generic factory.'); + } +} diff --git a/lib/Tmdb/Repository/CollectionRepository.php b/lib/Tmdb/Repository/CollectionRepository.php index 9e469922..aede185d 100644 --- a/lib/Tmdb/Repository/CollectionRepository.php +++ b/lib/Tmdb/Repository/CollectionRepository.php @@ -41,7 +41,7 @@ public function load($id, array $parameters = array(), array $headers = array()) } $data = $this->getApi()->getCollection($id, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return CollectionFactory::create($data); + return $this->getFactory()->create($data); } /** @@ -54,6 +54,22 @@ public function getApi() return $this->getClient()->getCollectionsApi(); } + /** + * @return CollectionFactory + */ + public function getFactory() + { + return new CollectionFactory(); + } + + /** + * @return ImageFactory + */ + public function getImageFactory() + { + return new ImageFactory(); + } + /** * Get all of the images for a particular collection by collection id. * @@ -64,8 +80,8 @@ public function getApi() */ public function getImages($id, array $parameters = array(), array $headers = array()) { - return ImageFactory::createCollection( + return $this->getImageFactory()->createCollection( $this->getApi()->getImages($id, $parameters, $headers) ); } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Repository/CompanyRepository.php b/lib/Tmdb/Repository/CompanyRepository.php index fc063693..ab06c371 100644 --- a/lib/Tmdb/Repository/CompanyRepository.php +++ b/lib/Tmdb/Repository/CompanyRepository.php @@ -19,6 +19,7 @@ use Tmdb\Model\Movie; class CompanyRepository extends AbstractRepository { + /** * Load a company with the given identifier * @@ -30,10 +31,9 @@ class CompanyRepository extends AbstractRepository { public function load($id, array $parameters = array(), array $headers = array()) { $data = $this->getApi()->getCompany($id, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return CompanyFactory::create($data); + return $this->getFactory()->create($data); } - /** * Get the list of movies associated with a particular company. * @@ -59,6 +59,14 @@ public function getApi() return $this->getClient()->getCompaniesApi(); } + /** + * @return CompanyFactory + */ + public function getFactory() + { + return new CompanyFactory(); + } + /** * Create an collection of an array * @@ -78,4 +86,4 @@ private function createMovieCollection($data){ return $collection; } -} \ No newline at end of file +} diff --git a/lib/Tmdb/Repository/ConfigurationRepository.php b/lib/Tmdb/Repository/ConfigurationRepository.php index f08cd545..d4e388b4 100644 --- a/lib/Tmdb/Repository/ConfigurationRepository.php +++ b/lib/Tmdb/Repository/ConfigurationRepository.php @@ -26,7 +26,7 @@ class ConfigurationRepository extends AbstractRepository { public function load(array $headers = array()) { $data = $this->getApi()->getConfiguration($headers); - return ConfigurationFactory::create($data); + return $this->factory->create($data); } /** @@ -39,4 +39,11 @@ public function getApi() return $this->getClient()->getConfigurationApi(); } -} \ No newline at end of file + /** + * @return ConfigurationFactory + */ + public function getFactory() + { + return new ConfigurationFactory(); + } +} diff --git a/lib/Tmdb/Repository/DiscoverRepository.php b/lib/Tmdb/Repository/DiscoverRepository.php index e33d183d..afef904d 100644 --- a/lib/Tmdb/Repository/DiscoverRepository.php +++ b/lib/Tmdb/Repository/DiscoverRepository.php @@ -12,6 +12,7 @@ */ namespace Tmdb\Repository; +use Tmdb\Exception\NotImplementedException; use Tmdb\Exception\RuntimeException; use Tmdb\Factory\MovieFactory; use Tmdb\Factory\TvFactory; @@ -20,7 +21,27 @@ use Tmdb\Model\Query\Discover\DiscoverTvQuery; use Tmdb\Model\Tv; + class DiscoverRepository extends AbstractRepository { + /** + * @var MovieFactory + */ + private $movieFactory; + + /** + * @var TvFactory + */ + private $tvFactory; + + /** + * Constructor + */ + public function __construct() + { + $this->movieFactory = new MovieFactory(); + $this->tvFactory = new TvFactory(); + } + /** * Discover movies by different types of data like average rating, number of votes, genres and certifications. * @@ -38,7 +59,7 @@ public function discoverMovies(DiscoverMoviesQuery $query, array $headers = arra $data = $this->getApi()->discoverMovies($query, $this->parseHeaders($headers)); - return MovieFactory::createCollection($data); + return $this->getMovieFactory()->createCollection($data); } /** @@ -51,7 +72,7 @@ public function discoverMovies(DiscoverMoviesQuery $query, array $headers = arra public function discoverTv(DiscoverTvQuery $query, array $headers = array()) { $data = $this->getApi()->discoverTv($query->toArray(), $this->parseHeaders($headers)); - return TvFactory::createCollection($data); + return $this->getTvFactory()->createCollection($data); } /** @@ -63,4 +84,50 @@ public function getApi() { return $this->getClient()->getDiscoverApi(); } -} \ No newline at end of file + + /** + * Discover currently does not offer an factory + * + * @throws NotImplementedException + * @return null|\Tmdb\Factory\FactoryInterface + */ + public function getFactory(){ + throw new NotImplementedException('Discover does not support a generic factory.'); + } + + /** + * @param \Tmdb\Factory\MovieFactory $movieFactory + * @return $this + */ + public function setMovieFactory($movieFactory) + { + $this->movieFactory = $movieFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\MovieFactory + */ + public function getMovieFactory() + { + return $this->movieFactory; + } + + /** + * @param \Tmdb\Factory\TvFactory $tvFactory + * @return $this + */ + public function setTvFactory($tvFactory) + { + $this->tvFactory = $tvFactory; + return $this; + } + + /** + * @return \Tmdb\Factory\TvFactory + */ + public function getTvFactory() + { + return $this->tvFactory; + } +} diff --git a/lib/Tmdb/Repository/FindRepository.php b/lib/Tmdb/Repository/FindRepository.php index 9b20c4ea..156dd2d5 100644 --- a/lib/Tmdb/Repository/FindRepository.php +++ b/lib/Tmdb/Repository/FindRepository.php @@ -17,4 +17,8 @@ class FindRepository extends AbstractRepository { public function getApi() { } + + public function getFactory() + { + } } \ No newline at end of file diff --git a/lib/Tmdb/Repository/GenreRepository.php b/lib/Tmdb/Repository/GenreRepository.php index c2ba09d8..fbf12aad 100644 --- a/lib/Tmdb/Repository/GenreRepository.php +++ b/lib/Tmdb/Repository/GenreRepository.php @@ -34,7 +34,7 @@ public function load($id, array $parameters = array(), array $headers = array()) * * @param array $parameters * @param array $headers - * @return Genre[] + * @return GenericCollection|Genre[] */ public function loadCollection(array $parameters = array(), array $headers = array()) { @@ -47,7 +47,7 @@ public function loadCollection(array $parameters = array(), array $headers = arr * Create an collection of an array * * @param $data - * @return Genre[] + * @return GenericCollection|Genre[] */ private function createCollection($data){ $collection = new GenericCollection(); @@ -57,7 +57,7 @@ private function createCollection($data){ } foreach($data as $item) { - $collection->add(null, GenreFactory::create($item)); + $collection->add(null, $this->getFactory()->create($item)); } return $collection; @@ -72,4 +72,12 @@ public function getApi() { return $this->getClient()->getGenresApi(); } + + /** + * @return GenreFactory + */ + public function getFactory() + { + return new GenreFactory(); + } } \ No newline at end of file diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index 395718f6..869b1449 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -53,7 +53,7 @@ public function load($id, array $parameters = array(), array $headers = array()) $data = $this->getApi()->getMovie($id, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return MovieFactory::create($data); + return $this->getFactory()->create($data); } /** @@ -66,6 +66,16 @@ public function getApi() return $this->getClient()->getMoviesApi(); } + /** + * Return the Movie Factory + * + * @return MovieFactory + */ + public function getFactory() + { + return new MovieFactory(); + } + /** * Get the latest movie. * @@ -74,7 +84,7 @@ public function getApi() */ public function getLatest(array $options = array()) { - return MovieFactory::create( + return $this->getFactory()->create( $this->getApi()->getLatest($options) ); } @@ -145,10 +155,9 @@ private function createCollection($data){ } foreach($data as $item) { - $collection->add(null, MovieFactory::create($item)); + $collection->add(null, $this->getFactory()->create($item)); } return $collection; } - -} \ No newline at end of file +} diff --git a/lib/Tmdb/Repository/PeopleRepository.php b/lib/Tmdb/Repository/PeopleRepository.php index 411af14e..0d84b931 100644 --- a/lib/Tmdb/Repository/PeopleRepository.php +++ b/lib/Tmdb/Repository/PeopleRepository.php @@ -12,6 +12,7 @@ */ namespace Tmdb\Repository; +use Tmdb\Api\People; use Tmdb\Factory\People\PeopleFactory; use Tmdb\Model\Person; use Tmdb\Model\Person\QueryParameter\AppendToResponse; @@ -42,7 +43,7 @@ public function load($id, array $parameters = array(), array $headers = array()) $data = $this->getApi()->getPerson($id, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return PeopleFactory::create($data); + return $this->getFactory()->create($data); } /** @@ -54,4 +55,12 @@ public function getApi() { return $this->getClient()->getPeopleApi(); } -} \ No newline at end of file + + /** + * @return PeopleFactory + */ + public function getFactory() + { + return new PeopleFactory(); + } +} diff --git a/lib/Tmdb/Repository/TvEpisodeRepository.php b/lib/Tmdb/Repository/TvEpisodeRepository.php index ee31108d..278f8a3b 100644 --- a/lib/Tmdb/Repository/TvEpisodeRepository.php +++ b/lib/Tmdb/Repository/TvEpisodeRepository.php @@ -65,7 +65,7 @@ public function load($tvShow, $season, $episode, array $parameters = array(), ar $data = $this->getApi()->getEpisode($tvShow, $season, $episode, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return TvEpisodeFactory::create($data); + return $this->getFactory()->create($data); } /** @@ -78,6 +78,14 @@ public function getApi() return $this->getClient()->getTvEpisodeApi(); } + /** + * @return TvEpisodeFactory + */ + public function getFactory() + { + return new TvEpisodeFactory(); + } + /** * Create an collection of an array * @@ -92,10 +100,9 @@ private function createCollection($data){ } foreach($data as $item) { - $collection->add(null, TvEpisodeFactory::create($item)); + $collection->add(null, $this->getFactory()->create($item)); } return $collection; } - -} \ No newline at end of file +} diff --git a/lib/Tmdb/Repository/TvRepository.php b/lib/Tmdb/Repository/TvRepository.php index 03439903..88126c4e 100644 --- a/lib/Tmdb/Repository/TvRepository.php +++ b/lib/Tmdb/Repository/TvRepository.php @@ -45,22 +45,7 @@ public function load($id, array $parameters = array(), array $headers = array()) $data = $this->getApi()->getTvshow($id, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return TvFactory::create($data); - } - - /** - * If you obtained an tv model which is not completely hydrated, you can use this function. - * - * @todo store the previous given parameters so the same conditions apply to a refresh, and merge the new set - * - * @param Tv $tv - * @param array $parameters - * @param array $headers - * @return null|\Tmdb\Model\AbstractModel - */ - public function refresh(Tv $tv, array $parameters = array(), array $headers = array()) - { - return $this->load($tv->getId(), $parameters, $headers); + return $this->getFactory()->create($data); } /** @@ -73,6 +58,13 @@ public function getApi() return $this->getClient()->getTvApi(); } + /** + * @return TvFactory + */ + public function getFactory() + { + return new TvFactory(); + } /** * Get the list of popular tvs on The Tv Database. This list refreshes every day. @@ -121,5 +113,4 @@ private function createCollection($data){ return $collection; } - -} \ No newline at end of file +} diff --git a/lib/Tmdb/Repository/TvSeasonRepository.php b/lib/Tmdb/Repository/TvSeasonRepository.php index 036a8747..359267eb 100644 --- a/lib/Tmdb/Repository/TvSeasonRepository.php +++ b/lib/Tmdb/Repository/TvSeasonRepository.php @@ -61,7 +61,7 @@ public function load($tvShow, $season, array $parameters = array(), array $heade $data = $this->getApi()->getSeason($tvShow, $season, $this->parseQueryParameters($parameters), $this->parseHeaders($headers)); - return TvSeasonFactory::create($data); + return $this->getFactory()->create($data); } /** @@ -74,6 +74,14 @@ public function getApi() return $this->getClient()->getTvSeasonApi(); } + /** + * @return TvSeasonFactory + */ + public function getFactory() + { + return new TvSeasonFactory(); + } + /** * Create an collection of an array * @@ -90,10 +98,9 @@ private function createCollection($data){ } foreach($data as $item) { - $collection->add(null, TvSeasonFactory::create($item)); + $collection->add(null, $this->getFactory()->create($item)); } return $collection; } - -} \ No newline at end of file +}