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
51 changes: 29 additions & 22 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
{
"name": "cedriclombardot/twig-generator",
"type": "library",
"description": "A generator for PHP code based on Twig template engine",
"keywords": ["twig", "generator", "code generation"],
"license": "MIT",
"authors": [
{
"name": "Cédric Lombardot",
"email": "cedric.lombardot@gmail.com"
},
{
"name": "François Zaninotto"
}
],
"require": {
"php": ">=5.3.0",
"twig/twig": ">=1.1, <2.0-dev"
},
"autoload": {
"psr-0": { "TwigGenerator": "src/" }
}
}
"name" : "cedriclombardot/twig-generator",
"type" : "library",
"description" : "A generator for PHP code based on Twig template engine",
"keywords" : [
"twig",
"generator",
"code generation"
],
"license" : "MIT",
"authors" : [{
"name" : "Cédric Lombardot",
"email" : "cedric.lombardot@gmail.com"
}, {
"name" : "François Zaninotto"
}
],
"require" : {
"php" : ">=5.3.0",
"twig/twig" : ">=1.1, <2.0-dev"
},
"autoload" : {
"psr-0" : {
"TwigGenerator" : "src/"
}
},
"require-dev" : {
"phpunit/phpunit" : "~3"
}
}
79 changes: 73 additions & 6 deletions src/TwigGenerator/Builder/BaseBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,18 @@ abstract class BaseBuilder implements BuilderInterface
/**
* @var array A list of template directories.
*/
protected $templateDirectories = array();
private $templateDirectories = array();

/**
* @var boolean
*/
protected $templateDirectoriesSealed = false;

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

/**
* @var string
*/
Expand All @@ -43,7 +48,12 @@ abstract class BaseBuilder implements BuilderInterface
/**
* @var Boolean
*/
protected $mustOverwriteIfExists = false;
private $mustOverwriteIfExists = false;

/**
* @var Boolean
*/
protected $mustOverwriteIfExistsSealed = false;

/**
* @var array
Expand Down Expand Up @@ -97,15 +107,19 @@ public function getGenerator()
*/
public function addTemplateDir($templateDir)
{
$this->templateDirectories[$templateDir] = $templateDir;
if (!$this->templateDirectoriesSealed) {
$this->templateDirectories[$templateDir] = $templateDir;
}
}

/**
* {@inheritDoc}
*/
public function setTemplateDirs(array $templateDirs)
{
$this->templateDirectories = $templateDirs;
if (!$this->templateDirectoriesSealed) {
$this->templateDirectories = $templateDirs;
}
}

/**
Expand All @@ -115,6 +129,31 @@ public function getTemplateDirs()
{
return $this->templateDirectories;
}

/**
* Seal templateDirs property, so it is protected from overwriting
*/
public function sealTemplateDirs()
{
$this->templateDirectoriesSealed = true;
}

/**
* Unseal the templateDirs property, so it can be overwritten again
*/
public function unsealTemplateDirs()
{
$this->templateDirectoriesSealed = false;
}

/**
* Returns whether the templateDirs property is sealed
* @return boolean
*/
public function isTemplateDirsSealed()
{
return $this->templateDirectoriesSealed;
}

/**
* {@inheritDoc}
Expand Down Expand Up @@ -192,7 +231,35 @@ public function mustOverwriteIfExists()
*/
public function setMustOverwriteIfExists($status = true)
{
$this->mustOverwriteIfExists = $status;
if (!$this->mustOverwriteIfExistsSealed) {
$this->mustOverwriteIfExists = $status;
}
}

/**
* Seal the mustOverwriteIfExists property, so it is protected from overwriting
*/
public function sealMustOverwriteIfExists()
{
$this->mustOverwriteIfExistsSealed = true;
}

/**
* Unseal the mustOverwriteIfExists property, so it can be overwritten again
*/
public function unsealMustOverwriteIfExists()
{
$this->mustOverwriteIfExistsSealed = false;
}

/**
* Returns whether the mustOverwriteIfExists property is sealed
*
* @return boolean
*/
public function isMustOverwriteIfExistsSealed()
{
return $this->mustOverwriteIfExistsSealed;
}

/**
Expand Down
43 changes: 43 additions & 0 deletions tests/TwigGenerator/Tests/Builder/BaseBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,49 @@ public function testWriteOnDisk()
$builder->writeOnDisk(sys_get_temp_dir());
$this->assertEquals('Hello cedric !', file_get_contents(sys_get_temp_dir() . '/test.php'), 'If i change variables on a non existant files code is generated');
}

public function testSeal()
{
$builder = new DemoBuilder();

// mustOverwriteIfExists
$builder->setMustOverwriteIfExists(true);

$this->assertEquals(true, $builder->mustOverwriteIfExists());

$builder->sealMustOverwriteIfExists();
$builder->setMustOverwriteIfExists(false);

$this->assertEquals(true, $builder->mustOverwriteIfExists());

$builder->unsealMustOverwriteIfExists();

$builder->setMustOverwriteIfExists(false);
$this->assertEquals(false, $builder->mustOverwriteIfExists());

// templateDirs
$builder->setTemplateDirs(array('abc'));

$this->assertEquals(array('abc'), $builder->getTemplateDirs());

$builder->sealTemplateDirs();
$builder->setTemplateDirs(array('xyz'));

$this->assertEquals(array('abc'), $builder->getTemplateDirs());

$builder->addTemplateDir('def');

$this->assertEquals(array('abc'), $builder->getTemplateDirs());

$builder->unsealTemplateDirs();
$builder->setTemplateDirs(array('xyz'));

$this->assertEquals(array('xyz'), $builder->getTemplateDirs());

$builder->addTemplateDir('def');

$this->assertEquals(array('xyz', 'def' => 'def'), $builder->getTemplateDirs());
}

protected function initBuilder()
{
Expand Down
2 changes: 1 addition & 1 deletion tests/bootstrap.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

if ((!$loader = @include __DIR__.'/../vendor/.composer/autoload.php')) {
if ((!$loader = @include __DIR__.'/../vendor/autoload.php')) {
die('You must set up the project dependencies, run the following commands:'.PHP_EOL.
'curl -s http://getcomposer.org/installer | php'.PHP_EOL.
'php composer.phar install'.PHP_EOL);
Expand Down