Skip to content

Commit

Permalink
Inject Map and Definition classnames into the Builder
Browse files Browse the repository at this point in the history
  • Loading branch information
gyndav committed Apr 2, 2012
1 parent 0ebce48 commit 3b4d0ee
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 6 deletions.
61 changes: 59 additions & 2 deletions src/Boomgo/Builder/MapBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
* MapBuilder
*
* @author Ludovic Fleury <ludo.fleury@gmail.com>
* @author David Guyon <dguyon@gmail.com>
*/
class MapBuilder
{
Expand All @@ -34,6 +35,16 @@ class MapBuilder
*/
protected $formatter;

/**
* @var string
*/
protected $mapClassName;

/**
* @var string
*/
protected $definitionClassName;

/**
* Constructor defines the Parser & Formatter
*
Expand All @@ -44,6 +55,8 @@ public function __construct(ParserInterface $parser, FormatterInterface $formatt
{
$this->setParser($parser);
$this->setFormatter($formatter);
$this->mapClassName = 'Boomgo\\Builder\\Map';
$this->definitionClassName = 'Boomgo\\Builder\\Definition';
}

/**
Expand Down Expand Up @@ -86,6 +99,46 @@ public function getFormatter()
return $this->formatter;
}

/**
* Define the map classname
*
* @param string $mapClassName
*/
public function setMapClassName($mapClassName)
{
$this->mapClassName = $mapClassName;
}

/**
* Return the map classname
*
* @return string
*/
public function getMapClassName()
{
return $this->mapClassName;
}

/**
* Define the definition classname
*
* @param string $definitionClassName
*/
public function setDefinitionClassName($definitionClassName)
{
$this->definitionClassName = $definitionClassName;
}

/**
* Return the definition classname
*
* @return string
*/
public function getDefinitionClassName()
{
return $this->definitionClassName;
}

/**
* Build Map(s) for an array of file
*
Expand Down Expand Up @@ -118,7 +171,8 @@ public function build(array $files)
*/
protected function buildMap(array $metadata)
{
$map = new Map($metadata['class']);
$className = $this->getMapClassName();
$map = new $className($metadata['class']);

foreach ($metadata['definitions'] as $metadataDefinition) {
$definition = $this->buildDefinition($metadataDefinition);
Expand Down Expand Up @@ -151,6 +205,9 @@ protected function buildDefinition(array $metadata)
$metadata['accessor'] = $this->formatter->getPhpAccessor($metadata['attribute']);
$metadata['mutator'] = $this->formatter->getPhpMutator($metadata['attribute']);

return new Definition($metadata);
$className = $this->getDefinitionClassName();
$definition = new $className($metadata);

return $definition;
}
}
26 changes: 22 additions & 4 deletions tests/Boomgo/Tests/Units/Builder/MapBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
* Builder tests
*
* @author Ludovic Fleury <ludo.fleury@gmail.com>
* @author David Guyon <dguyon@gmail.com>
*/
class MapBuilder extends Test
{
Expand All @@ -32,7 +33,11 @@ public function test__construct()
->object($builder->getParser())
->isInstanceOf('\\Mock\\Parser\\Parser')
->object($builder->getFormatter())
->isInstanceOf('\\Mock\\Formatter\\Formatter');
->isInstanceOf('\\Mock\\Formatter\\Formatter')
->string($builder->getMapClassName())
->isEqualTo('Boomgo\\Builder\\Map')
->string($builder->getDefinitionClassName())
->isEqualTo('Boomgo\\Builder\\Definition');
}

public function testGetParser()
Expand All @@ -53,6 +58,21 @@ public function testGetFormatter()
->isInstanceOf('\\Mock\\Formatter\\Formatter');
}

public function testMutatorsAndAccessors()
{
$mapbuilder = $this->builderProvider();

$mapbuilder->setMapClassName('My\\New\\Map');
$this->assert()
->string($mapbuilder->getMapClassName())
->isEqualTo('My\\New\\Map');

$mapbuilder->setDefinitionClassName('My\\New\\Definition');
$this->assert()
->string($mapbuilder->getDefinitionClassName())
->isEqualTo('My\\New\\Definition');
}

public function testBuild()
{
$fixtureDir = __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'Fixture';
Expand All @@ -76,9 +96,7 @@ public function testBuild()
->hasKeys(array('string', 'array'));

// Should throw exception on invalid metadata


$this->mockClass('Boomgo\\Parser\\ParserInterface', '\\Mock\\Parser', 'InvalidParser');
$this->mockClass('Boomgo\\Parser\\ParserInterface', '\\Mock\\Parser', 'InvalidParser');
$invalidMetadata = array(
'class' => '\\Boomgo\\Tests\\Units\\Fixture\\Annoted\\Document',
'definitions' => array(
Expand Down

0 comments on commit 3b4d0ee

Please sign in to comment.