This repository has been archived by the owner on Jan 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
116 parents
6903d5f
+
cdad453
+
9db7df2
+
9bb9d9a
+
41b2dc0
+
5295cf8
+
27f9b6d
+
b273434
+
5b111b1
+
ee4a022
+
5130ae3
+
aff706f
+
f73a53d
+
d4a913a
+
b29f072
+
651a727
+
430d154
+
1839a34
+
0d5d64e
+
5cde84e
+
dc8ee4d
+
85d900a
+
887c312
+
9c949ae
+
0fc5669
+
e29d393
+
e25c698
+
ca5bdbb
+
18e54b8
+
73cc878
+
a514416
+
778823f
+
fff1957
+
35beb1b
+
ecb2a1a
+
67a31fa
+
c0ee14a
+
7273469
+
62e104e
+
293b0d0
+
c59092f
+
b3e8431
+
615f1cb
+
198a3b9
+
1630584
+
7627438
+
84a5bf6
+
ad86c9d
+
a84a8ca
+
4198a62
+
e822871
+
431867b
+
200dbe0
+
7277f0b
+
2408da8
+
2413f67
+
4731ffc
+
d177c96
+
b27c24b
+
ec13154
+
8e7b30c
+
6c4437a
+
2a2ed86
+
366d656
+
5f3d390
+
666d47b
+
dd0e03b
+
1a5602a
+
c01cd9c
+
6849552
+
8b79ca2
+
e84f0d1
+
9f1b34e
+
c453b3e
+
3d74be7
+
999502e
+
a46d96f
+
fba87c0
+
ce665da
+
ef2dd94
+
a66c89a
+
b997097
+
da0e97d
+
1302f0b
+
a1bbaa9
+
6bfa503
+
b4b9ece
+
9b1ac2d
+
30880b8
+
e308f6d
+
8da89be
+
199755f
+
2310cd0
+
4e7316f
+
1d6c476
+
c2593db
+
c6ff37b
+
5344902
+
a35c230
+
39052a9
+
8152f2f
+
e0f8777
+
d1f068b
+
006fb88
+
6261074
+
8bf6181
+
33e79d4
+
9c75f77
+
261c157
+
94f1dd4
+
a56d05b
+
37045c3
+
7400cfb
+
8794fff
+
0877be7
+
ae538e5
commit c2442b4
Showing
8 changed files
with
462 additions
and
10 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
* @package Zend_Paginator | ||
*/ | ||
|
||
namespace Zend\Paginator\Adapter\Service; | ||
|
||
use Zend\ServiceManager\FactoryInterface; | ||
use Zend\ServiceManager\ServiceLocatorInterface; | ||
|
||
/** | ||
* @category Zend | ||
* @package Paginator | ||
*/ | ||
class DbSelectFactory implements FactoryInterface | ||
{ | ||
/** | ||
* Adapter options | ||
* @var array | ||
*/ | ||
protected $creationOptions; | ||
|
||
/** | ||
* Construct with adapter options | ||
* @param array $creationOptions | ||
*/ | ||
public function __construct(array $creationOptions) | ||
{ | ||
$this->creationOptions = $creationOptions; | ||
} | ||
|
||
/** | ||
* @param ServiceLocatorInterface $serviceLocator | ||
* @return \Zend\Navigation\Navigation | ||
*/ | ||
public function createService(ServiceLocatorInterface $serviceLocator) | ||
{ | ||
$class = new \ReflectionClass('Zend\Paginator\Adapter\DbSelect'); | ||
return $class->newInstanceArgs($this->creationOptions); | ||
} | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
* @package Zend_Paginator | ||
*/ | ||
|
||
namespace Zend\Paginator; | ||
|
||
use Zend\ServiceManager\AbstractPluginManager; | ||
|
||
/** | ||
* Plugin manager implementation for paginator adapters. | ||
* | ||
* Enforces that adapters retrieved are instances of | ||
* Adapter\AdapterInterface. Additionally, it registers a number of default | ||
* adapters available. | ||
* | ||
* @category Zend | ||
* @package Zend_Paginator | ||
*/ | ||
class AdapterPluginManager extends AbstractPluginManager | ||
{ | ||
/** | ||
* Default set of adapters | ||
* | ||
* @var array | ||
*/ | ||
protected $invokableClasses = array( | ||
'array' => 'Zend\Paginator\Adapter\ArrayAdapter', | ||
'iterator' => 'Zend\Paginator\Adapter\Iterator', | ||
'null' => 'Zend\Paginator\Adapter\Null', | ||
); | ||
|
||
/** | ||
* Default set of adapter factories | ||
* | ||
* @var array | ||
*/ | ||
protected $factories = array( | ||
'dbselect' => 'Zend\Paginator\Adapter\Service\DbSelectFactory' | ||
); | ||
|
||
/** | ||
* Attempt to create an instance via a factory | ||
* | ||
* @param string $canonicalName | ||
* @param string $requestedName | ||
* @return mixed | ||
* @throws Exception\ServiceNotCreatedException If factory is not callable | ||
*/ | ||
protected function createFromFactory($canonicalName, $requestedName) | ||
{ | ||
$factory = $this->factories[$canonicalName]; | ||
if (is_string($factory) && class_exists($factory, true)) { | ||
$factory = new $factory($this->creationOptions); | ||
$this->factories[$canonicalName] = $factory; | ||
} | ||
return parent::createFromFactory($canonicalName, $requestedName); | ||
} | ||
|
||
/** | ||
* Validate the plugin | ||
* | ||
* Checks that the adapter loaded is an instance | ||
* of Adapter\AdapterInterface. | ||
* | ||
* @param mixed $plugin | ||
* @return void | ||
* @throws Exception\RuntimeException if invalid | ||
*/ | ||
public function validatePlugin($plugin) | ||
{ | ||
if ($plugin instanceof Adapter\AdapterInterface) { | ||
// we're okay | ||
return; | ||
} | ||
|
||
throw new Exception\RuntimeException(sprintf( | ||
'Plugin of type %s is invalid; must implement %s\Adapter\AdapterInterface', | ||
(is_object($plugin) ? get_class($plugin) : gettype($plugin)), | ||
__NAMESPACE__ | ||
)); | ||
} | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
* @package Zend_Paginator | ||
*/ | ||
|
||
namespace Zend\Paginator; | ||
|
||
use Traversable; | ||
use Zend\Paginator\Adapter\AdapterInterface; | ||
use Zend\Stdlib\ArrayUtils; | ||
|
||
/** | ||
* @category Zend | ||
* @package Zend_Paginator | ||
*/ | ||
abstract class Factory | ||
{ | ||
/** | ||
* Adapter plugin manager | ||
* @var AdapterPluginManager | ||
*/ | ||
protected static $adapters; | ||
|
||
/** | ||
* Create adapter from items if necessary, and return paginator | ||
* @param Traversable/array $items | ||
* @return Paginator | ||
*/ | ||
protected static function createAdapterFromItems($items) | ||
{ | ||
if ($items instanceof Traversable) { | ||
$items = ArrayUtils::iteratorToArray($items); | ||
} | ||
if (!is_array($items)) { | ||
throw new Exception\InvalidArgumentException( | ||
'The factory needs an associative array ' | ||
. 'or a Traversable object as an argument when ' | ||
. "it's used with one parameter" | ||
); | ||
} | ||
if (!isset($items['adapter']) && !isset($items['items'])) { | ||
throw new Exception\InvalidArgumentException( | ||
'The factory needs an associative array ' | ||
. 'or a Traversable object with keys ' | ||
. '"adapter" and "items"' | ||
); | ||
} | ||
$adapter = $items['adapter']; | ||
$items = $items['items']; | ||
|
||
$paginator = static::getAdapterFromManager($items, $adapter); | ||
return $paginator; | ||
} | ||
|
||
/** | ||
* Get adapter from manager if necessary, and return paginator | ||
* @param mixed $items | ||
* @param mixed $adapter | ||
* @return Paginator | ||
*/ | ||
protected static function getAdapterFromManager($items, $adapter) | ||
{ | ||
if ($adapter instanceof AdapterInterface || $adapter instanceof AdapterAggregateInterface) { | ||
return new Paginator($adapter); | ||
} | ||
$adapter = static::getAdapterPluginManager()->get($adapter, $items); | ||
return new Paginator($adapter); | ||
} | ||
|
||
/** | ||
* Create paginator with items and adapter | ||
* @param mixed $items | ||
* @param mixed $adapter | ||
* @return Paginator | ||
*/ | ||
public static function factory($items, $adapter = null) | ||
{ | ||
if (null === $adapter) { | ||
$paginator = static::createAdapterFromItems($items); | ||
return $paginator; | ||
} | ||
$paginator = static::getAdapterFromManager($items, $adapter); | ||
return $paginator; | ||
} | ||
|
||
/** | ||
* Change the adapter plugin manager | ||
* | ||
* @param AdapterPluginManager $adapters | ||
* @return void | ||
*/ | ||
public static function setAdapterPluginManager(AdapterPluginManager $adapters) | ||
{ | ||
static::$adapters = $adapters; | ||
} | ||
|
||
/** | ||
* Get the adapter plugin manager | ||
* | ||
* @return AdapterPluginManager | ||
*/ | ||
public static function getAdapterPluginManager() | ||
{ | ||
if (static::$adapters === null) { | ||
static::$adapters = new AdapterPluginManager(); | ||
} | ||
return static::$adapters; | ||
} | ||
} |
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?php | ||
/** | ||
* Zend Framework (http://framework.zend.com/) | ||
* | ||
* @link http://github.com/zendframework/zf2 for the canonical source repository | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
* @package Zend_Paginator | ||
*/ | ||
|
||
namespace ZendTest\Paginator; | ||
|
||
use Zend\Paginator\AdapterPluginManager; | ||
use Zend\ServiceManager\ServiceManager; | ||
use Zend\Mvc\Service\ServiceManagerConfig; | ||
|
||
/** | ||
* @category Zend | ||
* @package Zend_Paginator | ||
* @subpackage UnitTests | ||
* @group Zend_Paginator | ||
*/ | ||
class AdapterPluginManagerTest extends \PHPUnit_Framework_TestCase | ||
{ | ||
protected $adapaterPluginManager; | ||
|
||
/** @var \PHPUnit_Framework_MockObject_MockObject */ | ||
protected $mockSelect; | ||
|
||
protected $mockAdapter; | ||
|
||
protected function setUp() | ||
{ | ||
$this->adapaterPluginManager = new AdapterPluginManager(); | ||
$this->mockSelect = $this->getMock('Zend\Db\Sql\Select'); | ||
|
||
$mockStatement = $this->getMock('Zend\Db\Adapter\Driver\StatementInterface'); | ||
$mockResult = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface'); | ||
|
||
$mockDriver = $this->getMock('Zend\Db\Adapter\Driver\DriverInterface'); | ||
$mockDriver->expects($this->any())->method('createStatement')->will($this->returnValue($mockStatement)); | ||
$mockStatement->expects($this->any())->method('execute')->will($this->returnValue($mockResult)); | ||
$mockPlatform = $this->getMock('Zend\Db\Adapter\Platform\PlatformInterface'); | ||
$mockPlatform->expects($this->any())->method('getName')->will($this->returnValue('platform')); | ||
|
||
$this->mockAdapter = $this->getMockForAbstractClass( | ||
'Zend\Db\Adapter\Adapter', | ||
array($mockDriver, $mockPlatform) | ||
); | ||
} | ||
|
||
public function testCanRetrieveAdapterPlugin() | ||
{ | ||
$plugin = $this->adapaterPluginManager->get('array', array(1, 2, 3)); | ||
$this->assertInstanceOf('Zend\Paginator\Adapter\ArrayAdapter', $plugin); | ||
$plugin = $this->adapaterPluginManager->get('iterator', new \ArrayIterator(range(1, 101))); | ||
$this->assertInstanceOf('Zend\Paginator\Adapter\Iterator', $plugin); | ||
$plugin = $this->adapaterPluginManager->get('dbselect', array($this->mockSelect, $this->mockAdapter)); | ||
$this->assertInstanceOf('Zend\Paginator\Adapter\DbSelect', $plugin); | ||
$plugin = $this->adapaterPluginManager->get('null', 101); | ||
$this->assertInstanceOf('Zend\Paginator\Adapter\Null', $plugin); | ||
} | ||
|
||
public function testCanRetrievePluginManagerWithServiceManager() | ||
{ | ||
$sm = $this->serviceManager = new ServiceManager( | ||
new ServiceManagerConfig(array( | ||
'factories' => array( | ||
'PaginatorPluginManager' => 'Zend\Mvc\Service\PaginatorPluginManagerFactory', | ||
), | ||
)) | ||
); | ||
$sm->setService('Config', array()); | ||
$adapterPluginManager = $sm->get('PaginatorPluginManager'); | ||
$this->assertInstanceOf('Zend\Paginator\AdapterPluginManager', $adapterPluginManager); | ||
} | ||
} |
Oops, something went wrong.