Skip to content

Commit

Permalink
Refactoring fetching of repositories through service to improve perfo…
Browse files Browse the repository at this point in the history
…rmance
  • Loading branch information
Hounddog committed Oct 23, 2012
1 parent e4da3dc commit e4fd292
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 38 deletions.
72 changes: 72 additions & 0 deletions module/Application/src/Application/Service/Repository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace Application\Service;

use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\ServiceManager\ServiceManager;

class Repository implements ServiceManagerAwareInterface
{
protected $serviceManager;

protected $repository;

/**
* Get All Repositories from github for authenticated user
* @param string $type
* @return array
*/
public function getAllRepository($type)
{
if(!isset($this->repository[$type])) {
$sm = $this->getServiceManager();
$api = $sm->get('edpgithub_api_factory');
$service = $api->getService('Repo');

$params['per_page'] = 100;
$params['page'] = 1;
$this->repositories[$type] = $service->listRepositories(null, $type, $params);
if($api->getNext() && $api->getNext() != $api->getCurrent()) {
$params['page'] = $api->getNext();
$this->getRepositoriesRecursive($this->repositories[$type], $params);
}
}
return $this->repositories[$type];
}

/**
* Recursively fetch all pages for Repositories
* @param array $repos
* @param string $params
*/
protected function getRepositoriesRecursive(&$repos, $params) {
$sm = $this->getServiceManager();
$api = $sm->get('edpgithub_api_factory');
$service = $api->getService('Repo');

$repos = array_merge($repos, $service->listRepositories(null, 'owner', $params));
if($api->getNext() && $api->getNext() != $params['page']) {
$params['page'] = $api->getNext();
$this->getAllRepos($repos, $params);
}
}

/**
* Get Service Manager
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}

/**
* Set ServiceManager
* @param ServiceManager $serviceManager
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,10 @@ public function __invoke($options = null)

//limit modules to only user modules
if($user) {
$api = $sm->get('edpgithub_api_factory');
$service = $api->getService('Repo');
$modules = array();
$memberRepos = $service->listRepositories(null, 'member');
$ownerRepos = $service->listRepositories(null, 'owner');
$service = $service = $sm->get('application_service_repository');

$ownerRepos = $service->getAllRepository('owner');
$memberRepos = $service->getAllRepository('member');

foreach($ownerRepos as $key => $repo) {
if($repo->getFork()) {
Expand Down
3 changes: 3 additions & 0 deletions module/User/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public function getServiceConfig()
return $mapper;
},
),
'invokables' => array(
'application_service_repository' => 'Application\Service\Repository',
),
);
}

Expand Down
38 changes: 5 additions & 33 deletions module/User/src/User/View/Helper/UserRepositories.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,29 +30,17 @@ public function __invoke($options = array())
{
$sm = $this->getServiceManager();

//need to fetch top lvl ServiceManager
$sm = $sm->getServiceLocator();
$api = $sm->get('edpgithub_api_factory');
$service = $sm->get('application_service_repository');

$service = $api->getService('Repo');
$mapper = $sm->get('application_module_mapper');

$params['per_page'] = 100;
$params['page'] = 1;
$ownerRepos = $service->listRepositories(null, 'owner', $params);
if($api->getNext() && $api->getNext() != $api->getCurrent()) {
$params['page'] = $api->getNext();
$this->getAllRepos($ownerRepos, $params);
}
$ownerRepos = $service->getAllRepository('owner');
$memberRepos = $service->getAllRepository('member');

$memberRepos = $service->listRepositories(null, 'member', $params);
if($api->getNext() && $api->getNext() != $api->getCurrent()) {
$params['page'] = $api->getNext();
$this->getAllRepos($ownerRepos, $params);
}

$repositories = array_merge($ownerRepos, $memberRepos);

$mapper = $sm->get('application_module_mapper');

foreach($repositories as $key => $repo) {
if($repo->getFork()) {
unset($repositories[$key]);
Expand All @@ -67,22 +55,6 @@ public function __invoke($options = array())
return $repositories;
}

public function getAllRepos(&$repos, $params) {
$sm = $this->getServiceManager();

//need to fetch top lvl ServiceManager
$sm = $sm->getServiceLocator();
$api = $sm->get('edpgithub_api_factory');
$service = $api->getService('Repo');

$repos = array_merge($repos, $service->listRepositories(null, 'owner', $params));
if($api->getNext() && $api->getNext() != $params['page']) {
$params['page'] = $api->getNext();
$this->getAllRepos($repos, $params);
}

}

/**
* Retrieve service manager instance
*
Expand Down

0 comments on commit e4fd292

Please sign in to comment.