Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
87.50% covered (warning)
87.50%
7 / 8
CRAP
95.45% covered (success)
95.45%
21 / 22
SimpleFactory
0.00% covered (danger)
0.00%
0 / 1
87.50% covered (warning)
87.50%
7 / 8
12
95.45% covered (success)
95.45%
21 / 22
 __construct(\aae\di\DependencyResolverInterface $dependencyResolver = NULL)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 build()
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
 _constructorArgumentsGiven()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 _classIsNotDefined()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 _buildWithoutConstructorArguments()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 _buildWithConstructorArguments()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 buildWithArgsArray($className, $constructorArgs)
0.00% covered (danger)
0.00%
0 / 1
3.14
75.00% covered (warning)
75.00%
3 / 4
 buildWithResolvedDependencies($className, $overrides = array())
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
<?php
/**
 *
 */
namespace aae\std {
    /**
     * @author Axel Ancona Esselmann
     * @package aae\std
     */
    class SimpleFactory {
        private $_className = null, $_args = null, $_dependencyResolver;
        public function __construct(\aae\di\DependencyResolverInterface $dependencyResolver = NULL) {
            $this->_dependencyResolver = $dependencyResolver;
        }
        public function build() {
            $this->_args      = func_get_args();
            $this->_className = array_shift($this->_args);
            if ($this->_classIsNotDefined())
                throw new BuildException(sprintf("The class '%s' is not defined.", $this->_className), 211141513);
            return ($this->_constructorArgumentsGiven())
                ? $this->_buildWithConstructorArguments()
                : $this->_buildWithoutConstructorArguments();
        }
        private function _constructorArgumentsGiven() {
            return count($this->_args) > 0;
        }
        private function _classIsNotDefined() {
            return !class_exists($this->_className);
        }
        private function _buildWithoutConstructorArguments() {
            $className = $this->_className;
            return new $className();
        }
        private function _buildWithConstructorArguments() {
            $reflect  = new \ReflectionClass($this->_className);
            #if (!method_exists($reflect, "__construct")) {
            #    $this->_buildWithoutConstructorArguments();
            #}
            return $reflect->newInstanceArgs($this->_args);
        }
        public function buildWithArgsArray($className, $constructorArgs) {
            if (!is_string($className) || !is_array($constructorArgs)) {
                throw new \Exception(sprintf("Arguments have to be a string and an array, %s and %s given.", gettype($className), gettype($constructorArgs)), 227141322);
            }
            $arguments = array_merge(array($className), $constructorArgs);
            return call_user_func_array(array($this, "build"), $arguments);
        }
        public function buildWithResolvedDependencies($className, $overrides = array()) {
            $dependencies = $this->_dependencyResolver->resolve($className, "__construct", $overrides);
            array_unshift($dependencies, $className);
            return call_user_func_array(array($this, "build"), $dependencies);
        }
    }
}