Last active
August 29, 2015 14:16
-
-
Save mlebkowski/9cb952dbf0936de340bb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Metricso\Fetcher\ObjectProcessor ; | |
use Generator ; | |
use Metricso\Model\Fb\AppUser ; | |
use Metricso\Model\Fb\FbPage ; | |
use Metricso\Model\Fb\FbPageFeedQuery ; | |
class PageProcessor extends AbstractObjectProcessor implements ObjectProcessorInterface, UsingAlternateTokensInterface { | |
private $queryFactory ; | |
private $tokenSource ; | |
private $sessionFactory ; | |
public function __construct(\Closure $fetcher, \Closure $apiResolverFactory, FbPageFeedQuery $query) { | |
$this->queryFactory = function () use ($query) { | |
return clone $query ;}; | |
parent::__construct($fetcher, $apiResolverFactory) ;} | |
public function setSessionFactory(callable $sessionFactory) { | |
$this->sessionFactory = function (AppUser $user) use ($sessionFactory) { | |
return call_user_func($sessionFactory, $user, true) ;}; | |
return $this ;} | |
protected function doProcessObject(ProcessableObjectInterface $page, \Closure $callback) { | |
if (false === $page instanceof FbPage) { | |
throw new \InvalidArgumentException(sprintf('Page must be of type "%s", "%s" given' , | |
FbPage::class, get_class($page) | |
)) ;} | |
$this->getPageFeedQuery()->filterByFbPage($page)->delete() ; | |
try { | |
$callback($page) ;} | |
catch (\Exception $e) { | |
$page->setStatus(FbPage::STATUS_ERROR)->save() ; | |
throw new ProcessingException(['page_id' => $page->getId(), 'page_name' => $page->getName()], $e) ;} | |
$page->setStatus(FbPage::STATUS_COMPLETE)->save() ;} | |
private function getPageFeedQuery() { | |
return call_user_func($this->queryFactory) ;} | |
public function setAdditionalTokensSource(Generator $source) { | |
$this->tokenSource = $source ;} | |
public function getNewFacebookSession($wasPreviousThrottled = true) { | |
if (null === $this->tokenSource || false === $this->tokenSource->valid()) { | |
return null ;} | |
if (null === $this->sessionFactory) { | |
throw new \RuntimeException('I need a SessionFactory to create new facebook sesisons based on AppUser') ;} | |
$this->tokenSource->send($wasPreviousThrottled) ; | |
$user = $this->tokenSource->current() ; | |
if (null === $user) { | |
return null ;} | |
return call_user_func($this->sessionFactory, $user) ;}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment