Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merge branch 'master' into rfc/escaper
Browse files Browse the repository at this point in the history
  • Loading branch information
Show file tree
Hide file tree
Showing 73 changed files with 679 additions and 287 deletions.
50 changes: 37 additions & 13 deletions src/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Zend\Di;

use Traversable;
use Zend\Stdlib\ArrayUtils;

class Configuration
{
Expand All @@ -12,21 +13,22 @@ class Configuration
* @var Zend\Di\DependencyInjector
*/
protected $di = null;

public function __construct($data)

/**
* @param array|Traversable $options
*/
public function __construct($options)
{
if ($data instanceof Traversable) {
if (method_exists($data, 'toArray')) {
$data = $data->toArray();
} else {
$data = iterator_to_array($data, true);
}
} elseif (!is_array($data)) {
if ($options instanceof Traversable) {
$options = ArrayUtils::iteratorToArray($options);
}

if (!is_array($options)) {
throw new Exception\InvalidArgumentException(
'Configuration data must be of type Zend\Config\Config or an array'
'Configuration data must be of type Traversable or an array'
);
}
$this->data = $data;
$this->data = $options;
}

public function configure(Di $di)
Expand All @@ -46,10 +48,28 @@ public function configureDefinition(Di $di, $definition)
foreach ($definition as $definitionType => $definitionData) {
switch ($definitionType) {
case 'compiler':
// @todo
foreach ($definitionData as $filename) {
if (is_readable($filename)) {
$di->definitions()->addDefinition(new \Zend\Di\Definition\ArrayDefinition(include $filename), false);
}
}
break;
case 'runtime':
// @todo
if (isset($definitionData['enabled']) && !$definitionData['enabled']) {
// Remove runtime from definition list if not enabled
$definitions = array();
foreach ($di->definitions() as $definition) {
if (!$definition instanceof \Zend\Di\Definition\RuntimeDefinition) {
$definitions[] = $definition;
}
}
$definitions = new DefinitionList($definitions);
$di->setDefinitionList($definitions);
} elseif (isset($definitionData['use_annotations']) && $definitionData['use_annotations']) {
$di->definitions()->getDefinitionByType('\Zend\Di\Definition\RuntimeDefinition')
->getIntrospectionStrategy()
->setUseAnnotations(true);
}
break;
case 'class':
foreach ($definitionData as $className => $classData) {
Expand Down Expand Up @@ -137,6 +157,10 @@ public function configureInstance(Di $di, $instanceData)
case 'injection':
$im->setInjections($target, $v);
break;
case 'shared':
case 'share':
$im->setShared($target, $v);
break;
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/Definition/Annotation/Inject.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Zend\Di\Definition\Annotation;

use Zend\Code\Annotation\Annotation;
use Zend\Code\Annotation\AnnotationInterface;

class Inject implements Annotation
class Inject implements AnnotationInterface
{

protected $content = null;
Expand All @@ -13,4 +13,4 @@ public function initialize($content)
{
$this->content = $content;
}
}
}
6 changes: 3 additions & 3 deletions src/Definition/Annotation/Instantiator.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Zend\Di\Definition\Annotation;

use Zend\Code\Annotation\Annotation;
use Zend\Code\Annotation\AnnotationInterface;

class Instantiator implements Annotation
class Instantiator implements AnnotationInterface
{

protected $content = null;
Expand All @@ -13,4 +13,4 @@ public function initialize($content)
{
$this->content = $content;
}
}
}
2 changes: 1 addition & 1 deletion src/Definition/ArrayDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Zend\Di\Definition;

class ArrayDefinition implements Definition
class ArrayDefinition implements DefinitionInterface
{

protected $dataArray = array();
Expand Down
1 change: 1 addition & 0 deletions src/Definition/Builder/PhpClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class PhpClass
protected $name = null;
protected $instantiator = '__construct';
protected $injectionMethods = array();
protected $superTypes = array();

public function setName($name)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Definition/BuilderDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Zend\Di\Exception;

class BuilderDefinition implements Definition
class BuilderDefinition implements DefinitionInterface
{
protected $defaultClassBuilder = 'Zend\Di\Definition\Builder\PhpClass';
protected $classes = array();
Expand Down
10 changes: 8 additions & 2 deletions src/Definition/ClassDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Zend\Di\Definition;

class ClassDefinition implements Definition, PartialMarker
class ClassDefinition implements DefinitionInterface, PartialMarker
{

protected $class = null;
Expand All @@ -20,11 +20,13 @@ public function __construct($class)
public function setInstantiator($instantiator)
{
$this->instantiator = $instantiator;
return $this;
}

public function setSupertypes(array $supertypes)
{
$this->supertypes = $supertypes;
return $this;
}

public function addMethod($method, $isRequired = null)
Expand All @@ -33,6 +35,8 @@ public function addMethod($method, $isRequired = null)
$isRequired = ($method === '__construct') ? true : false;
}
$this->methods[$method] = (bool) $isRequired;

return $this;
}

/**
Expand All @@ -57,6 +61,8 @@ public function addMethodParameter($method, $parameterName, array $parameterInfo
$this->methodParameters[$method][$fqName] = array(
$parameterName, $type, $required
);

return $this;
}

/**
Expand Down Expand Up @@ -160,4 +166,4 @@ public function getMethodParameters($class, $method)
}
return null;
}
}
}
18 changes: 16 additions & 2 deletions src/Definition/CompilerDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
use Zend\Code\Scanner\DerivedClassScanner,
Zend\Code\Scanner\AggregateDirectoryScanner,
Zend\Code\Scanner\DirectoryScanner,
Zend\Code\Scanner\FileScanner,

Zend\Di\Definition\Annotation,
Zend\Code\Annotation\AnnotationManager,
Zend\Code\Reflection,
Zend\Code\Annotation\AnnotationCollection;

class CompilerDefinition implements Definition
class CompilerDefinition implements DefinitionInterface
{
protected $isCompiled = false;

Expand Down Expand Up @@ -107,6 +108,19 @@ protected function processClass($class)
}
}

$rTarget = $rClass;
$supertypes = array();
do {
$supertypes = array_merge($supertypes, $rTarget->getInterfaceNames());
if (!($rTargetParent = $rTarget->getParentClass())) {
break;
}
$supertypes[] = $rTargetParent->getName();
$rTarget = $rTargetParent;
} while (true);

$def['supertypes'] = $supertypes;

if ($def['instantiator'] == null) {
if ($rClass->isInstantiable()) {
$def['instantiator'] = '__construct';
Expand Down Expand Up @@ -395,7 +409,7 @@ public function hasClass($class)
*/
public function getClassSupertypes($class)
{
if (!array_key_exists($class, $this->classes[$class])) {
if (!array_key_exists($class, $this->classes)) {
$this->processClass($class);
}
return $this->classes[$class]['supertypes'];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Zend\Di\Definition;

interface Definition
interface DefinitionInterface
{
/**
* @abstract
Expand Down
2 changes: 1 addition & 1 deletion src/Definition/PartialMarker.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
interface PartialMarker
{

}
}
4 changes: 2 additions & 2 deletions src/Definition/RuntimeDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
Zend\Code\Annotation\AnnotationCollection,
Zend\Code\Reflection;

class RuntimeDefinition implements Definition
class RuntimeDefinition implements DefinitionInterface
{

/**
Expand Down Expand Up @@ -105,7 +105,7 @@ public function hasClass($class)
*/
public function getClassSupertypes($class)
{
if (!array_key_exists($class, $this->classes[$class])) {
if (!array_key_exists($class, $this->classes)) {
$this->processClass($class);
}
return $this->classes[$class]['supertypes'];
Expand Down
24 changes: 12 additions & 12 deletions src/DefinitionList.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use SplDoublyLinkedList;

class DefinitionList extends SplDoublyLinkedList implements Definition\Definition
class DefinitionList extends SplDoublyLinkedList implements Definition\DefinitionInterface
{

public function __construct($definitions)
Expand All @@ -17,7 +17,7 @@ public function __construct($definitions)
}
}

public function addDefinition(Definition\Definition $definition, $addToBackOfList = true)
public function addDefinition(Definition\DefinitionInterface $definition, $addToBackOfList = true)
{
if ($addToBackOfList) {
$this->push($definition);
Expand Down Expand Up @@ -57,7 +57,7 @@ public function getDefinitionByType($type)

public function getDefinitionForClass($class)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
return $definition;
Expand All @@ -75,7 +75,7 @@ public function forClass($class)
public function getClasses()
{
$classes = array();
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
$classes = array_merge($classes, $definition->getClasses());
}
Expand All @@ -84,7 +84,7 @@ public function getClasses()

public function hasClass($class)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
return true;
Expand All @@ -96,7 +96,7 @@ public function hasClass($class)
public function getClassSupertypes($class)
{
$supertypes = array();
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
$supertypes = array_merge($supertypes, $definition->getClassSupertypes($class));
}
Expand All @@ -106,7 +106,7 @@ public function getClassSupertypes($class)

public function getInstantiator($class)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
$value = $definition->getInstantiator($class);
Expand All @@ -122,7 +122,7 @@ public function getInstantiator($class)

public function hasMethods($class)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
if ($definition->hasMethods($class) === false && $definition instanceof Definition\PartialMarker) {
Expand All @@ -137,7 +137,7 @@ public function hasMethods($class)

public function hasMethod($class, $method)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
if ($definition->hasMethods($class) === false && $definition instanceof Definition\PartialMarker) {
Expand All @@ -152,7 +152,7 @@ public function hasMethod($class, $method)

public function getMethods($class)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
$methods = array();
foreach ($this as $definition) {
if ($definition->hasClass($class)) {
Expand All @@ -174,7 +174,7 @@ public function hasMethodParameters($class, $method)

public function getMethodParameters($class, $method)
{
/** @var $definition Definition\Definition */
/** @var $definition Definition\DefinitionInterface */
foreach ($this as $definition) {
if ($definition->hasClass($class) && $definition->hasMethod($class, $method) && $definition->hasMethodParameters($class, $method)) {
return $definition->getMethodParameters($class, $method);
Expand All @@ -183,4 +183,4 @@ public function getMethodParameters($class, $method)
return array();
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Zend\Di;

interface DependencyInjection extends Locator
interface DependencyInjectionInterface extends LocatorInterface
{
/**
* Retrieve a new instance of a class
Expand Down

0 comments on commit ed60259

Please sign in to comment.