1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143:
<?php
namespace Net\Bazzline\Component\Locator\Configuration\Assembler;
use Net\Bazzline\Component\Locator\Configuration\Configuration;
class FromArrayAssembler extends AbstractAssembler
{
protected function map($data, Configuration $configuration)
{
$configuration = $this->mapBooleanProperties(
$data,
$configuration
);
$configuration = $this->mapStringProperties(
$data,
$configuration
);
$configuration = $this->mapInstanceProperties(
$data,
$configuration
);
$configuration = $this->mapArrayProperties(
$data,
$configuration
);
return $configuration;
}
protected function validateData($data)
{
if (!is_array($data)) {
throw new InvalidArgumentException(
'data must be an array'
);
}
if (empty($data)) {
throw new InvalidArgumentException(
'data array must contain content'
);
}
$mandatoryKeysToExpectedValueTyp = array(
'class_name' => 'string',
'file_path' => 'string'
);
$this->validateDataWithMandatoryKeysAndExpectedValueType(
$data,
$mandatoryKeysToExpectedValueTyp
);
$optionalKeysToExpectedValueTyp = array(
'extends' => 'string',
'instances' => 'array',
'implements' => 'array',
'namespace' => 'string',
'uses' => 'array'
);
$this->validateDataWithOptionalKeysAndExpectedValueTypeOrSetExpectedValueAsDefault(
$data,
$optionalKeysToExpectedValueTyp
);
}
private function mapArrayProperties(array $data, Configuration $configuration)
{
if (isset($data['implements'])) {
foreach ($data['implements'] as $interfaceName) {
$configuration->addImplements($interfaceName);
}
}
if (isset($data['uses'])) {
foreach ($data['uses'] as $key => $uses) {
if (!isset($uses['class_name'])) {
throw new RuntimeException(
'use entry with key "' . $key . '" needs to have a key "class_name"'
);
}
$alias = (isset($uses['alias'])) ? $uses['alias'] : '';
$class = $uses['class_name'];
$configuration->addUses($class, $alias);
}
}
return $configuration;
}
private function mapInstanceProperties(array $data, Configuration $configuration)
{
if (isset($data['instances'])) {
foreach ($data['instances'] as $key => $instance) {
if (!isset($instance['class_name'])) {
throw new RuntimeException('instance entry with key "' . $key . '" needs to have a key "class_name"');
}
$alias = (isset($instance['alias'])) ? $instance['alias'] : null;
$class = $instance['class_name'];
$isFactory = (isset($instance['is_factory'])) ? $instance['is_factory'] : false;
$isShared = (isset($instance['is_shared'])) ? $instance['is_shared'] : true;
$methodBodyBuilder = (isset($instance['method_body_builder'])) ? $instance['method_body_builder'] : null;
$returnValue = (isset($instance['return_value'])) ? $instance['return_value'] : $class;
$configuration->addInstance($class, $isFactory, $isShared, $returnValue, $alias, $methodBodyBuilder);
}
}
return $configuration;
}
}