Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 5 additions & 10 deletions src/Annotation/Inject.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

namespace ObjectivePHP\ServicesFactory\Annotation;

use ObjectivePHP\ServicesFactory\ServiceReference;

/**
Expand Down Expand Up @@ -46,15 +47,13 @@ class Inject
public function getDependency($config = null)
{

if($this->param) {
if ($this->param) {
$type = 'param';
}
else {
} else {
$type = ($this->class || !$this->service) ? 'instance' : 'service';
}

switch($type)
{
switch ($type) {
case 'instance':
return $this->class;

Expand All @@ -63,10 +62,6 @@ public function getDependency($config = null)

case 'param':
return 'param.value';

}

}


}
}
85 changes: 40 additions & 45 deletions src/Builder/AbstractServiceBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace ObjectivePHP\ServicesFactory\Builder;


use ObjectivePHP\Config\ConfigReference;
use ObjectivePHP\Primitives\Collection\Collection;
use ObjectivePHP\ServicesFactory\ServicesFactory;
Expand All @@ -16,77 +15,73 @@
*
* @package ObjectivePHP\ServicesFactory\Builder
*/
abstract class AbstractServiceBuilder implements ServiceBuilderInterface, ServicesFactoryAwareInterface
{
abstract class AbstractServiceBuilder implements ServiceBuilderInterface, ServicesFactoryAwareInterface
{

use ServicesFactoryAwareTrait;
use ServicesFactoryAwareTrait;

/**
/**
* This property should be initialized in extended classes
*
* @var Collection
*/
protected $handledSpecs;
protected $handledSpecs;

/**
/**
* AbstractServiceBuilder constructor.
*/
public function __construct()
{
$this->handledSpecs = new Collection($this->handledSpecs);
}
public function __construct()
{
$this->handledSpecs = new Collection($this->handledSpecs);
}

/**
/**
* @param ServiceSpecsInterface $serviceDefinition
*
* @return bool
*/
public function doesHandle(ServiceSpecsInterface $serviceDefinition)
{
foreach ($this->getHandledSpecs() as $handledDefinition)
{
if ($serviceDefinition instanceof $handledDefinition)
{
return true;
}
public function doesHandle(ServiceSpecsInterface $serviceDefinition)
{
foreach ($this->getHandledSpecs() as $handledDefinition) {
if ($serviceDefinition instanceof $handledDefinition) {
return true;
}

return false;
}

/**
return false;
}

/**
* @return Collection
*/
public function getHandledSpecs()
{
return $this->handledSpecs;
}
public function getHandledSpecs()
{
return $this->handledSpecs;
}

/**
/**
* Substitute all references to services in a param set
*
* @param Collection $params
*
* @return Collection
*/
protected function substituteReferences(Collection $params)
{
$params->each(function (&$value)
{
if ($value instanceof ServiceReference)
{
$value = $this->getServicesFactory()->get($value->getId());
} else if($value instanceof ConfigReference) {
$value = $this->getServicesFactory()->get('config')->get($value->getId());
}
});
}
protected function substituteReferences(Collection $params)
{
$params->each(function (&$value) {
if ($value instanceof ServiceReference) {
$value = $this->getServicesFactory()->get($value->getId());
} elseif ($value instanceof ConfigReference) {
$value = $this->getServicesFactory()->get('config')->get($value->getId());
}
});
}

/**
/**
* @return ServicesFactory
*/
public function getServicesFactory()
{
return $this->servicesFactory;
}
public function getServicesFactory()
{
return $this->servicesFactory;
}
}
29 changes: 18 additions & 11 deletions src/Builder/ClassServiceBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,28 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $servic
{

// check compatibility with the service definition
if (!$this->doesHandle($serviceSpecs))
{
throw new Exception(sprintf('"%s" service definition is not handled by this builder.', get_class($serviceSpecs)), Exception::INCOMPATIBLE_SERVICE_DEFINITION);
if (!$this->doesHandle($serviceSpecs)) {
throw new Exception(
sprintf(
'"%s" service definition is not handled by this builder.',
get_class($serviceSpecs)
),
Exception::INCOMPATIBLE_SERVICE_DEFINITION
);
}

$serviceClassName = $serviceSpecs->getClass();


// check class existence
if(!class_exists($serviceClassName))
{
throw new Exception(sprintf('Unable to build service: class "%s" is unknown', $serviceClassName), Exception::INVALID_SERVICE_SPECS);
if (!class_exists($serviceClassName)) {
throw new Exception(
sprintf(
'Unable to build service: class "%s" is unknown',
$serviceClassName
),
Exception::INVALID_SERVICE_SPECS
);
}

// merge service defined and runtime params
Expand All @@ -52,10 +62,8 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $servic
$service = new $serviceClassName(...$constructorParams->values());

// call setters if any
if($setters = $serviceSpecs->getSetters())
{
foreach($setters as $setter => $setterParams)
{
if ($setters = $serviceSpecs->getSetters()) {
foreach ($setters as $setter => $setterParams) {
$instanceSetterParams = clone Collection::cast($setterParams);

$this->substituteReferences($instanceSetterParams);
Expand All @@ -66,5 +74,4 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $servic

return $service;
}

}
14 changes: 9 additions & 5 deletions src/Builder/DelegatedFactoryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $actual

// check compatibility with the service definition
if (!$this->doesHandle($serviceSpecs)) {
throw new Exception(sprintf('"%s" service definition is not handled by this builder.',
get_class($serviceSpecs)), Exception::INCOMPATIBLE_SERVICE_DEFINITION);
throw new Exception(sprintf(
'"%s" service definition is not handled by this builder.',
get_class($serviceSpecs)
), Exception::INCOMPATIBLE_SERVICE_DEFINITION);
}


Expand All @@ -46,8 +48,11 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $actual
}
$factory = $factory->getCallable();
} catch (InvokableException $e) {
throw new Exception(sprintf('Unable to build service: provided factory is not callable'),
Exception::INVALID_SERVICE_SPECS, $e);
throw new Exception(
sprintf('Unable to build service: provided factory is not callable'),
Exception::INVALID_SERVICE_SPECS,
$e
);
}

// merge service defined and runtime params
Expand All @@ -62,5 +67,4 @@ public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $actual

return $service;
}

}
13 changes: 8 additions & 5 deletions src/Builder/PrefabServiceBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace ObjectivePHP\ServicesFactory\Builder;


use ObjectivePHP\ServicesFactory\Exception\Exception;
use ObjectivePHP\ServicesFactory\Specs\PrefabServiceSpecs;
use ObjectivePHP\ServicesFactory\Specs\ServiceSpecsInterface;
Expand All @@ -28,12 +27,16 @@ class PrefabServiceBuilder extends AbstractServiceBuilder
public function build(ServiceSpecsInterface $serviceSpecs, $params = [], $serviceId = null)
{
// check compatibility with the service definition
if (!$this->doesHandle($serviceSpecs))
{
throw new Exception(sprintf('"%s" service spec is not handled by this builder.', get_class($serviceSpecs)), Exception::INCOMPATIBLE_SERVICE_DEFINITION);
if (!$this->doesHandle($serviceSpecs)) {
throw new Exception(
sprintf(
'"%s" service spec is not handled by this builder.',
get_class($serviceSpecs)
),
Exception::INCOMPATIBLE_SERVICE_DEFINITION
);
}

return $serviceSpecs->getInstance();
}

}
2 changes: 0 additions & 2 deletions src/Builder/ServiceBuilderInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace ObjectivePHP\ServicesFactory\Builder;


use ObjectivePHP\ServicesFactory\Specs\ServiceSpecsInterface;

interface ServiceBuilderInterface
Expand All @@ -26,5 +25,4 @@ public function doesHandle(ServiceSpecsInterface $serviceDefinition);
* @return mixed
*/
public function build(ServiceSpecsInterface $serviceSpecs, $params = null);

}
2 changes: 0 additions & 2 deletions src/Exception/Exception.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace ObjectivePHP\ServicesFactory\Exception;


use Interop\Container\Exception\ContainerException;

class Exception extends \Exception implements ContainerException
Expand All @@ -21,5 +20,4 @@ class Exception extends \Exception implements ContainerException
// dependencies handling
const DEPENDENCY_NOT_FOUND = 0x31;
const MISSING_DEPENDENCY_DEFINITION = 0x32;

}
10 changes: 4 additions & 6 deletions src/Exception/ServiceNotFoundException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@


namespace ObjectivePHP\ServicesFactory\Exception;



class ServiceNotFoundException extends Exception
{
const UNREGISTERED_SERVICE_REFERENCE = 0x20;
}
class ServiceNotFoundException extends Exception
{
const UNREGISTERED_SERVICE_REFERENCE = 0x20;
}
2 changes: 0 additions & 2 deletions src/ServiceReference.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace ObjectivePHP\ServicesFactory;


class ServiceReference
{

Expand All @@ -28,5 +27,4 @@ public function __toString()
{
return (string) $this->id;
}

}
Loading